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




moore voting (10)

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

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


Answers

Вы можете проверить этот документ:

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

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

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

С Уважением,

Мэтт.


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


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


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


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


На это короткий ответ.

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

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

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

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

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


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

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


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

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

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

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

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


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

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


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

Но скорость зависит от наличия всей сети маршрутизации, под которой я подразумеваю направленный график дуг и узлов, представляющих сегменты маршрута и переходы соответственно, в памяти. Основной накладной - время, затраченное на создание этой сети. Некоторые приблизительные цифры, основанные на обычном ноутбуке под управлением Windows, и маршрутизация по всей Испании: время, затраченное на создание сети: 10-15 секунд; время, затраченное на подсчет маршрута: слишком короткое для измерения.

Другая важная вещь заключается в том, чтобы иметь возможность повторно использовать сеть для стольких вычислений маршрутизации, как вам нравится. Если ваш алгоритм каким-то образом отметил узлы записи наилучшего маршрута (общая стоимость текущего узла и лучшая дуга) - как это необходимо в A * - вам нужно сбросить или удалить эту старую информацию. Вместо того, чтобы проходить через сотни тысяч узлов, проще использовать систему номеров поколений. Отметьте каждый узел номером генерации своих данных; увеличивать число поколений при вычислении нового маршрута; любой узел со старшим номером устарел, и его информация может быть проигнорирована.





algorithm nlp semantics