Если вы еще не видели его, вы можете проверить sense2vec
, который позволяет изучать контекстно-зависимые векторы, включая теги части речи или метки сущностей.Пример быстрого использования расширения spaCy:
s2v = Sense2VecComponent('/path/to/reddit_vectors-1.1.0')
nlp.add_pipe(s2v)
doc = nlp(u"A sentence about natural language processing.")
most_similar = doc[3]._.s2v_most_similar(3)
# [(('natural language processing', 'NOUN'), 1.0),
# (('machine learning', 'NOUN'), 0.8986966609954834),
# (('computer vision', 'NOUN'), 0.8636297583580017)]
Смотрите здесь для интерактивной демонстрации с использованием модели sense2vec, обученной комментариям Reddit.Используя эту модель, «парковка» возвращает такие вещи, как «парковка» и «гараж», а «Дональд Трамп» дает вам «Сару Пэйлин», «Митта Ромни» и"Барак Обама".Для неоднозначных объектов вы также можете включить метку объекта - например, «Ниагарский водопад | GPE» будет отображать термины, аналогичные геополитическим правам (GPE
), например, город в отличие от реальных водопадов.,Результаты, очевидно, зависят от того, что присутствовало в данных, поэтому для еще более конкретного сходства вы также можете поэкспериментировать с тренировкой собственных векторов sense2vec.