Comment calculer la similarité cosinus entre deux phrases sans bibliothèques externes ?

DDD
Libérer: 2024-11-01 13:14:02
original
753 Les gens l'ont consulté

How Can You Calculate Cosine Similarity Between Two Sentences Without External Libraries?

Calcul de la similarité cosinus entre deux chaînes de phrases sans bibliothèques externes

Dans le contexte du traitement du langage naturel, le calcul de la similarité cosinus est essentiel pour mesurer la similarité textuelle entre les documents. Bien que des bibliothèques externes telles que tf-idf-cosine puissent faciliter cette tâche, il est également possible de calculer manuellement la similarité cosinus sans s'appuyer sur de telles dépendances.

Aperçu de la similarité cosinus

Cosinus la similarité quantifie l'angle entre deux vecteurs représentant les textes. Une similarité cosinus plus élevée indique un angle plus petit, ce qui implique une plus grande similarité entre les textes. Il est calculé en utilisant le produit scalaire des vecteurs normalisés divisé par leurs magnitudes.

Implémentation manuelle de la similarité cosinus

Pour calculer manuellement la similarité cosinus, nous définissons les étapes suivantes :

  1. Tokénisation : divisez les phrases en mots individuels.
  2. Vectorisation : créez un compteur pour chaque mot dans chaque phrase, qui représente sa fréquence (terme fréquence).
  3. Normalisation : Normaliser les vecteurs en divisant chaque élément par la racine carrée de la somme des carrés de ses éléments (norme L2).
  4. Calcul du cosinus : calculez le produit scalaire des vecteurs normalisés et divisez-le par leurs grandeurs.

Implémentation du code

Vous trouverez ci-dessous une implémentation Python du calcul manuel de similarité cosinus :

<code class="python">import math
import re
from collections import Counter

WORD = re.compile(r"\w+")

def get_cosine(vec1, vec2):
    intersection = set(vec1.keys()) & set(vec2.keys())
    numerator = sum([vec1[x] * vec2[x] for x in intersection])
    
    sum1 = sum([vec1[x] ** 2 for x in vec1])
    sum2 = sum([vec2[x] ** 2 for x in vec2])
    denominator = math.sqrt(sum1) * math.sqrt(sum2)
    
    if not denominator:
        return 0.0
    else:
        return numerator / denominator

def text_to_vector(text):
    words = WORD.findall(text)
    return Counter(words)

text1 = "This is a foo bar sentence ."
text2 = "This sentence is similar to a foo bar sentence ."

vector1 = text_to_vector(text1)
vector2 = text_to_vector(text2)

cosine = get_cosine(vector1, vector2)

print("Cosine:", cosine)</code>
Copier après la connexion

Résultat

Ce code s'exécute comme suit :

Cosine: 0.861640436855
Copier après la connexion

Cette valeur indique une forte similarité cosinus entre les deux phrases, confirmant qu'elles sont textuellement similaires.

Considérations supplémentaires

Bien que cette approche manuelle fournisse une implémentation de base, elle peut être améliorée par :

  • Incorporation du radical ou de la lemmatisation pour une meilleure normalisation des mots.
  • Mise en œuvre d'un schéma de tokenisation plus sophistiqué.
  • Ajout de pondérations telles que TF-IDF pour des calculs de similarité plus précis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!