Măsurarea similarității semantice cu spaCy

Procesarea limbajului natural cu spaCy

Azadeh Mobasher

Principal Data Scientist

Metoda similarității semantice

 

  • Procesul de analiză a textelor pentru identificarea similarităților
  • Clasifică textele în categorii predefinite sau detectează texte relevante
  • Scorul de similaritate măsoară cât de asemănătoare sunt două texte

 

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?
Procesarea limbajului natural cu spaCy

Scorul de similaritate

  • O metrică definită pe texte
  • Pentru similaritate se folosesc similaritatea cosinus și vectorii de cuvinte
  • Similaritatea cosinus este un număr între 0 și 1

Similaritatea cosinus și vectori

Procesarea limbajului natural cu spaCy

Similaritatea token-urilor

  • spaCy calculează scoruri de similaritate între obiecte 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
Procesarea limbajului natural cu spaCy

Similaritatea span-urilor

  • spaCy calculează similaritatea semantică între două obiecte 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
Procesarea limbajului natural cu spaCy

Similaritatea documentelor

  • spaCy calculează scoruri de similaritate între două documente
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
  • Un scor cosinus ridicat indică conținuturi semantic foarte similare
  • Vectorii Doc sunt implicit media vectorilor de cuvinte
Procesarea limbajului natural cu spaCy

Similaritatea propozițiilor

  • spaCy găsește conținut relevant pentru un cuvânt-cheie dat
  • Găsirea întrebărilor similare cu cuvântul preț:
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
Procesarea limbajului natural cu spaCy

Să exersăm!

Procesarea limbajului natural cu spaCy

Preparing Video For Download...