Какие инструменты НЛП использовать для сопоставления фраз, имеющих сходное значение или семантику

Я работаю над проектом, который требует, чтобы я сопоставил фразу или ключевое слово с набором похожих ключевых слов. Мне нужно выполнить семантический анализ для того же.

пример:

Соответствующий QT
дешевое медицинское страхование
доступное медицинское страхование
недорогая медицинская страховка
план медицинского обслуживания за меньшее
недорогая медицинская страховка

Общий смысл

дешевое медицинское страхование

Здесь слово под столбцом общего значения должно соответствовать столбцу под соответствующим QT. Я посмотрел на кучу инструментов и методов, чтобы сделать то же самое. S-Match выглядел очень перспективным, но я должен работать на Python, а не на Java. Кроме того, латентный семантический анализ выглядит хорошо, но я думаю, что это больше для классификации документов на основе ключевого слова, а не соответствия ключевых слов. Я немного знаком с NLTK. Может ли кто-нибудь дать некоторое представление о том, в каком направлении мне следует двигаться и какие инструменты я должен использовать для этого?

3 ответа

Если у вас есть большой корпус, где встречаются эти слова, вы можете обучить модель представлять каждое слово как вектор. Например, вы можете использовать глубокое обучение с помощью Word2vec "Skip-Gram и CBOW модели", они реализованы в программном пакете Gensim

В модели word2vec каждое слово представлено вектором, затем вы можете измерить семантическое сходство между двумя словами, измерив косинус векторов, представляющих эти слова. Семантические похожие слова должны иметь высокое косинусное сходство, например:

model.similarity('cheap','inexpensive') = 0.8

(Значение составлено только для иллюстрации.)

Кроме того, из моих экспериментов суммирование относительно небольшого количества слов (т. Е. До 3 или 4 слов) сохраняет семантику, например:

vector1 = model['cheap']+model['health']+model['insurance']
vector2 = model['low']+model['cost']+model['medical']+model['insurance']

similarity(vector1,vector2) = 0.7

(Опять же, только для иллюстрации.)

Вы можете использовать эту семантическую меру сходства между словами как меру для генерации ваших кластеров.

Когда латентный семантический анализ относится к "документу", он в основном означает любой набор слов, длина которого превышает 1. Вы можете использовать его для вычисления сходства между документом и другим документом, между словом и другим словом или между словом и документ. Таким образом, вы, безусловно, можете использовать его для выбранного приложения.

Другие алгоритмы, которые могут быть полезны:

Я бы начал с взгляда на Wordnet. Это даст вам настоящие синонимы и другие словосочетания для сотен тысяч терминов. Так как вы пометили nltk: Он обеспечивает привязки для Wordnet, и вы можете использовать его в качестве основы для решений для конкретных доменов.

Все еще в NLTK, проверьте обсуждение метода similar() во введении к книге НЛТК и классу nltk.text.ContextIndex что это основано на. (Все довольно просто, но это может быть все, что вам действительно нужно).

Другие вопросы по тегам