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




алгоритм голосования (8)

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

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


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


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

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


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

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


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


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

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

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

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

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

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


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

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

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


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


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

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

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

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

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





semantics