it-swarm-ru.tech

Есть ли алгоритм, который говорит семантическое сходство двух фраз

ввод: фраза 1, фраза 2

вывод: значение семантического сходства (между 0 и 1), или вероятность того, что эти две фразы говорят об одном и том же

61
btw0

Вы можете проверить эту статью:

Сходство предложений на основе семантических сетей и статистики корпуса (PDF)

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

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

С Уважением,

Мэтт.

41
Matt Mower

На это есть короткий и длинный ответ.

Краткий ответ:

Используйте пакет WordNet :: Similarity Perl . Если Perl не является вашим языком выбора, проверьте страница проекта WordNet в Принстоне, или Google для библиотеки обертки.

Длинный ответ:

Определение сходства слов - сложная проблема, и исследования в этой области все еще очень актуальны. Чтобы вычислить сходство, вам необходимо соответствующее представление значения Слова. Но что будет означать, скажем, "стул"? На самом деле, что является точным значением слова "стул"? Если вы долго и усердно об этом думаете, это изменит ваше мнение, вы слегка сойдете с ума и, наконец, начнете исследовательскую карьеру в области философии или компьютерной лингвистики, чтобы найти правду ™. И философы, и лингвисты пытались найти ответ буквально тысячи лет, и конца этому не видно.

Итак, если вы заинтересованы в более глубоком изучении этой проблемы, я настоятельно рекомендую прочитать главу 20.7 в Обработка речи и языка Jurafsky и Martin, некоторые из которых доступны через Google Книги . Он дает очень хороший обзор современного уровня методов распространения, которые используют статистику совпадений Word, чтобы определить меру сходства Word. Однако вы вряд ли найдете библиотеки, реализующие их.

32
nfelger

Возможно, вы захотите зарегистрироваться в проекте WordNet в Принстонском университете. Один из возможных подходов к этому состоит в том, чтобы сначала пропустить каждую фразу через список стоп-слов (удалить "общие" слова, такие как "a", "to", "the" и т.д.), А затем для каждого из оставшихся слов в В каждой фразе вы можете вычислить семантическое "сходство" между каждым словом в другой фразе, используя меру расстояния, основанную на WordNet. Мера расстояния может быть примерно такой: количество дуг, которые вам нужно пройти в WordNet, чтобы перейти от Word1 к Word2.

Извините, это довольно высокого уровня. Я очевидно никогда не пробовал это. Просто быстрая мысль.

7
Chuck Wooters

Для тех, кто только что пришел, я бы посоветовал взглянуть на SEMILAR - http://www.semanticsdentifity.org/ . Они реализуют множество современных методов исследования для расчета сходства слов и предложений. Это написано на Java.

SEMILAR API поставляется с различными методами сходства, основанными на Wordnet, скрытом семантическом анализе (LSA), скрытом распределении дирихле (LDA), BLEU, метеоре, точечной взаимной информации (PMI), методах на основе зависимостей, оптимизированных методах на основе квадратичного назначения и т.д. методы сходства работают в разных гранулярностях - от слова к слову, от предложения к предложению или к более крупным текстам.

5
kyrenia

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

5
jonfm

Извините, что выкопал 6-летний вопрос, но, как я только что наткнулся на этот пост сегодня, я добавлю ответ на случай, если кто-то еще ищет что-то подобное.

cortical.io разработал процесс для вычисления семантического сходства двух выражений, и у них есть демонстрация этого на их сайте . Они предлагают бесплатный API, обеспечивающий доступ к функциональности , поэтому вы можете использовать его в своем собственном приложении без необходимости самостоятельно реализовывать алгоритм.

3
Hybrid System

Одно простое решение состоит в том, чтобы использовать скалярное произведение символьных n-граммовых векторов. Это устойчиво по отношению к изменениям порядка (которые не являются многими метриками расстояния редактирования) и фиксирует множество проблем, связанных со стеммингом. Это также предотвращает AI-полную проблему полного семантического понимания.

Чтобы вычислить вектор n-граммы, просто выберите значение n (скажем, 3) и хешируйте каждую последовательность из 3 слов в фразе в вектор. Нормализуйте вектор на единицу длины, затем возьмите скалярное произведение разных векторов, чтобы обнаружить сходство.

Этот подход был описан в Дж. Митчелл и М. Лапата, "Композиция в распределительных моделях семантики", Cognitive Science, том 34, № 8, с. 1388–1429, ноябрь 2010 г., DOI 10.1111/j.1551-6709.2010.01106.x

3
Jonathan Betz

Попробуйте SimService , который предоставляет сервис для вычисления похожих слов и словосочетаний.

2
Lushan Han

Я хотел бы взглянуть на статистические методы, которые учитывают вероятность появления каждого слова в предложении. Это позволит вам придавать меньшее значение популярным словам, таким как "и", "или", "the", и придавать большее значение словам, которые выглядят менее регулярно и, следовательно, являются лучшим отличительным фактором. Например, если у вас есть два предложения:

1) Алгоритм Смит-Уотерман дает вам меру сходства между двумя строками. 2) Мы рассмотрели алгоритм Смит-Уотерман и нашли, что он достаточно хорош для нашего проекта.

Тот факт, что два предложения разделяют слова "кузнец-водник" и слова "алгоритмы" (которые не так часто встречаются, как "и", "или" и т.д.), Позволит вам сказать, что эти два предложения действительно могут говорить о той же теме.

Подводя итог, я хотел бы предложить вам взглянуть на: 1) меры сходства строк; 2) статистические методы;

Надеюсь это поможет.

2
Gia

Это требует, чтобы ваш алгоритм действительно знал, о чем вы говорите. Это может быть сделано в некоторой элементарной форме, просто сравнивая слова и ища синонимы и т.д., Но любой точный результат потребует некоторой формы интеллекта.

1
Rik

Взгляните на http://mkusner.github.io/publications/WMD.pdf В этой статье описывается алгоритм, называемый расстоянием Word Mover, который пытается раскрыть семантическое сходство. Он опирается на оценки сходства, как диктует Word2vec. Интеграция этого с GoogleNews-vector-отрицательным 300 дает желаемые результаты.

0
Anonymous