Как построить семантический поиск для данного домена

19

Есть проблема, которую мы пытаемся решить, где мы хотим выполнить семантический поиск по нашему набору данных, то есть у нас есть данные, относящиеся к области (пример: предложения, говорящие об автомобилях)

Наши данные - это просто набор предложений, и мы хотим дать фразу и получить обратно предложения, которые:

  1. Похоже на эту фразу
  2. Имеет часть предложения, которая похожа на фразу
  3. Предложение, имеющее контекстуально похожие значения


Позвольте мне привести вам пример: предположим, я ищу фразу «Опыт покупки», я должен получить такие предложения:

  • Я никогда не думал, что покупка машины может занять менее 30 минут, чтобы подписать и купить.
  • Я нашел автомобиль, который мне понравился, и процесс покупки был
    простым и легким

  • Я абсолютно ненавидел ходить по магазинам, но сегодня я рад, что сделал


Я хочу подчеркнуть тот факт, что мы ищем контекстуальное сходство, а не просто поиск слов грубой силой.

Если в предложении используются разные слова, то оно также должно быть в состоянии найти его.

Вещи, которые мы уже попробовали:

  1. В открытом семантическом поиске проблема, с которой мы здесь столкнулись, заключается в создании онтологии из имеющихся у нас данных или для поиска доступной онтологии в различных областях, которые нас интересуют.

  2. Эластичный поиск (BM25 + Vectors (tf-idf)), мы попробовали это, где он дал несколько предложений, но точность была не такой уж высокой. Точность тоже была плохой. Мы попробовали использовать набор данных, созданный человеком, он смог получить только около 10% предложений.

  3. Мы пробовали разные вложения, как когда-то упоминалось в преобразователях предложений, а также прошли пример и попытались сравнить их с набором, созданным человеком, который также имел очень низкую точность.

  4. Мы попробовали ELMO . Это было лучше, но все же точность ниже, чем мы ожидали, и существует когнитивная нагрузка для определения значения косинуса, ниже которого мы не должны рассматривать предложения. Это относится даже к пункту 3.

Любая помощь будет оценена. Большое спасибо за помощь заранее

Jickson
источник
Хорошо написанный вопрос - можете ли вы добавить еще 5 примеров поисковых запросов? Они всегда от одного до трех словосочетаний или могут быть более длинными условия поиска? Вы на правильном пути
Adnan S
Привет Аднан, поисковый термин всегда будет одним-тремя словами. Пример: опыт покупки, комфорт вождения, информационно-развлекательная система, интерьеры, пробег, производительность, удобство сидения, поведение персонала.
Джиксон
Эта статья может быть интересна для вашего случая : astic.co/blog/… (подсказка: плечо word2vec)
Val
@Val Это действительно интересно, что я собирался упомянуть ту же статью, что вы упомянули, а затем увидел ваш комментарий. Я думаю, что этот метод сделает вас ближе к тому, что вы хотите.
Нима
Вы могли бы хотеть смотреть на сходство косинуса. Как объяснено ниже, это включает преобразование строк в векторы, которые могут быть представлены в 2D-пространстве. Угол косинуса этих двух векторов рассчитывается. Этот угол представляет «сходство» между двумя строками. Вот хорошая статья на нем medium.com/swlh/playing-with-word-vectors-308ab2faa519
sagar1025

Ответы:

5

Я настоятельно рекомендую вам посмотреть лекцию Трея Грейнджера о том, как построить семантическую поисковую систему => https://www.youtube.com/watch?v=4fMZnunTRF8 . Он рассказывает об анатомии семантической поисковой системы и о каждой из частей, которые использовались для того, чтобы соединиться, чтобы получить окончательное решение.

Отличным примером контекстуального сходства является поисковая система Bing: введите описание изображения здесь

Исходный запрос содержал термины {консервированная сода}, и результаты поиска bing могут относиться к {консервированной диетической газировке}, {безалкогольных напитков}, {нераскрытой смеси комнатной температуры} или {газированных напитков}. Как Bing сделал это ?:

Что ж, слова, имеющие одинаковое значение, получают одинаковые векторы, и затем эти векторы можно проецировать на 2-мерный граф, чтобы их было легко визуализировать. Эти векторы обучаются путем обеспечения того, чтобы слова с одинаковым значением физически находились рядом друг с другом. Вы можете тренировать свою собственную векторную модель, обучая модель GloVeвведите описание изображения здесь

Чем ближе расстояния между векторами, тем лучше. Теперь вы можете искать запросы ближайших соседей, основываясь на расстоянии их векторов. Например, для запроса {как остановить животных от разрушения моего сада} ближайший сосед дает следующие результаты:

введите описание изображения здесь

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

Контекстуальное сходство также может быть достигнуто за счет сокращения словарного измерения с использованием чего-то вроде LSI (скрытого семантического индексирования). Чтобы сделать это в Python, я настоятельно рекомендую вам проверить библиотеку genism для python: https://radimrehurek.com/gensim/about.html .

Хардит Сингх
источник
1

Вам может быть интересно посмотреть на Weaviate, чтобы помочь вам решить эту проблему. Это умный граф, основанный на векторизации объектов данных .

Если у вас есть предметно-ориентированный язык (например, сокращения), вы можете расширить Weaviate с помощью пользовательских концепций .

Возможно, вам удастся решить вашу проблему с помощью функций семантического поиска (т. Е. Explore{} ) Или функций автоматической классификации.

Исследуй функцию

Поскольку все объекты данных векторизованы, вы можете выполнить семантический поиск, подобный следующему (этот пример взят из документации , вы можете попробовать его здесь с помощью GraphQL):

{
  Get{
    Things{
      Publication(
        explore: {
          concepts: ["fashion"],
          certainty: 0.7,
          moveAwayFrom: {
            concepts: ["finance"],
            force: 0.45
          },
          moveTo: {
            concepts: ["haute couture"],
            force: 0.85
          }
        }
      ){
        name
      }
    }
  }
}

Если вы структурируете свою графовую схему на основе, например, имени класса «Предложение», подобный запрос может выглядеть примерно так:

{
  Get{
    Things{
      Sentence(
        # Explore (i.e., semantically) for "Buying Experience"
        explore: {
          concepts: ["Buying Experience"]
        }
        # Result must include the word "car" 
        where: {
          operator: Like
          path: ["content"]
          valueString: "*car*"
        }
      ){
        content
      }
    }
  }
}

Примечание:
вы также можете изучить график в целом.

Автоматическая классификация

Альтернативой может быть работа с контекстными или классификационными функциями KNN .

В вашем случае вы можете использовать класс Sentence и связать их с классом Experience, который будет иметь свойство: buying (конечно, есть много других конфигураций и стратегий, которые вы можете выбрать).

PS:
это видео дает немного больше контекста, если хотите.

Боб ван Луийт
источник
0

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

Хотя поисковые системы работают не так, как поисковые инструменты, вы можете обратиться к корпоративным поисковым инструментам, чтобы получить представление о семантической поисковой модели, которая работает. Платформы нового века, такие как 3RDi Search, работают на принципах семантического поиска и оказались идеальным решением для неструктурированных данных, с которыми приходится сталкиваться предприятиям. Google, скорее всего, работает над моделью для введения расширенной семантики в поисковик.

Solo987
источник