проблема с точностью и напоминанием измерения в люцене - PullRequest
1 голос
/ 01 декабря 2010

Мне нужно вычислить точность и восстановить значение в люцене, и я использую этот исходный код, чтобы сделать это

public class PrecisionRecall {

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

File topicsFile = new File("C:/Users/Raden/Documents/lucene/LuceneHibernate/LIA/lia2e/src/lia/benchmark/topics.txt");
File qrelsFile = new File("C:/Users/Raden/Documents/lucene/LuceneHibernate/LIA/lia2e/src/lia/benchmark/qrels.txt");
Directory dir = FSDirectory.open(new File("C:/Users/Raden/Documents/myindex"));
Searcher searcher = new IndexSearcher(dir, true);

String docNameField = "filename"; 

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

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

Judge judge = new TrecJudge(new BufferedReader(      //#2
    new FileReader(qrelsFile)));                     //#2

judge.validateData(qqs, logger);                     //#3

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

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

QualityStats avg = QualityStats.average(stats);      //#6
avg.log("SUMMARY",2,logger, "  ");
dir.close();
}
}

а вот содержимое файла тем

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

и это содержимое qrelsfile

# Format:
#
#       qnum   0   doc-name     is-relevant
#
#

0    0   apache1.0.txt       1
0    0   apache1.1.txt       1
0    0   apache2.0.txt       1

теперь проблема возникает, когда я запускаю тот исходный код, который отображает значение точности и возвращает ноль. вот результат, когда я запустил исходный код.

0  -  contents:apache contents:source

0 Stats:
Search Seconds:         0.047
DocName Seconds:        0.039
Num Points:            56.000
Num Good Points:        0.000
Max Good Points:        3.000
Average Precision:      0.000
MRR:                    0.000
Recall:                 0.000
Precision At 1:         0.000
Precision At 2:         0.000
Precision At 3:         0.000
Precision At 4:         0.000
Precision At 5:         0.000
Precision At 6:         0.000
Precision At 7:         0.000
Precision At 8:         0.000
Precision At 9:         0.000
Precision At 10:        0.000
Precision At 11:        0.000
Precision At 12:        0.000
Precision At 13:        0.000
Precision At 14:        0.000
Precision At 15:        0.000
Precision At 16:        0.000
Precision At 17:        0.000
Precision At 18:        0.000
Precision At 19:        0.000
Precision At 20:        0.000



SUMMARY
Search Seconds:         0.047
DocName Seconds:        0.039
Num Points:            56.000
Num Good Points:        0.000
Max Good Points:        3.000
Average Precision:      0.000
MRR:                    0.000
Recall:                 0.000
Precision At 1:         0.000
Precision At 2:         0.000
Precision At 3:         0.000
Precision At 4:         0.000
Precision At 5:         0.000
Precision At 6:         0.000
Precision At 7:         0.000
Precision At 8:         0.000
Precision At 9:         0.000
Precision At 10:        0.000
Precision At 11:        0.000
Precision At 12:        0.000
Precision At 13:        0.000
Precision At 14:        0.000
Precision At 15:        0.000
Precision At 16:        0.000
Precision At 17:        0.000
Precision At 18:        0.000
Precision At 19:        0.000
Precision At 20:        0.000

теперь можете ли вы сказать мне, что я сделал неправильно, из-за чего точность и возвращаемые значения стали нулями? а также что это значит, когда точность и значение возврата равны нулю? причина, по которой я это делаю, заключается в том, что мне нужно измерить производительность своей поисковой системы, а точность и отзыв - один из способов достижения этого.

спасибо, хотя

Ответы [ 2 ]

1 голос
/ 20 мая 2015

Я считаю, что проблема заключается в процедуре индексации.Если вы хорошо посмотрите на

QualityBenchmark qrun = 
       new QualityBenchmark(qqs, qqParser, searcher, docNameField);

, вы увидите, что поиск запущен для совпадений оба запрос и документ имена (= Lucene ищет значения в поле имени "filename") в индексе Lucene.

Это означает, что при индексированиивам нужно создать явное поле документа , в котором хранятся идентификаторы файлов .txt в вашем корпусе (в вашем случае их имена), например, объявлять

public static final String FIELD_NAME = "filename";

, а затем

document.add(new TextField(FIELD_NAME, "apache1.0.txt", Field.Store.YES));

и аналогично для других двух файлов.В противном случае он не может отослать обращения к именам в файлах конфигурации.У меня была та же проблема, но после того, как я добавил новое настраиваемое поле, оно работало как чудо: -)

NB Формат двух конфигурационных файлов сравнения основан на формате TREC9;образец файла qrels.txt можно найти в http://trec.nist.gov/data/qrels_eng/ и файл образца topics.txt в http://trec.nist.gov/data/topics_eng/topics.501-550.txt.

1 голос
/ 01 декабря 2010

Точность = 0 означает, что ни один из ваших результатов не был правильным.См., Например, статью Википедии .

Я бы предложил попробовать отдельный запрос и посмотреть, каковы ваши результаты.Возможно, у вас есть проблема с вашим токенизатором;может быть, вы не правы и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...