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

Извлечение наиболее важных слов из индекса Elasticsearch с использованием Node JS-клиента

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

Предоставление следующей структуры документа:

{
        "_index": "conversations",
        "_type": "conversation",
        "_id": "103130",
        "_score": 0.97602403,
        "_source": {
          "context": "Welcome to our service, how can I help? do you offer a free trial",
          "answer": "Yes we do. Here is a link for our trial account."
        }
      }

Я хотел бы выполнить итерацию по всему индексу и извлечь слова с "более высоким знанием" (tf-idf?).
Как только у меня будет список из 100 лучших слов, я создам фильтр синонимов, используя word2vec.

Мой вопрос: как это сделать с помощью ES Node JS-клиента?

4b9b3361

Ответ 1

Tf-Idf документов обычно используется для поиска сходства документов (с использованием сходства Косина, евклидова расстояния и т.д.)

Tf или временная частота указывает частоту слова в документе. Чем выше частота слова, тем выше значение слова.

Idf или обратная частота документа указывают количество документов (коллекции ввода), которые содержат это слово. Более редкое слово, выше значение слова.

Если мы просто используем TF для создания документа, мы склонны к спаму, потому что общие слова (например, местоимения, союзы и т.д.) приобретают большее значение. Следовательно, комбинация td-idf дает лучший смысл и указывает на реальную значимость слова. Другими словами, чтобы ранжировать слова документа на основе значимости, не рекомендуется вычислять только tf каждого слова, вместо этого используйте tf-idf для всей входной коллекции и ранжирования на основе значения tf-idf, которое показывает реальное значение ключевых слов.

Посмотрите примерное решение python для вычисления значения tf-idf для списка твитов json и поиска похожих твитов.

Пример Github

Ответ 2

Упругий поиск обеспечивает очень специфическую агрегацию данных, которая позволяет извлекать "Значимые ключевые слова" для подмножества вашего индекса [1]

Чтобы понять, что важно, вам нужен передний план (подкомпонент документов, который вы хотите проанализировать) и фон (весь корпус).

Как вы понимаете, для определения термина как значимого вам нужно сравнить, как появляется в вашем корпусе по сравнению с чем-то другим (например, общим корпусом). Вы можете найти какой-то архив, который содержит своего рода общий балл IDF для терминов (Reuter corpus, brown corpus, wikipedia ect ect). Тогда ты можешь: Набор документов переднего плана → ваш корпус Набор фонового документа → общий корпус

[1] https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significantterms-aggregation.html