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

<p>ввод: фраза 1, фраза 2</p><p>вывод: значение семантического сходства (между 0 и 1), или вероятность того, что эти две фразы говорят об одном и том же</p>

<hr><p>вы можете проверить эту статью:</p><p> <a href="http://ants.iis.sinica.edu.tw/3bkmj9ltewxtsrrvnoknfdxrm3zfwrr/55/sentence%20similarity%20based%20on%20semantic%20nets%20and%20corpus%20statistics.pdf">сходство предложений на основе семантических сетей и статистики корпуса (pdf)</a> </p><p>я реализовал описанный алгоритм. наш контекст был очень общим (фактически любые два предложения на английском языке), и мы обнаружили, что выбранный подход был слишком медленным, и результаты, хотя и многообещающие, не достаточно хороши (или, вероятно, будут такими без значительных, дополнительных усилий).</p><p>вы не даете много контекста, поэтому я не могу рекомендовать это, но чтение статьи может быть полезным для вас, чтобы понять, как решить проблему.</p><p>с уважением,</p><p>мэтт.</p>

<p>на это есть короткий и длинный ответ.</p><p>краткий ответ:</p><p>используйте пакет <a href="http://search.cpan.org/dist/wordnet-similarity/">wordnet :: similarity perl</a> . если perl не является вашим языком выбора, проверьте <a href="http://wordnet.princeton.edu/">страница проекта wordnet</a> в принстоне, или google для библиотеки обертки.</p><p>длинный ответ:</p><p>определение сходства слов - сложная проблема, и исследования в этой области все еще очень актуальны. чтобы вычислить сходство, вам необходимо соответствующее представление <em> значения </em> слова. но что будет означать, скажем, "стул"? на самом деле, что <em> является </em> точным значением слова "стул"? если вы долго и усердно об этом думаете, это изменит ваше мнение, вы слегка сойдете с ума и, наконец, начнете исследовательскую карьеру в области философии или компьютерной лингвистики, чтобы найти правду ™. и философы, и лингвисты пытались найти ответ буквально тысячи лет, и конца этому не видно.</p><p>итак, если вы заинтересованы в более глубоком изучении этой проблемы, я настоятельно рекомендую прочитать главу 20.7 в <a href="https://rads.stackoverflow.com/amzn/click/com/0131873210">обработка речи и языка</a> jurafsky и martin, некоторые из которых доступны через <a href="http://books.google.co.uk/books?id=fzmj5unk8aqc&pg=pa379&lpg=pa379b&ots=lqqbz7ejpg&sig=7viroxss0bnlv-b28fcpqgnqjvs&hl=en&sa=x&oi=book\_result&resnum=1&ct=result#ppa658,m1">google книги</a> . он дает очень хороший обзор современного уровня методов распространения, которые используют статистику совпадений word, чтобы определить меру сходства word. однако вы вряд ли найдете библиотеки, реализующие их.</p>

<p>возможно, вы захотите зарегистрироваться в проекте <a href="http://wordnet.princeton.edu/">wordnet</a> в принстонском университете. один из возможных подходов к этому состоит в том, чтобы сначала пропустить каждую фразу через список стоп-слов (удалить "общие" слова, такие как "a", "to", "the" и т.д.), а затем для каждого из оставшихся слов в в каждой фразе вы можете вычислить семантическое "сходство" между каждым словом в другой фразе, используя меру расстояния, основанную на wordnet. мера расстояния может быть примерно такой: количество дуг, которые вам нужно пройти в wordnet, чтобы перейти от word1 к word2.</p><p>извините, это довольно высокого уровня. я очевидно никогда не пробовал это. просто быстрая мысль.</p>

<p>для тех, кто только что пришел, я бы посоветовал взглянуть на semilar - <a href="http://www.semanticsimilarity.org/">http://www.semanticsdentifity.org/</a> . они реализуют множество современных методов исследования для расчета сходства слов и предложений. это написано на java.</p><blockquote> <p>semilar api поставляется с различными методами сходства, основанными на wordnet, скрытом семантическом анализе (lsa), скрытом распределении дирихле (lda), bleu, метеоре, точечной взаимной информации (pmi), методах на основе зависимостей, оптимизированных методах на основе квадратичного назначения и т.д. методы сходства работают в разных гранулярностях - от слова к слову, от предложения к предложению или к более крупным текстам.</p> </blockquote>

<p>я бы посмотрел в скрытой семантической индексации для этого. я полагаю, что вы можете создать нечто похожее на индекс поиска в векторном пространстве, но с семантически связанными терминами, находящимися ближе друг к другу, то есть иметь меньший угол между ними. если я узнаю больше, я опубликую здесь.</p>

<p>извините, что выкопал 6-летний вопрос, но, как я только что наткнулся на этот пост сегодня, я добавлю ответ на случай, если кто-то еще ищет что-то подобное.</p><p>cortical.io разработал процесс для вычисления семантического сходства двух выражений, и у них есть <a href="http://www.cortical.io/demos/similarity-explorer/">демонстрация этого на их сайте</a> . они предлагают <a href="http://www.cortical.io/developers.html">бесплатный api, обеспечивающий доступ к функциональности</a> , поэтому вы можете использовать его в своем собственном приложении без необходимости самостоятельно реализовывать алгоритм.</p>

<p>одно простое решение состоит в том, чтобы использовать скалярное произведение символьных n-граммовых векторов. это устойчиво по отношению к изменениям порядка (которые не являются многими метриками расстояния редактирования) и фиксирует множество проблем, связанных со стеммингом. это также предотвращает ai-полную проблему полного семантического понимания.</p><p>чтобы вычислить вектор n-граммы, просто выберите значение n (скажем, 3) и хешируйте каждую последовательность из 3 слов в фразе в вектор. нормализуйте вектор на единицу длины, затем возьмите скалярное произведение разных векторов, чтобы обнаружить сходство.</p><p>этот подход был описан в <a href="http://onlinelibrary.wiley.com/doi/10.1111/j.1551-6709.2010.01106.x/abstract">дж. митчелл и м. лапата, "композиция в распределительных моделях семантики", cognitive science, том 34, № 8, с. 1388–1429, ноябрь 2010 г., doi 10.1111/j.1551-6709.2010.01106.x</a> </p>

<p>попробуйте <a href="http://swoogle.umbc.edu/simservice/">simservice</a> , который предоставляет сервис для вычисления похожих слов и словосочетаний.</p>

<p>я хотел бы взглянуть на статистические методы, которые учитывают вероятность появления каждого слова в предложении. это позволит вам придавать меньшее значение популярным словам, таким как "и", "или", "the", и придавать большее значение словам, которые выглядят менее регулярно и, следовательно, являются лучшим отличительным фактором. например, если у вас есть два предложения:</p><p>1) алгоритм смит-уотерман дает вам меру сходства между двумя строками. 2) мы рассмотрели алгоритм смит-уотерман и нашли, что он достаточно хорош для нашего проекта.</p><p>тот факт, что два предложения разделяют слова "кузнец-водник" и слова "алгоритмы" (которые не так часто встречаются, как "и", "или" и т.д.), позволит вам сказать, что эти два предложения действительно могут говорить о той же теме.</p><p>подводя итог, я хотел бы предложить вам взглянуть на: 1) меры сходства строк; 2) статистические методы;</p><p>надеюсь это поможет.</p>

<p>это требует, чтобы ваш алгоритм действительно знал, о чем вы говорите. это может быть сделано в некоторой элементарной форме, просто сравнивая слова и ища синонимы и т.д., но любой точный результат потребует некоторой формы интеллекта.</p>

<p>взгляните на <a href="http://mkusner.github.io/publications/wmd.pdf">http://mkusner.github.io/publications/wmd.pdf</a> в этой статье описывается алгоритм, называемый расстоянием word mover, который пытается раскрыть семантическое сходство. он опирается на оценки сходства, как диктует word2vec. интеграция этого с googlenews-vector-отрицательным 300 дает желаемые результаты.</p>