Многие методы НЛП для «смыслового» или «семантического» сходства основаны на предположении, что слова, встречающиеся в сходных местах, имеют сходные значения.Например, «Я ласкаю собаку» и «Я ласкаю кошку» - мы, возможно, предположим, что собаки и кошки имеют одинаковое значение.
spaCy использует так называемые вложения, которые обучаются на основе тысяч документов (обычно новостейстатьи или страницы википедии), используя ту же идею.Модели word2vec удаляют слово из предложения, просматривают слово до и после вновь созданного пробела и пытаются обучить модель правильному прогнозированию пропущенного слова.Результатом такой модели является вложение слова.
Вложения представляют собой числовое представление слов.Используя эти числовые представления, мы можем вычислить расстояние или сходство между двумя словами или предложениями.Обычный метод для этого - вычислить косинусное сходство двух векторов вложения.
Я не уверен насчет PMI с помощью spaCy, но вы можете рассчитать семантическое сходство в spaCy, используя метод, который я описал выше.
import spacy
nlp = spacy.load('en_core_web_lg')
doc1 = nlp('assisted living communities near me')
doc2 = nlp('list of assisted living facilities')
doc3 = nlp('free puppy and kitty adoption')
print(doc1.similarity(doc2)) # 0.8091
print(doc1.similarity(doc3)) # 0.4659