Подтвердить что ты не робот

Косинус-сходство и tf-idf

спасибо за всю помощь, которую вы мне дали раньше.

У меня только один маленький вопрос, который, похоже, меня смутил.

TF-IDF и сходство с косинусом.

Я читал на обоих, а затем на wiki под сходством Косинус. Я нахожу это предложение: "В случае поиска информации косинус подобия двух документов будет варьироваться от 0 до 1, так как термин" частоты "(весы tf-idf ) не может быть отрицательным. Угол между двумя терминальными частотными векторами не может быть больше 90.

Теперь мне интересно... разве это не разные вещи?

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

Я думал, что tf-idf - это то, что вы могли бы сделать, прежде чем использовать косинус-сходство в текстах. Я что-то пропустил? O.o

4b9b3361

Ответ 1

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

Если d 2 и q являются векторами tf-idf, то

enter image description here

где θ - угол между векторами. Поскольку θ находится в диапазоне от 0 до 90 градусов, cosθ изменяется от 1 до 0. θ может находиться только в диапазоне от 0 до 90 градусов, поскольку векторы tf-idf неотрицательны.

Не существует особо глубокой связи между tf-idf и моделью сходства/векторного пространства косинуса; tf-idf просто хорошо работает с матрицами документов. Однако он использует вне этого домена, и в принципе вы можете заменить другое преобразование в VSM.

(Формула взята из Wikipedia, следовательно d 2. )

Ответ 2

TF-IDF - это всего лишь способ измерить важность токенов в тексте; это просто очень простой способ превратить документ в список чисел (термин vector, который предоставляет один край угла, на который вы получаете косинус).

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

Вы можете просто подсчитать количество раз, когда каждый термин имел место в документе (T erm F), и использовать этот целочисленный результат для терм-балла в векторе, но результаты будут не очень хорошими. Чрезвычайно общие термины (такие как "есть", "и" и "они" ) заставят много документов выглядеть похожими друг на друга. (Эти конкретные примеры могут быть обработаны с помощью списка стоп-слов, но другие общие термины, которые не являются достаточно общими, чтобы считаться стоп-лозом, вызывают одинаковый вид В Stackoverflow слово "вопрос" может попадать в эту категорию. Если вы анализируете рецепты кулинарии, вы, вероятно, столкнетесь с проблемами со словом "яйцо" .)

TF-IDF корректирует необработанную временную частоту, принимая во внимание, насколько часто происходит каждый термин в целом (D ocument F). I nverse D ocument F. Требование - это, как правило, журнал количества документов, разделенных на количество документов, на которые распространяется этот термин (изображение из Википедии ):

IDF, credit to wikipedia

Подумайте о том, что "журнал" является второстепенным нюансом, который помогает в этом работать в конечном итоге - он растет, когда его аргумент растет, поэтому, если этот термин встречается редко, IDF будет высоким (большое количество документов, деленное на очень несколько документов), если этот термин является общим, IDF будет низким (много документов разделено на множество документов ~ = 1).

Скажем, у вас есть 100 рецептов, и все, кроме одного, требуют яиц, теперь у вас есть еще три документа, в которых все содержат слово "яйцо" , один раз в первом документе, два раза во втором документе и один раз в третьем документе. Термин частота для "яйца" в каждом документе составляет 1 или 2, а частота документа - 99 (или, возможно, 102, если вы считаете новые документы. Пусть придерживается 99).

TF-IDF "яйца":

1 * log (100/99) = 0.01    # document 1
2 * log (100/99) = 0.02    # document 2
1 * log (100/99) = 0.01    # document 3

Все это довольно маленькие цифры; напротив, давайте посмотрим на другое слово, которое встречается только в 9 из вашего 100 рецептурного корпуса: "рукоятка". Это происходит дважды в первом документе, три раза во втором и не встречается в третьем документе.

TF-IDF для "рукоятки":

1 * log (100/9) = 2.40  # document 1
2 * log (100/9) = 4.81  # document 2
0 * log (100/9) = 0     # document 3

'arugula' действительно важна для документа 2, по крайней мере, по сравнению с "яйцом". Кто заботится о том, сколько раз происходит яйцо? Все содержит яйцо! Эти векторы векторов являются намного более информативными, чем простые подсчеты, и они приведут к тому, что документы 1 и 2 будут намного ближе друг к другу (в отношении документа 3), чем они были бы, если бы использовались простые термины. В этом случае, вероятно, возникнет тот же результат (здесь у нас есть только два члена), но разница будет меньше.

Приёмник здесь состоит в том, что TF-IDF генерирует более полезные параметры термина в документе, поэтому вы не фокусируетесь на действительно общих терминах (стоп-слова, "яйцо" ) и теряете из виду важные термины ( 'руккола').

Ответ 3

Полная математическая процедура для сходства косинусов объясняется в этих учебниках

Предположим, если вы хотите вычислить сходство косинусов между двумя документами, первым шагом будет вычисление векторов tf-idf двух документов. а затем найти точечный продукт этих двух векторов. Эти учебники помогут вам:)

Ответ 5

Tf-idf используется только для поиска векторов из документов на основе tf - Term Frequency - который используется для определения того, сколько раз этот термин встречается в документе и частота обратного документа, - которая дает оценку того, сколько раз этот термин появляется во всей коллекции.

Затем вы можете найти сходство косинусов между документами.