IDF пересмотр существующих документов в индексе? - PullRequest
0 голосов
/ 18 мая 2019

Я прошел [Теорию оценки релевантности] [1] и получил два связанных вопроса

Q1: - Поскольку формула IDF равна idf(t) = 1 + log ( numDocs / (docFreq + 1)), где numDocs - общее количество документов в индексе. Означает ли это, что каждый раз, когда новый документ добавляется в индекс, нам нужно пересчитать IDF для каждого слова для всех существующих документов в индексе?

Q2: - ссылка, упомянутая ниже заявление. У меня вопрос, есть ли причина, по которой счет TF / IDF рассчитывается по каждому полю, а не по всему документу?

Когда мы ссылаемся на документы в предыдущих формулах, мы на самом деле говорить о поле в документе. Каждое поле имеет свое инвертированный индекс и, следовательно, для целей TF / IDF значение поля это значение документа.

1 Ответ

0 голосов
/ 20 мая 2019
  1. Вы рассчитываете оценку только во время запроса, а не во время вставки.У Lucene есть правильная статистика, чтобы сделать это быстрым вычислением, и значения всегда свежие.
  2. Частота действительно имеет смысл только для одного поля, поскольку вас интересуют значения для этого конкретного поля.Предположим, у нас есть несколько полей, и мы ищем одно, тогда нас интересует только частота этого поля.При поиске нескольких полей вы по-прежнему хотите контролировать отдельные поля (например, повышать «заголовок» над «телом») или определять, как их объединять.Если у вас есть сценарий использования, где это не имеет смысла (не уверен, что у меня есть хороший пример прямо сейчас - это IMO гораздо реже), тогда вы можете объединить несколько полей в одно с copy_to и искать по нему.
...