Рассчитайте балл только на основе документов, в которых больше встречается термин в люцене - PullRequest
5 голосов
/ 21 сентября 2010

Я начал работать над компонентом поиска резюме (документа) на основе движка lucene.net.Он отлично работает и получает документ и оценивает его на основе

. Идея, лежащая в основе VSM, заключается в том, что больше раз в запросе появляется термин запроса относительно количества раз, когда термин появляется вчем больше документов в коллекции, тем более релевантен этот документ для запроса.

Практическая функция подсчета Lucene получена из приведенного ниже.

score(q,d)=coord(q,d)·queryNorm(q)· ∑( tf(t in d) ·idf(t)2 · t.getBoost() · norm(t,d) ) 
                                  t in q

в этом

  • tf (t в d) соответствует частоте термина, определяемой как число раз, когда термин t появляется в текущем набранном документе d.Документы, которые имеют большее количество вхождений данного термина, получают более высокий балл
  • idf (t) означает Обратную частоту документов.Это значение соответствует обратному к docFreq (количеству документов, в которых появляется термин t).Это означает, что более редкие термины дают более высокий вклад в общий балл.

Это действительно очень здорово в большинстве ситуаций, но из-за вычисления полевой нормы результат не точен

fieldnorm aka значение «норма длины поля» представляет длину этого поля в этом документе (поэтому более короткие поля автоматически увеличиваются).

Из-за этого мы не получили точных результатов.Например, я получил 10000 документов, в которых 3000 документов получили ключевые слова java и oracle.И количество раз, которое кажется, варьируется в каждом документе.

  • Предположим, что документ A получил 10 java 20 оракулов среди 1000 слов, а документ B получил 2 java 2 oracle среди 50 слов
  • еслия ищу запрос "java and oracle", lucene возвращает документ B с высокой оценкой из-за нормализации длины.

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

Из-за этого в результате был перемещен парень с большим резюме с большим количеством ключевых слов, и появилось несколько небольших резюме..

Чтобы избежать этого, мне нужно отключить нормализацию длины.Может ли кто-нибудь помочь мне с этим ??

Я приложил изображение результата Luke для вашей справки.

На этом изображении документ с java 50 раз и oracle 6 раз перемещен вниз на 11-е место.позиция.

alt text

Но этот документ с java 24 раза и oracle 5 раз является лучшим бомбардиром благодаря полевой норме.

alt text

Надеюсь, я передал информацию ясно ... Если нет, пожалуйста, спросите меня, я дам больше информации

1 Ответ

7 голосов
/ 21 сентября 2010

Нормализацию длины можно отключить с помощью Field.setOmitNorms (true)

...