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



Answers

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

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

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

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

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

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

Question

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

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




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

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




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

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

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

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

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




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




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




Links