Измерение семантического сходства с помощью spaCy

Обработка естественного языка с помощью spaCy

Azadeh Mobasher

Principal Data Scientist

Метод семантического сходства

 

  • Процесс анализа текстов для выявления сходств
  • Классифицирует тексты по заданным категориям или находит релевантные тексты
  • Оценка сходства показывает, насколько похожи два текста

 

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?
Обработка естественного языка с помощью spaCy

Оценка сходства

  • Метрика, определённая для текстов
  • Для измерения сходства используются косинусное сходство и векторы слов
  • Косинусное сходство — число от 0 до 1

Косинусное сходство и векторы

Обработка естественного языка с помощью spaCy

Сходство токенов

  • spaCy вычисляет оценки сходства между объектами 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
Обработка естественного языка с помощью spaCy

Сходство отрезков

  • spaCy вычисляет семантическое сходство двух объектов 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
Обработка естественного языка с помощью spaCy

Сходство документов

  • spaCy вычисляет оценки сходства между двумя документами
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
  • Высокое косинусное сходство означает близость содержания
  • Векторы Doc по умолчанию — среднее векторов слов
Обработка естественного языка с помощью spaCy

Сходство предложений

  • spaCy находит контент, релевантный заданному ключевому слову
  • Поиск вопросов клиентов, похожих на слово 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
Обработка естественного языка с помощью spaCy

Давайте потренируемся!

Обработка естественного языка с помощью spaCy

Preparing Video For Download...