Семантический поиск с помощью НЛП и эластичного поиска - PullRequest
51 голосов
/ 08 января 2012

Я экспериментирую сasticsearch в качестве поискового сервера, и моя задача состоит в том, чтобы создать "семантическую" функциональность поиска.Из короткой текстовой фразы, такой как «У меня есть взрывная труба», система должна сделать вывод, что пользователь ищет сантехника и вернуть всех сантехников, проиндексированных вasticsearch.

Может ли это быть сделано непосредственно на поисковом сервере, напримерasticsearch, или мне нужно использовать инструмент обработки естественного языка (NLP), например, Maui Indexer.Какова точная терминология для моей задачи, классификация текста?Хотя данный текст очень короткий, так как это поисковая фраза.

Ответы [ 3 ]

65 голосов
/ 08 января 2012

Может быть несколько подходов с различной сложностью реализации.

Самый простой - создать список тем (например, сантехника), прикрепить пакет слов (например, "труба"), определить запрос на поиск по большинству ключевых слов.и выполнять поиск только в указанной теме (вы можете добавить поле topic к своим документам эластичного поиска и установить его как обязательное с помощью + во время поиска).

Конечно, если у вас много документов, ручное создание списка тем и пакета слов очень дорого.Вы можете использовать машинное обучение для автоматизации некоторых задач.По сути, достаточно иметь меру расстояния между словами и / или документами, чтобы автоматически находить темы (например, кластеризация данных ) и классифицировать запрос к одной из этих тем.Сочетание этих методов также может быть хорошим выбором (например, вы можете вручную создавать темы и присваивать им исходные документы, но использовать классификацию для назначения запросов).Взгляните на статью Википедии о скрытом семантическом анализе , чтобы лучше понять идею.Также обратите внимание на 2 связанные статьи по кластеризации данных и классификации документов .И да, Maui Indexer может стать хорошим помощником таким образом.

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

3 голосов
/ 21 ноября 2016

Возможно, вы захотите изучить https://blog.conceptnet.io/2016/11/03/conceptnet-5-5-and-conceptnet-io/.

Он объединяет semantic networks и distributional semantics.

Когда большинству разработчиков требуется вложение слов, первое и, возможно, единственное место, где ониlook это word2vec, алгоритм нейронной сети от Google, который вычисляет встраивание слов из семантики распределения.Таким образом, он учится предсказывать слова в предложении из других слов, окружающих их, и вложения представляют собой представление слов, которые делают лучшие предсказания.Но даже после терабайта текста есть некоторые аспекты значений слов, которые вы просто не узнаете из одной семантики распределения.

Некоторые результаты

Вложения слова ConceptNet Numberbatch в слова, встроенный в ConceptNet 5.5, решает эти аналогии SAT лучше, чем любая предыдущая система.Это дает 56,4% правильных вопросов.Лучшая сопоставимая предыдущая система, Turney SuperSim (2013), получила 54,8%.И мы все больше приближаемся к «человеческому» уровню производительности по аналогам SAT - хотя особенно умные люди, конечно, могут получить гораздо больше правильных вопросов, средний абитуриент получает 57,0%.

0 голосов
/ 25 января 2019

Семантический поиск - это в основном поиск по смыслу.Elasticsearch использует сериализацию JSON по умолчанию, чтобы применить поиск со значением к JSON, вам необходимо расширить его для поддержки отношений ребер через JSON-LD.Затем вы можете применить свой семантический анализ к схеме JSON-LD, чтобы устранить неоднозначность слова «сущность сантехника» и «разрывная труба» как отношения субъекта, предиката и объекта.Elasticsearch имеет очень слабую поддержку семантического поиска, но вы можете обойти его, используя граненый поиск и пакет слов.Вы можете индексировать схему тезауруса для терминов сантехники, а затем выполнять семантическое сопоставление текстовых фраз в своих предложениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...