java如何用语言模型扩展Lucene?
大家晚上好! 因此,作为“用语言模型扩展lucene”项目,我尝试在代码中添加2、3行代码,如下所示: 搜索。爪哇
LMDirichletSimilarity similarity = new LMDirichletSimilarity(2000f);
indexSearcher.setSimilarity(similarity);
和索引。爪哇
LMDirichletSimilarity similarity = new LMDirichletSimilarity(2000f);
config.setSimilarity(similarity);
但我觉得没那么容易!也许我应该写个算法什么的?如果你有一些答案,请帮助我 谢谢^ u^
# 1 楼答案
在
LMJelinekMercerSimilarity
中有一种语言模型相似性方法,其实现是:这个方法是这个公式的实现:
(1-lambda) * P(w|d) + lambda * P(w|Collection)
如果你看看上面的方法和语言模型公式,你会发现它们之间有一点不同。这是因为Lucene将表达式lambda * P(w|Collection)
从语言模型公式中分解出来,并创建了一个新公式:lambda * P(w|Collection) * ( ( (1-lambda) * P(w|d) / lambda * P(w|Collection) ) +1 )
然后,由于排名(它不影响排名)而删除lambda * P(w|Collection)
,然后只计算( ( (1-lambda) * P(w|d) / lambda * P(w|Collection) ) +1 )
。你可以看到它与上面的方法类似。但有一点不同,那就是对数。在IR社区中,他们使用对数,因为这很容易处理,也很容易被计算机评估。所以最后的声明是:log ( ( ( (1-lambda) * P(w|d) / lambda * P(w|Collection) ) +1 ) )
上面的方法是protected
,因此您可以派生该方法并实现自己的方法