gpt4 book ai didi

java - lucene java中的精确召回

转载 作者:太空狗 更新时间:2023-10-29 22:58:29 31 4
gpt4 key购买 nike

我想用 Lucene 来计算 Precision 和 Recall。

我做了这些步骤:

  1. 制作了一些索引文件。为此,我使用了索引器代码和索引 .txt 文件,这些文件存在于此路径 C:/inn 中(此文件夹中有 4 个文本文件)并将它们放入“outt”文件夹,方法是在索引器代码中将索引路径设置为 C:/outt

  2. 创建了一个名为 lia.benchmark 的包和其中一个名为“PrecisionRecall”的类,并添加 externaljars(右键单击 --> Java 构建路径 - -> 添加外部 jar)并添加 Lucene-benchmark-.3.2.0jarLucene-core-3.3.0jar

  3. 将代码中的topicsfile路径设置为C:/lia2e/src/lia/benchmark/topics.txt
    qrelsfileC:/lia2e/src/lia/benchmark/qrels.txt 和 dir 到“C:/outt”。

    代码如下:

    package lia.benchmark;        
    import java.io.File;
    import java.io.PrintWriter;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import org.apache.lucene.search.*;
    import org.apache.lucene.store.*;
    import org.apache.lucene.benchmark.quality.*;
    import org.apache.lucene.benchmark.quality.utils.*;
    import org.apache.lucene.benchmark.quality.trec.*;

    public class PrecisionRecall {

    public static void main(String[] args) throws Throwable {

    File topicsFile = new File("C:/lia2e/src/lia/benchmark/topics.txt");
    File qrelsFile = new File("C:/lia2e/src/lia/benchmark/qrels.txt");
    Directory dir = FSDirectory.open(new File("C:/outt"));
    IndexSearcher searcher = new IndexSearcher(dir, true);

    String docNameField = "filename";

    PrintWriter logger = new PrintWriter(System.out, true);

    TrecTopicsReader qReader = new TrecTopicsReader();
    QualityQuery qqs[] = qReader.readQueries(
    new BufferedReader(new FileReader(topicsFile)));

    Judge judge = new TrecJudge(new BufferedReader(
    new FileReader(qrelsFile)));

    judge.validateData(qqs, logger);

    QualityQueryParser qqParser = new SimpleQQParser("title", "contents");

    QualityBenchmark qrun = new QualityBenchmark(qqs, qqParser, searcher, docNameField);
    SubmissionReport submitLog = null;
    QualityStats stats[] = qrun.execute(judge,
    submitLog, logger);

    QualityStats avg = QualityStats.average(stats);
    avg.log("SUMMARY",2,logger, " ");
    dir.close();
    }
    }
  4. 初始化 qrels 和主题。在文档文件夹 (C:\inn) 中,我有 4 个 txt 文件,其中 2 个与我的查询相关(查询是苹果),所以我填写了 qrels 和主题。

    像这样的 qrels 文件:

    <top>  
    <num> Number: 0
    <title> apple
    <desc> Description:
    <narr> Narrative:
    </top>

    和这样的主题文件:

    0    0      789.txt           1
    0 0 101.txt 1

    我还尝试了路径格式,例如“C:\inn\789.txt”而不是“789.txt”但结果为零:

    0 - contents:apple
    0 Stats:
    Search Seconds: 0.016
    DocName Seconds: 0.000
    Num Points: 2.000
    Num Good Points: 0.000
    Max Good Points: 2.000
    Average Precision: 0.000
    MRR: 0.000
    Recall: 0.000
    Precision At 1: 0.000
    SUMMARY
    Search Seconds: 0.016
    DocName Seconds: 0.000
    Num Points: 2.000
    Num Good Points: 0.000
    Max Good Points: 2.000
    Average Precision: 0.000
    MRR: 0.000
    Recall: 0.000
    Precision At 1: 0.000

你能告诉我我有什么问题吗?

我真的需要知道为什么结果为零。

最佳答案

恐怕 qrels.txt 格式不对:the javadoc建议如下:

预期的输入格式:

 qnum  0   doc-name     is-relevant

两条样例线:

 19    0   doc303       1
19 0 doc7295 0

(我知道它是 2.3.0 javadoc,但格式在 3.0 中没有改变)

看来您已经交换了文件:TrecTopicsReader 期待您在 qrels.txt 中拥有的内容; TrecJudge 期望您在 topics.txt 中拥有的内容。

关于java - lucene java中的精确召回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7170854/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com