Mesurer la similarité sémantique avec spaCy

Traitement du langage naturel avec spaCy

Azadeh Mobasher

Principal Data Scientist

La méthode de similarité sémantique

 

  • Processus d'analyse de textes pour repérer les similarités
  • Classe les textes en catégories prédéfinies ou détecte des textes pertinents
  • Un score de similarité mesure à quel point deux textes se ressemblent

 

What is the cheapest flight from Boston to Seattle?
Which airline serves Denver, Pittsburgh and Atlanta?
What kinds of planes are used by American Airlines?
Traitement du langage naturel avec spaCy

Score de similarité

  • Une métrique définie sur des textes
  • Pour mesurer la similarité, utilisez la similarité cosinus et les vecteurs de mots
  • La similarité cosinus vaut entre 0 et 1

Similarité cosinus et vecteurs

Traitement du langage naturel avec spaCy

Similarité entre tokens

  • spaCy calcule des scores de similarité entre des objets Token
nlp = spacy.load("en_core_web_md")
doc1 = nlp("We eat pizza")
doc2 = nlp("We like to eat pasta")

token1 = doc1[2] token2 = doc2[4] print(f"Similarity between {token1} and {token2} = ", round(token1.similarity(token2), 3))
>>> Similarity between pizza and pasta =  0.685
Traitement du langage naturel avec spaCy

Similarité entre spans

  • spaCy calcule la similarité sémantique de deux objets Span
doc1 = nlp("We eat pizza")
doc2 = nlp("We like to eat pasta")

span1 = doc1[1:]
span2 = doc2[1:]

print(f"Similarity between \"{span1}\" and \"{span2}\" = ", round(span1.similarity(span2), 3))
>>> Similarity between "eat pizza" and "like to eat pasta" =  0.588
print(f"Similarity between \"{doc1[1:]}\" and \"{doc2[3:]}\" = ",
        round(doc1[1:].similarity(doc2[3:]), 3))
>>> Similarity between "eat pizza" and "eat pasta" =  0.936
Traitement du langage naturel avec spaCy

Similarité entre documents

  • spaCy calcule les scores de similarité entre deux documents
nlp = spacy.load("en_core_web_md")

doc1 = nlp("I like to play basketball")
doc2 = nlp("I love to play basketball")
print("Similarity score :", round(doc1.similarity(doc2), 3))
>>> Similarity score : 0.975
  • Une forte similarité cosinus indique des contenus très proches sémantiquement
  • Les vecteurs Doc sont par défaut une moyenne des vecteurs de mots
Traitement du langage naturel avec spaCy

Similarité entre phrases

  • spaCy trouve le contenu pertinent pour un mot-clé donné
  • Repérer des questions de clients similaires au mot price :
sentences = nlp("What is the cheapest flight from Boston to Seattle? 
                 Which airline serves Denver, Pittsburgh and Atlanta? 
                 What kinds of planes are used by American Airlines?")

keyword = nlp("price")

for i, sentence in enumerate(sentences.sents): print(f"Similarity score with sentence {i+1}: ", round(sentence.similarity(keyword), 5))
>>> Similarity score with sentence 1:  0.26136
Similarity score with sentence 2:  0.14021
Similarity score with sentence 3:  0.13885
Traitement du langage naturel avec spaCy

Passons à la pratique !

Traitement du langage naturel avec spaCy

Preparing Video For Download...