有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何用语言模型扩展Lucene?

大家晚上好! 因此,作为“用语言模型扩展lucene”项目,我尝试在代码中添加2、3行代码,如下所示: 搜索。爪哇

LMDirichletSimilarity similarity = new LMDirichletSimilarity(2000f);  
indexSearcher.setSimilarity(similarity);

和索引。爪哇

LMDirichletSimilarity similarity = new LMDirichletSimilarity(2000f);
config.setSimilarity(similarity);

但我觉得没那么容易!也许我应该写个算法什么的?如果你有一些答案,请帮助我 谢谢^ u^


共 (1) 个答案

  1. # 1 楼答案

    LMJelinekMercerSimilarity中有一种语言模型相似性方法,其实现是:

    protected float score(BasicStats stats, float freq, float docLen) {
        return stats.getBoost()
                * (float) Math.log(1 + ((1 - alpha) * freq / docLen)
                                / (alpha * ((LMStats) stats).getCollectionProbability()));
    }
    

    这个方法是这个公式的实现:(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,因此您可以派生该方法并实现自己的方法