【问题标题】:How to add positional information in Lucene's IR model?如何在 Lucene 的 IR 模型中添加位置信息?
【发布时间】:2018-11-24 20:41:00
【问题描述】:

我想通过在 Lucene 中扩展 Similarity 类来实现我自己的基于位置的 IR 模型。我想根据匹配项在文档中的位置来影响文档权重。我搜索了谷歌并没有找到答案。我该怎么做?

我使用的是 Lucene 7.2.1

【问题讨论】:

    标签: java lucene similarity information-retrieval


    【解决方案1】:

    据我了解,您希望在 lucene 核心搜索中有自己的相似性模型,有一个名为 SimilarityBase 的类。该文件的路径是

    lucene-7.2.1\core\src\java\org\apache\lucene\search\similarities

    public abstract class SimilarityBase extends Similarity
    

    Similarity 的子类,为其后代提供简化的 API。子类只需要实现 Score 和 toString() 方法。实现explain(List, BasicStats, int, float, float)是可选的,因为 SimilarityBase 已经提供了分数和词频的基本解释。但是,鼓励子类的实现者尽可能多地包含有关评分方法的详细信息。

    注意:多词查询(例如短语查询)的评分方式不同 比 Lucene 的默认排名算法:而它“伪造”一个 IDF 值 整个短语(因为它不知道),这门课反而得分 短语作为单个术语分数的总和。 覆盖分数和解释方法的示例代码

    @Override
      protected float score(BasicStats stats, float freq, float docLen) {
        return stats.getBoost() *
            distribution.score(
                stats,
                normalization.tfn(stats, freq, docLen),
                lambda.lambda(stats));
      }
    
    
    
     @Override
      protected void explain(
          List<Explanation> subs, BasicStats stats, int doc, float freq, float docLen) {
        if (stats.getBoost() != 1.0f) {
          subs.add(Explanation.match(stats.getBoost(), "boost"));
        }
        Explanation normExpl = normalization.explain(stats, freq, docLen);
        Explanation lambdaExpl = lambda.explain(stats);
        subs.add(normExpl);
        subs.add(lambdaExpl);
        subs.add(distribution.explain(stats, normExpl.getValue(), lambdaExpl.getValue()));
      }
    

    要构建相似性模型,您必须指定基于信息的模型的所有三个组件的实现。

    1. 概率分布用于模拟术语出现
    2. 平均计数的概率分布参数 集合或平均文档中单词的出现次数 λw 概率分布参数

    3. 词频归一化

    您可以在此处找到有关规范化的更多详细信息

    org.apache.lucene.search.similarities.Normalization.NoNormalization
    

    @注意 “正常” Lucene 查询创建记分器,如果术语不存在则返回 null 这意味着它们永远不会对不存在的术语进行评分,但是对于跨度,整个层次结构只有一个记分器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2019-09-15
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多