ввод: фраза 1, фраза 2
вывод: значение семантического сходства (от 0 до 1) или вероятность, что эти две фразы говорят об одном и том же
ввод: фраза 1, фраза 2
вывод: значение семантического сходства (от 0 до 1) или вероятность, что эти две фразы говорят об одном и том же
Возможно, вы захотите ознакомиться с этой статьей:
Я реализовал описанный алгоритм. Наш контекст был очень общим (фактически, любые два предложения на английском языке), и мы обнаружили, что принятый подход был слишком медленным, а результаты, хотя и многообещающими, недостаточно хорошими (или, вероятно, будут таковыми без значительных дополнительных усилий).
Вы не даете много контекста, поэтому я не обязательно рекомендую это, но чтение статьи может быть полезно для вас, чтобы понять, как решить проблему.
С уважением,
Мэтт.
На это есть короткий и длинный ответ.
Краткий ответ:
Используйте пакет WordNet :: Similarity Perl. Если Perl не является вашим языком, проверьте страницу проекта WordNet в Принстоне или найдите библиотеку оболочки в Google.
Длинный ответ:
Определение сходства слов - сложная задача, и исследования в этой области все еще очень актуальны. Чтобы вычислить сходство, вам нужно соответствующее представление значения слова. Но что могло бы означать, скажем, «стул»? В самом деле, каково точное значение слова "стул"? Если вы думаете об этом долго и усердно, это исказит ваш ум, вы немного сойдете с ума и, наконец, начнете карьеру исследователя в области философии или компьютерной лингвистики, чтобы найти истину ™. И философы, и лингвисты пытались найти ответ буквально тысячи лет, и конца этому не видно.
Итак, если вы заинтересованы в более глубоком изучении этой проблемы, я настоятельно рекомендую прочитать главу 20.7 в Обработка речи и языка Джурафски и Мартина, некоторые из которых доступны через person nfelger schedule 07.10.2008
Возможно, вам стоит заглянуть в проект WordNet в Принстонском университете. Один из возможных подходов к этому - сначала пропустить каждую фразу через список стоп-слов (чтобы удалить «общие» слова, такие как «a», «to», «the» и т. Д.), А затем для каждого из оставшихся слов в каждую фразу, вы можете вычислить семантическое «сходство» между каждым из слов в другой фразе, используя меру расстояния на основе WordNet. Измерение расстояния может быть примерно таким: количество дуг, которые вы должны пройти в WordNet, чтобы перейти от word1 к word2.
Извините, это довольно высокий уровень. Я, очевидно, никогда не пробовал этого. Быстрая мысль.
Тем, кто только пришел к этому, я бы посоветовал взглянуть на SEMILAR - http://www.semanticsimilarity.org/ а>. В них реализовано множество современных методов исследования схожести слов и предложений. Он написан на Java.
SEMILAR API поставляется с различными методами подобия, основанными на Wordnet, скрытом семантическом анализе (LSA), скрытом распределении Дирихле (LDA), BLEU, Meteor, точечной взаимной информации (PMI), методах на основе зависимостей, оптимизированных методах на основе квадратичного присвоения и т. Д. Методы подобия работают с разной степенью детализации - слово в слово, предложение к предложению или более крупные тексты.
Для этого я бы изучил скрытое семантическое индексирование. Я считаю, что вы можете создать что-то похожее на индекс поиска в векторном пространстве, но с семантически связанными терминами, которые будут ближе друг к другу, то есть с меньшим углом между ними. Если я узнаю больше, я опубликую здесь.
Извините, что откопал вопрос шестилетней давности, но, поскольку я только что наткнулся на этот пост сегодня, я добавлю ответ на случай, если кто-то еще ищет что-то подобное.
cortical.io разработал процесс вычисления семантического сходства двух выражений, и у них есть его демонстрация. на их веб-сайте. Они предлагают бесплатный API, обеспечивающий доступ к функциям, так что вы можете использовать его в своем собственном приложении без придется реализовать алгоритм самостоятельно.
Одно из простых решений - использовать скалярное произведение символьных n-граммовых векторов. Это надежно по сравнению с изменениями порядка (чего не делают многие метрики расстояния редактирования) и решает многие проблемы, связанные с остановкой. Это также предотвращает проблему полного семантического понимания AI-complete.
Чтобы вычислить вектор n-грамм, просто выберите значение n (скажем, 3) и хешируйте каждую последовательность из 3 слов во фразе в вектор. Нормализуйте вектор до единичной длины, затем возьмите скалярное произведение разных векторов, чтобы обнаружить сходство.
Этот подход описан в J. Митчелл и М. Лапата, «Композиция в распределительных моделях семантики», Когнитивная наука, т. 34, нет. 8, pp. 1388–1429, ноябрь 2010 г., DOI 10.1111 / j.1551-6709.2010.01106.x
Я бы посмотрел на статистические методы, которые учитывают вероятность появления каждого слова в предложении. Это позволит вам придавать меньшее значение популярным словам, таким как «и», «или», «the», и придавать большее значение словам, которые появляются менее регулярно и, следовательно, являются лучшим отличительным фактором. Например, если у вас есть два предложения:
1) Алгоритм Смита-Уотермана дает вам меру сходства между двумя строками. 2) Мы рассмотрели алгоритм Смита-Уотермана и пришли к выводу, что он достаточно хорош для нашего проекта.
Тот факт, что в этих двух предложениях используются слова «smith-waterman» и «алгоритмы» (которые встречаются не так часто, как «и», «или» и т. Д.), Позволит вам сказать, что эти два предложения действительно могут говорить на ту же тему.
Подводя итог, я бы посоветовал вам взглянуть на: 1) меры сходства строк; 2) статистические методы;
Надеюсь это поможет.
I love you, I hate you), но имеют противоположные значения. Следующие строки не похожи друг на друга, но имеют схожие значения: (Thank you; the dinner was delicious!, You always cook a fine meal. Much appreciated.) Использование необычного слова: (An onomatopoeia is a word that imitates the sound of the thing it describes, Children and non-natives use onomatopoeia to describe things more than adult native speakers.) не означает одно и то же.
- person isomorphismes; 13.03.2013
Попробуйте SimService, который предоставляет сервис для вычисления самых популярных похожих слов и фраз.
Это требует, чтобы ваш алгоритм действительно знал, о чем вы говорите. Это можно сделать в какой-то элементарной форме, просто сравнивая слова и ища синонимы и т. Д., Но любой точный результат потребует некоторой формы интеллекта.
Взгляните на http://mkusner.github.io/publications/WMD.pdf В этой статье описывается алгоритм, называемый расстоянием перемещения слов, который пытается выявить семантическое сходство. Он полагается на оценки сходства, продиктованные word2vec. Интеграция этого с GoogleNews-vectors-negative300 дает желаемые результаты.