【问题标题】:Is it possible to obtain, alter and replace the tfidf document representations in Lucene?是否可以在 Lucene 中获取、更改和替换 tfidf 文档表示?
【发布时间】:2017-12-31 14:30:54
【问题描述】:

伙计们,

我正在进行一些与排名相关的研究。我想用 Lucene 索引一组文档,获取它生成的(每个文档的)tfidf 表示,改变它们,将它们放回原处,并观察一组固定查询的排名如何相应地变化。

有没有什么简单的方法可以做到这一点?

【问题讨论】:

    标签: lucene full-text-search tf-idf


    【解决方案1】:

    你的问题太模糊了,有一个明确的答案,尤其是你打算做什么:

    获取它生成的TFIDF表示(每个文档),更改它们

    Lucene将原始值存储在:

    所有这些数据由Lucene管理,并将用于计算给定查询项的分数。自定义Similarity class可用于更改生成此分数的公式。

    但您必须考虑搜索查询是由多个术语进行的,并且组合各个术语的分数也可以改变。您可以使用现有的查询类(例如BooleAnquery,DisjunctionMax),但您也可以写自己的。

    所以它真的取决于你想要的一切,但请注意,如果要更改Lucene存储的原始值,则会变得相当困难。您必须编写自定义Lucene编解码器,并且可能是大多数查询堆栈,以利用您的新数据。

    您应该考虑的一个很好的事情是存储任意字节[]有效载荷的可能性。这样,您可以存储将在Lucene之外计算的值并在自定义相似性或查询中使用它。 请参阅以下教程:Getting Started with PayloadsCustom Scoring with Lucene Payloads它愿你给一些想法。

    【讨论】:

    • 谢谢@nomoa。我知道我的问题太模糊了。但尽管如此,使用有效载荷似乎是答案。您认为是否有可能使用自定义有效载荷扩展已存在的索引,或者我应该尝试在索引期间添加它们? span>
    • @ nadre lucene不实际支持更新操作,它始终是删除+添加操作。所以我不认为值得试图“扩展”现有索引,只需在第二次通过索引期间添加它们,一旦从初始数据集/索引计算所需的值“。 span>
    • 这就是我在想的。感谢您的帮助!
    • 所以,tf-idf值实际上没有存储,因此无法修改,右?我正在研究一个修改版的TF-IDF术语加权功能,似乎我不能使用Lucene进行实验。这就是你从答案中理解的。我给你了吗? @nomoa span>
    • @ nina如果要使用lucene,您必须以不同的方式思考,而不是在现有索引上更新某些东西,所以您需要了解如何计算分数并提供您自己的公式(相似性或询问)。如果您的公式取决于Lucene未存储的一些原始值,则必须在索引时间提供此数据,并找到存储它的位置(Doc级别,术语级别,位置级别) span>
    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2015-03-15
    • 2020-09-10
    • 2016-12-22
    • 2010-11-20
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多