сходство tf idf

Я использую TF/IDF для вычисления сходства. Например, если у меня есть следующие два файла doc.

Doc A => cat dog
Doc B => dog sparrow

Это нормально, что сходство составляет 50%, но когда я вычисляю его TF/IDF. Это следующее

Значения Tf для документа A

dog tf = 0.5
cat tf = 0.5

Значения Tf для документа B

dog tf = 0.5
sparrow tf = 0.5

Значения IDF для документа A

dog idf = -0.4055
cat idf = 0

Значения IDF для документа B

dog idf = -0.4055 ( without +1 formula 0.6931)
sparrow idf = 0

Значение TF/IDF для документа A

0.5x-0.4055 + 0.5x0 = -0.20275

Значения TF/IDF для документа B

0.5x-0.4055 + 0.5x0 = -0.20275

Теперь похоже, что сходство составляет -0,20275. Это? Или я что-то упускаю? Или это тоже какой-то следующий шаг? Скажите, пожалуйста, чтобы я тоже мог это вычислить.

Я использовал формулу tf/idf, о которой упоминается в Википедии.


person user238384    schedule 31.12.2009    source источник
comment
Используете ли вы Apache Mahout для его расчета? Если да, то не могли бы вы сообщить мне шаги, которые необходимо предпринять. Мне нужно разработать прототип для расчета TF IDF с использованием Apache Mahout. junaid_surqyahoo.co.in   -  person    schedule 04.01.2012


Ответы (2)


Посмотрим, получу ли я ваш вопрос: вы хотите рассчитать сходство TF/IDF между двумя документами:

Doc A: cat dog

а также

Doc B: dog sparrow

Я так понимаю, это весь ваш корпус. Поэтому |D| = 2 Tfs действительно равны 0,5 для всех слов. Чтобы вычислить IDF «собаки», возьмите log(|D|/|d:dog in d| = log(2/2) = 0 Аналогично, IDF «кошки» и «воробья» равны log(2/1) = log(2) =1 (я использую 2 в качестве базы журнала, чтобы упростить это).

Таким образом, значения TF/IDF для «собаки» будут 0,5*0 = 0, а значения TF/IDF для «кошки» и «воробья» будут равны 0,5*1 = 0,5.

Чтобы измерить сходство между двумя документами, вы должны вычислить косинус между векторами в пространстве (кошка, воробей, собака): (0,5, 0, 0) и (0, 0,5, 0) и получить результат 0.

Подвести итог:

  1. У вас ошибка в расчетах IDF.
  2. Эта ошибка создает неправильные значения TF/IDF.
  3. Статья в Википедии недостаточно хорошо объясняет использование TF/IDF для подобия. Мне нравится объяснение Мэннинга, Рагхавана и Шютце гораздо лучше.
person Yuval F    schedule 31.12.2009
comment
Спасибо Юваль! ! ! Вы сделали мою жизнь проще :) Есть две проблемы: 1 я использовал натуральный журнал. Я не смог найти функцию log2 в java, но я разберусь с этим. 2-я проблема важнее. Я не мог понять, как вы измеряете сходство с косинусом? Когда tf/idf сказал сходство 50%, то почему косинус говорит 0%??? - person user238384; 01.01.2010
comment
Пожалуйста. Я считаю, что использование натурального логарифма лучше, просто было проще объяснить, используя основание 2. Давайте проясним косинусное сходство: TF/IDF - это просто представление: вы конвертируете вектор количества слов в вектор значений TF/IDF. Косинусное подобие — это скалярное умножение двух нормализованных векторов; Векторы могут быть исходными или трансформированными с помощью TF/IDF. В случае, как вы сказали, скалярное умножение будет равно нулю, потому что у нас либо есть слова, встречающиеся только в одном векторе, либо обычное слово с нулевой оценкой («собака»). ХТН. - person Yuval F; 01.01.2010
comment
Спасибо, Юваль. Если я использую натуральный журнал, то мои значения Tf/Idf отличаются от ваших. Если я использую log2, я думаю, что получу правильные результаты. Не могли бы вы рассказать мне, в чем разница между LSI и векторным пространством? Извините, это звучит глупо вопрос. Если вы можете прислать мне хороший учебник, как реализовать LSI. было бы здорово помочь - person user238384; 02.01.2010
comment
Это отнюдь не глупый вопрос. Неформально LSI — это способ взвешивания векторов частот терминов, который использует больше информации из матрицы терминов-документов, чем TF/IDF, посредством разложения по сингулярным числам (SVD). Я предлагаю вам прочитать это: sujitpal.blogspot.com/2008/09/ для теоретического объяснения и руководства по реализации. - person Yuval F; 03.01.2010
comment
Спасибо, что познакомили меня с книгой Мэннинга, Рагхавана и Шютце — это отличный ресурс! - person Tomáš Kafka; 14.10.2010

Я думаю, что вы должны взять ln вместо log.

person Toqir    schedule 03.01.2010