SOLR (4.3) - 降低 "poor" 质量(非常短)文档的分数
SOLR (4.3) - reducing score of "poor" quality (very short) documents
我们是 运行 SOLR 4.3.1,我有一个关于控制 SOLR 如何对某些文档评分的问题。
在某些情况下,我们索引的文档质量 "poor" - 主体(在本例中为描述字段)可能只有 3 或 4 个词。其他文件可能有更好的描述。执行搜索时会出现问题,并且在 "good"(较长)和 "poor"(较短)文档中都找到了搜索词。
SOLR 似乎在较短的文档中对匹配项的评分较高,这是有道理的,因为搜索的词可能只有 3 或 4 个词中的 1 个,因此它的百分比高于描述较长的文档,在 100 个单词中仅找到 1 或 2 个匹配项(例如)。
是否有可能以某种方式惩罚或降低非常短的文档的分数?我知道一些非常短的文档可能没问题,但作为一般规则,在我们的案例中真正短的文档通常是 "poor quality".
建议?
我们正在使用 edismax 搜索。
谢谢,
比尔
BM25 相似度 允许您调整长度归一化对文档评分的影响。默认情况下,正如您所观察到的,较短的字段内容在术语匹配数量相同的情况下优于较长的字段内容。
您听起来好像想要中和或可能逆转此长度规范化过程,以便所有长度的字段内容都被视为等同于相同数量的术语匹配。
两个调整参数是:
k1
控制词频的饱和点(当您希望重复词对分数产生 greater/lesser 影响时),以及
b
(你想要的那个)控制内容长度对比赛得分的影响。
如果您想深入了解,这是一本关于 BM25 的好书:http://opensourceconnections.com/blog/2015/10/16/bm25-the-next-generation-of-lucene-relevation/
要使其正常工作,您需要将 BM25Similarity 添加到您的 SOLR schema.xml
,可以全局添加,也可以嵌套在 描述 的字段类型定义中字段(推荐,因为您可能不希望对所有字段都进行这种处理)。
<similarity class="solr.BM25SimilarityFactory">
<str name="k1">1.2</str>
<str name="b">0.75</str>
</similarity>
(显示默认值)
如果您将 b
降低到 0.0
,您将有效地抵消长度归一化的影响,这意味着在同一字段中每个匹配相同单个查询词的两个文档将始终得分相同(无论字段长度如何)当此字段是考虑评分的唯一因素时。
您需要重新加载您的配置并重新索引您的文档以使此更改生效。
您也可以尝试使用负数 b
(也许 -0.75
?),因为这假设应该可以奖励更长的文档,但我尚未在当前实施中验证这一点,因此,如果您确实以您需要的方式工作 b
,请 post 回来。
我们是 运行 SOLR 4.3.1,我有一个关于控制 SOLR 如何对某些文档评分的问题。
在某些情况下,我们索引的文档质量 "poor" - 主体(在本例中为描述字段)可能只有 3 或 4 个词。其他文件可能有更好的描述。执行搜索时会出现问题,并且在 "good"(较长)和 "poor"(较短)文档中都找到了搜索词。
SOLR 似乎在较短的文档中对匹配项的评分较高,这是有道理的,因为搜索的词可能只有 3 或 4 个词中的 1 个,因此它的百分比高于描述较长的文档,在 100 个单词中仅找到 1 或 2 个匹配项(例如)。
是否有可能以某种方式惩罚或降低非常短的文档的分数?我知道一些非常短的文档可能没问题,但作为一般规则,在我们的案例中真正短的文档通常是 "poor quality".
建议?
我们正在使用 edismax 搜索。
谢谢,
比尔
BM25 相似度 允许您调整长度归一化对文档评分的影响。默认情况下,正如您所观察到的,较短的字段内容在术语匹配数量相同的情况下优于较长的字段内容。
您听起来好像想要中和或可能逆转此长度规范化过程,以便所有长度的字段内容都被视为等同于相同数量的术语匹配。
两个调整参数是:
k1
控制词频的饱和点(当您希望重复词对分数产生 greater/lesser 影响时),以及
b
(你想要的那个)控制内容长度对比赛得分的影响。
如果您想深入了解,这是一本关于 BM25 的好书:http://opensourceconnections.com/blog/2015/10/16/bm25-the-next-generation-of-lucene-relevation/
要使其正常工作,您需要将 BM25Similarity 添加到您的 SOLR schema.xml
,可以全局添加,也可以嵌套在 描述 的字段类型定义中字段(推荐,因为您可能不希望对所有字段都进行这种处理)。
<similarity class="solr.BM25SimilarityFactory">
<str name="k1">1.2</str>
<str name="b">0.75</str>
</similarity>
(显示默认值)
如果您将 b
降低到 0.0
,您将有效地抵消长度归一化的影响,这意味着在同一字段中每个匹配相同单个查询词的两个文档将始终得分相同(无论字段长度如何)当此字段是考虑评分的唯一因素时。
您需要重新加载您的配置并重新索引您的文档以使此更改生效。
您也可以尝试使用负数 b
(也许 -0.75
?),因为这假设应该可以奖励更长的文档,但我尚未在当前实施中验证这一点,因此,如果您确实以您需要的方式工作 b
,请 post 回来。