Mierzenie podobieństwa semantycznego za pomocą spaCy

Przetwarzanie języka naturalnego z użyciem spaCy

Azadeh Mobasher

Principal Data Scientist

Metoda podobieństwa semantycznego

 

  • Proces analizy tekstów w celu identyfikacji podobieństw
  • Kategoryzuje teksty na predefiniowane kategorie lub wykrywa powiązane teksty
  • Wynik podobieństwa mierzy stopień podobieństwa dwóch fragmentów tekstu

 

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?
Przetwarzanie języka naturalnego z użyciem spaCy

Wynik podobieństwa

  • Metryka zdefiniowana na tekstach
  • Do pomiaru podobieństwa używa się podobieństwa cosinusowego i wektorów słów
  • Podobieństwo cosinusowe przyjmuje wartości z zakresu od 0 do 1

Podobieństwo cosinusowe i wektory

Przetwarzanie języka naturalnego z użyciem spaCy

Podobieństwo tokenów

  • spaCy oblicza wyniki podobieństwa między obiektami 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
Przetwarzanie języka naturalnego z użyciem spaCy

Podobieństwo fragmentów (Span)

  • spaCy oblicza podobieństwo semantyczne dwóch obiektów 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
Przetwarzanie języka naturalnego z użyciem spaCy

Podobieństwo dokumentów (Doc)

  • spaCy oblicza wyniki podobieństwa między dwoma dokumentami
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
  • Wysoki wynik podobieństwa cosinusowego wskazuje na bardzo podobną treść semantyczną
  • Wektory Doc domyślnie są średnią wektorów słów
Przetwarzanie języka naturalnego z użyciem spaCy

Podobieństwo zdań

  • spaCy znajduje treści powiązane z danym słowem kluczowym
  • Wyszukiwanie pytań klientów podobnych do słowa 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
Przetwarzanie języka naturalnego z użyciem spaCy

Czas na ćwiczenia!

Przetwarzanie języka naturalnego z użyciem spaCy

Preparing Video For Download...