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


Answers

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

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

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

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

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

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

Question

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

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




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




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




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




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

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