Как построить semanti c поиск по заданному домену - PullRequest
20 голосов
/ 12 февраля 2020

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

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

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

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

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

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

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

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

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

  1. Open Semanti c Поиск проблема, с которой мы столкнулись здесь, заключается в создании онтологии из данных У нас есть, или ради этого, поиск доступной онтологии из различных областей нашего интереса.

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 20 февраля 2020

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

Отличным примером контекстуального сходства является поисковая система Bing: enter image description here

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

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

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

enter image description here

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

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

1 голос
/ 23 февраля 2020

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

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

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

Функция изучения

Поскольку все объекты данных векторизованы, вы можете выполнить поиск по семантике c, как показано ниже (этот пример из документов , вы можете попробовать здесь используя 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
      }
    }
  }
}

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

Automati c классификация

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

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

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

0 голосов
/ 21 февраля 2020

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

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

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