2016-11-14 8 views
21

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

Давать следующую структуру документа: (? Tf-IDF)

{ 
     "_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." 
     } 
     } 

Я хотел бы, чтобы перебрать весь индекс и извлечения слов с «высшим значительным».
Как только у меня будет список из 100 лучших слов, я создам фильтр синонимов, используя word2vec.

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

+0

тс-IDF не определен для коллекции, она определена для документа. Вы закончите с частью idf, очень сомнительно, что это то, что вы ищете. –

+0

Спасибо за ответ, можете ли вы предложить лучший подход для извлечения значительных слов из индекса? –

+0

@ShlomiSchwartz вы можете объяснить, как ваше решение будет лучше, чем функция, уже предоставленная экспертом? – AR1

ответ

1

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

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

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

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

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

Github Sample

1

Elastic Search обеспечивает очень специфическую агрегирование данных, которые позволяют извлекать «важные ключевые слова» для подмножества указательного [1]

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

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

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