使用Node JS客户端从Elasticsearch索引中提取最重要的单词
受以下git和video的启发,我试图为我的域名创build概念性search,使用word2vec
作为我的查询的同义词filter。
给出以下文件结构:
{ "_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
创build一个同义词filter。
我的问题是:如何使用ES节点JS客户端做到这一点?
文档的Tf-Idf通常用于查找文档的相似性(使用余弦相似度,欧几里得距离等)
Tf或术语频率表示文档中单词的频率。 单词的频率越高,单词的重要性越高。
Idf或逆文档频率表示包含该单词的(input集合的)文档的数量。 这个词更难得,更重要的是这个词。
如果我们只是使用TF来构build文档向量,我们很容易发生垃圾邮件,因为常见的单词(例如:代词,连词等)变得更加重要。 因此,td-idf的组合给出了更好的意义,并指出了这个词的真正意义。 或者换句话说,根据重要性对文档中的单词进行sorting,build议不要仅仅计算每个单词的tf,而应根据tf-idf值在整个input集合和排名上使用tf-idf关键字的真正意义。
看一下示例python解决scheme,计算json tweets列表的tf-idf值并find相似的tweets。
Github示例
弹性search提供了一个非常具体的数据聚合,使您可以为您的索引的一个子集提取“重要关键字”[1]
为了阐述什么是重要的,你需要一个前景(你想要分析的文档的子集)和一个背景(整个语料库)。
正如你可能意识到的,为了确定一个重要的术语,你需要比较一下你的语料库和其他东西(比如一个通用的语料库)是如何出现的。 你可能会发现一些档案,包括一个一般的IDF分数的条款(路透社语料库,棕色语料库,维基百科等)。 然后你可以:前台文件集 – >你的语料库后台文件集 – >通用语料库