【问题标题】:Extracting most important words from Elasticsearch index, using Node JS client使用 Node JS 客户端从 Elasticsearch 索引中提取最重要的单词
【发布时间】:2017-03-28 04:56:13
【问题描述】:

受以下gitvideo 的启发,我正在尝试为我的域创建一个概念搜索,使用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 客户端来做到这一点?

【问题讨论】:

  • tf-idf 不是为集合定义的,它是为文档定义的。你最终会得到 idf 部分,这是非常值得怀疑的。
  • 感谢您的回复,您能提出一个更好的方法来从索引中提取重要的单词吗?
  • 给定一个查询,我们可以计算查询结果中的术语与整个文档空间相比的 tf-idf。我从您的问题中得知您想在收到查询之前这样做。您可以尝试将您的文档空间与另一个更通用的文档空间(例如互联网或维基百科)进行比较,或者您可以计算所有术语的信息增益(或任何其他特征选择方法)。
  • 一个术语的意义通常取决于某些东西。在特征选择中,您所做的是评估特征(在这种情况下为术语)与目标类的分离程度。由于我们缺乏目标,我们基本上会评估它对搜索空间的分配情况,这使我们回到文档频率。但不知何故,我怀疑这就是你要找的。我建议您考虑提取对您的搜索空间很重要的术语(搜索空间中的高频率,互联网上的文档频率低)或在您的应用程序中经常搜索的术语。
  • 您可以迭代所有文档,为每个文档检索术语并计算每个术语的 tf-idf 值。然后计算 heights 值术语在您的文档中出现的次数,然后取前 n 个术语。

标签: javascript node.js elasticsearch word2vec


【解决方案1】:

文档的 Tf-Idf 通常用于查找文档的相似度(使用余弦相似度、欧几里得距离等)

Tf 或词频表示一个词在文档中出现的频率。词的频率越高,词的重要性就越高。

Idf 或逆文档频率表示包含该单词的文档(输入集合)的数量。词越稀有,词的重要性就越高。

如果我们只使用 TF 构建文档向量,我们很容易产生垃圾邮件,因为常用词(例如:代词、连词等)变得更加重要。因此,td-idf 的组合给出了更好的含义,并表明了这个词的真正意义。或者换句话说,根据重要性对文档的单词进行排名,不建议只计算每个单词的 tf,而是在整个输入集合上使用 tf-idf 并根据 tf-idf 值进行排名关键字的真正意义。

查看用于计算 json 推文列表的 tf-idf 值并查找相似推文的示例 python 解决方案。

Github Sample

【讨论】:

    【解决方案2】:

    Elastic Search 提供了一个非常具体的数据聚合,允许您为索引的子集提取“重要关键字”[1]

    要详细说明什么是重要的,您需要一个前景(您要分析的文档的子集)和一个背景(整个语料库)。

    您可能已经意识到,要确定一个术语是否重要,您需要将您的语料库中的出现方式与其他内容(例如通用语料库)进行比较。 您可能会发现一些包含术语(路透社语料库、棕色语料库、维基百科等)的一般 IDF 分数的存档。 那么你就可以 : 前台文档集 -> 你的语料库 背景文档集 -> 通用语料库

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

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 2020-03-16
      • 2016-12-29
      • 2018-10-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多