Вопрос или проблема
Мы пытаемся решить проблему, связанную с семантическим поиском в нашем наборе данных, т.е. у нас есть данные, специфичные для конкретной области (например: предложения, касающиеся автомобилей)
Наши данные представляют собой просто набор предложений, и мы хотим ввести фразу и получить предложения, которые:
- Похожи на эту фразу
- Содержат часть предложения, которая похожа на фразу
- Предложение, имеющее контекстуально схожие значения
Давайте я приведу пример: предположим, я ищу фразу “Покупка автомобиля”, я должен получить такие предложения:
Я никогда не думал, что покупка автомобиля может занять меньше 30 минут для подписания и покупки.
Я нашел автомобиль, который мне понравился, а процесс покупки был простым и легким.
Мне абсолютно не нравилось ходить по магазинам автомобилей, но сегодня я рад, что я это сделал.
Я хочу подчеркнуть, что мы ищем контекстное сходство, а не просто поиск слов с помощью силы.
Если в предложении используются другие слова, то оно также должно быть найдено.
Вот что мы уже попробовали:
-
Open Semantic Search (https://www.opensemanticsearch.org/) проблема, с которой мы столкнулись, заключалась в генерации онтологии из имеющихся у нас данных, или, в связи с этим, в поиске доступной онтологии из различных областей нашего интереса.
-
Elastic Search (BM25 + Vectors (tf-idf)), мы пробовали это, где он дал несколько предложений, но точность была не очень высокой. Точность была плохой. Мы пробовали на ручной кураторской выборке, он смог получить только около 10% предложений.
-
Мы пробовали разные эмбеддинги, такие как те, которые упомянуты в https://github.com/UKPLab/sentence-transformers, а также посмотрели пример https://github.com/UKPLab/sentence-transformers/blob/master/examples/application_semantic_search.py и пытались оценить на основе нашего набора, кураторского человеком, и это также имело очень низкую точность.
-
Мы пробовали ELMO (https://towardsdatascience.com/elmo-contextual-language-embedding-335de2268604) это было лучше, но все же точность была ниже, чем мы ожидали, и возникает когнитивная нагрузка, чтобы решить, какое косинусное значение ниже, которого мы не должны рассматривать предложения. Это также касается пункта 3.
Любая помощь будет ценна. Большое спасибо за помощь заранее.
Похожи на эту фразу
Вы можете попробовать Phrase-BERT для эмбеддингов фраз.
- Статья: Ван, Шуфан, Лорен Томпсон и Мохит Ийер. “Phrase-BERT: Улучшенные эмбеддинги фраз из BERT с приложением к исследованию корпуса.” EMNLP 2021.
- Код.
В статье также упоминаются предыдущие связанные работы, например, SentBERT и SpanBERT.
Одним из вариантов является алгоритм расстояния перемещения слов (WMD). WMD может находить расстояние между двумя документами значимым образом, даже когда они не имеют общих слов, находя наиболее эффективный способ перемещения распределения одного документа к другому документу. Алгоритм WMD может использовать любые эмбеддинги слов или фраз.
Ответ или решение
Семантический поиск: Решение проблемы извлечения контекста
В современном цифровом мире, где объем данных постоянно растет, необходимость в эффективных инструментах поиска становится все более актуальной. Вы упомянули конкретную задачу: реализация семантического поиска по набору специализированных данных в области автомобилестроения. Давайте рассмотрим подходы, которые помогут вам достичь этой цели.
1. Основные понятия семантического поиска
Семантический поиск — это метод поиска информации, который не ограничивается простым сопоставлением ключевых слов. Он направлен на понимание и извлечение смысла запросов, включая семантические и контекстуальные связи между словами и фразами. В вашем случае вы хотите:
- Находить предложения, похожие на заданную фразу.
- Искать предложения, содержащие части, схожие с фразой.
- Получать контекстуально схожие предложения.
2. Рекомендации по улучшению семантического поиска
На основании вашего опыта и уже предпринятых усилий, давайте рассмотрим несколько подходов, которые могут помочь в решении вашей задачи.
a. Использование Phrase-BERT
Одним из перспективных методов является Phrase-BERT, который улучшает качество эмбеддингов фраз, основанных на архитектуре BERT. Это может значительно повысить точность семантического поиска. Вы можете ознакомиться с документом, описывающим данный метод, и изучить код, если решите использовать его в своем проекте.
b. Word Mover’s Distance (WMD)
Этот алгоритм позволяет вычислять "расстояние" между документами даже при отсутствии общих слов. Он использует эмбеддинги слов и может быть адаптирован для ваших нужд. WMD находит оптимальный способ перемещения распределения одного документа к другому, что делает его мощным инструментом для семантического поиска.
c. Применение современных моделей языковой обработки
Исходя из вашего опыта с ELMO и различными моделями эмбеддингов, рекомендую попробовать:
- SentBERT и SpanBERT: Эти модели хорошо адаптированы для задач семантического поиска и могут показать более высокую точность по сравнению с другими методами.
3. Построение онтологии
Другой важный аспект, который вы упомянули, — создание онтологии. Это позволит структурировать ваши данные и улучшить поиск. Настоятельно рекомендую:
- Исследовать существующие онтологии в вашей области и адаптировать их к вашим нуждам.
- Использовать инструменты для автоматического извлечения онтологии из текстов, чтобы минимизировать ручной труд.
4. Оценка и отладка систем
Чтобы гарантировать, что ваш семантический поиск дает высококачественные результаты, необходимо:
- Проводить тщательную оценку качества поиска, используя аннотированные или курируемые корпуса данных.
- Настроить параметры ваших алгоритмов, например, пороги для косинусного сходства.
Заключение
Семантический поиск — это сложная задача, требующая различных подходов и инструментов. Применяя вышеуказанные методики и тщательно работая над структурой данных, вы сможете значительно улучшить точность и качество поиска в вашем проекте. Надеюсь, данные рекомендации помогут вам достигнуть поставленных целей. Если у вас есть дальнейшие вопросы, буду рад помочь!