Подтвердить что ты не робот

Семантический поиск с использованием NLP и elasticsearch

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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