Модель векторного пространства косинус tf-idf для поиска похожих документов

10

Иметь корпус более миллиона документов

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

d1d2/(||d1||||d2||)

Все tf были нормализованы с использованием увеличенной частоты, чтобы предотвратить смещение к более длинным документам, как в этом tf-idf :

Tе(T,d)знак равно0,5+0,5е(T,d)мaИкс{е(T,d):Td}

Предварительно рассчитали все ||d||
Предварительно рассчитать значения для знаменателя.
Так что для данного нужно набрать более 1 млн. Имеют порог в 0,6 косинуса для сходства. d1d2

Я могу наблюдать, что для данногосуществует довольно узкий диапазондля косинуса 0.6 Например, в одном поиске для косинуса 0.6 и a7,7631 тогдадиапазон от 7,0867 до 8,8339, где за пределами порога косинуса 0,6диапазон от 0,7223 до 89,3395 Это было при стандартной нормализации тф документов. Она смотрит на многокоторые не имеют шансов быть косинусом 0,6 матча ||d1||||d2||
||d1||||d2||
||d2||

||d2||

Напоследок вопрос:
для дачии косинус> = 0,6, как можно определить диапазончто есть шанс? Которыйя могу безопасно устранить? | | д 2 | | | | д 2 | |||d1||||d2||
||d2||

Я также знаю количество терминов в и d 2, если есть диапазон подсчета терминов.d1d2

С помощью экспериментов
и | | д 2 | | < | | д 1 | | / .8 кажется безопасным, но, надеюсь, есть диапазон, который доказал свою безопасность ||d2||>.8||d1||||d2||<||d1||/.8

Создано несколько тестовых случаев с очень некоторыми уникальными терминами, некоторые не настолько уникальными, а некоторые общими. Конечно же, вы можете взять самый уникальный термин и увеличить эту частоту в сравнении. Числитель (точка произведения) будет расти, и поэтому || будет сравнивать || и получит косинус очень близко к 1.

Вид связан, а не вопрос.
Я также использую tf-idf для группировки документов в группы. Клиентская база, в которую я продаю, используется почти рядом с двойными группами. Там я использую связанный подход, я считаю, что подсчет наименьшего срока и сравниваю его с подсчетом до 3х. Таким образом, отсчет сроков 10 смотрит на 10-30 (4-9 уже сделали свой выстрел в 10). Здесь я могу позволить себе пропустить одно, подцепить его за другое. Я сделал 10%, а самое большое соотношение - 1,8.

Пожалуйста, определите недостатки в этом анализе.
Как указано в AN6U5, в этом анализе есть недостаток.
Это уже не косинус, если документ нормализован на взвешенном
И, как указал Мэтью, также не может прийти к выводу, d1⋅d2≤d1⋅d1
Я еще надеясь на то , чтобы дать мне трудно связаны , но люди , которые , кажется, знают этот материал говорят мне , нет ,
я не хочу , чтобы изменить этот вопрос так просто игнорировать это
я буду делать некоторый анализ и возможно опубликовать отдельный вопрос о документе нормализации
для Цель этого вопроса - предположить, что документ нормализован по сырому тф
Извините, но я не очень хорошо разбираюсь в том, какая когда-либо разметка используется для составления уравнений.
Так что в моих обозначениях
|| d1 || = sqrt (сумма (w1 x w1))
d1 точка d2 = сумма (w1 X w2)
Предположим, что d1 является более коротким документом.
Самая лучшая точка d1 d2, которую можно достичь, это d1 точка d1.
Если d1 состоит в браке 100, пол 20
И d2 состоит в браке, 100 пол 20, петер 1
Нормализован
d1, женат 1 пол 1/5
d2 женат 1 пол 1/5 петр 1/100
Ясно, у брака и Павла одинаковый idf в обоих документах
. Наилучшее возможное d1 точка d2 это d1 точка d1
Максимально возможное совпадение с d1 равно d1,
потому что d1 точка d1 / || d1 || || Д2 ||
квадрат обе стороны
cos X cos = (d1 точка d1) X (d1 точка d1) / ((d1 точка d1) X (d2 точка d2)) cos X cos = (d1 точка d1) / (d2 точка d2)
взять квадрат корень с обеих сторон
cos = || d1 || / || d2 ||
это || d2 || не ограничен кос?
Если я просто использую || d2 || > = cos || d1 || и || d2 || <= || d1 || / Потому что я получаю скорость вычислений мне нужно

папараццо
источник
Ваш аргумент, который заканчивается границей, определяемой не работает, потому что «Наилучшая d1 точка d2, которая может быть достигнута, это d1 точка d1» неверна. В то время какd1d2cos=||d1||||d2||, Это не тот случай, когдаd1d2d1d1. Для этого конкретного класса векторов, он может работать в достаточном количестве случаев, что это приличное приближение, но было бы значительно сложнее установить, что это всегда так. d1d2||d1|| ||d2||d1d1||d1|| ||d1||d1d2d1d1
Мэтью Грейвс
@ MatthewGraves Я думаю, что согласен с вами. Не моя экспертиза, но я все еще хакую на это.
Папараццо

Ответы:

4

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

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

Давайте посмотрим на математику более подробно:

Вы применяете метрику сходства косинусов и требуете, чтобы эта метрика была больше 0,6:

.

similarity=cos(θ)=AB||A||||B||0.6

Но скалярные длины снизу можно распределить по перекрестным произведениям выше (свойство распределения):

AB||A||||B||=A||A||B||B||=A^B^

A^B^AB

Therefor:

similarity=cos(θ)=d1d2||d1||||d2||=d1^d2^0.6

зависит только от ориентации векторов, а не от их величины (то есть длины).

Примиряя это с тем, что вы делаете:

Несмотря на то, что показывают результаты линейной алгебры, вы все равно можете увидеть статистически значимый результат. Практически говоря, вы можете обнаружить, что статистика показывает, что ограничения длины действительны для ваших данных. Например, вы можете обнаружить, что твиты никогда не имеют косинусного сходства по сравнению с «Войной и миром» Толстого. Если ваша статистика выглядит хорошо для использования | | д 2 | | > .8 | | д 1 | | и | | д 2 | | < | | д 1 | |0.6||d2||>.8||d1||||d2||<||d1||/.8

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

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

Обратите внимание, что 1 / .8 = 1.25, поэтому d2> =. 8d1 является более жестким ограничением, чем d2 <= d1 / .8. Я предлагаю использовать d2> =. 75d1 и d2 <= 1.25d1, так как это симметрично.

Надеюсь это поможет!

AN6U5
источник
Я думаю, что это не использует тот факт, что длины векторов происходят в основном из общих весов idf, из-за схемы нормализации tf, которую он использует. Если документ имеет очень низкую норму, это означает, что он не содержит редких слов (или содержит их с очень низкой частотой), что означает, что он может быть исключен как аналог документа, который содержит только редкие слова. Но насколько жестким это ограничение в целом, мне неясно. Вероятно, дело в том, что теоретические границы очень широки по сравнению с наблюдаемыми эмпирическими границами.
Мэтью Грейвс
@ Мэтью Грейвз, все, что я говорю, это то, что косинусное сходство не зависит от длины вектора. Он спрашивает, как различия в длине вектора могут повлиять на итоговое сходство косинусов, и ответ таков: они не могут.
AN6U5
1
Эмпирическую корреляцию нельзя игнорировать. Существовал способ сопоставить случайность корпуса, чтобы изобиловать, если только статистические. У меня недостаточно представителей на этом сайте, чтобы зарегистрироваться.
папараццо
Здесь я не согласен. Он не нормализуется в зависимости от длины. Нормализуется на одном наиболее распространенном термине. Более длинный документ может только разбавить. Я хочу настроить нормализацию, чтобы получить границы, которые я могу поддержать.
Папараццо
Спасибо за изменение вашего вопроса. Это лучше проясняет, что вы пытаетесь достичь. Обратите внимание, что ваша измененная нормализация делает это на самом деле не косинусным сходством, поскольку это строго определено. Я бы предложил несколько дополнительных правок, чтобы разобраться в этом. Позаботьтесь и удачи.
AN6U5
3

||di||||di||||di||

Чтобы проработать некоторую алгебру, позвольте мне ввести еще несколько терминов (и переименовать некоторые в более короткие):

d1[t1,t2,...][w1,w2,...][d1,d2,...]0.5ti10wi6D1=||d1||

d1xd1+xX

X=iwi2(ti+xi)2

0.6D1Xiwi2ti(ti+xi)

0.5ti+xi1

xxi=0 idi+xi=1

xX2XX>0XXPP

00.36D12iwi2(ti+xi)2i,jwi4titj(ti+xi)(tj+xj)

0xTPx+qTx+rPi,j=0.36D12wi2titji=jwi2titj

Pd1X

XwxX

Мэтью Грейвс
источник
Я не согласен с || d || с, кажется, служит редкостью. Нормализовано. «У Марии был маленький ягненок» будет меньше || чем «У жениться был белый маленький ягненок». И "oddxxA oddxxB oddxxC" будет иметь меньшую || чем "oddxxA oddxxB oddxxC oddxxD" примерно в том же соотношении. И эти два сравнения будут иметь одинаковую стоимость.
Папараццо
@ Фрисби, ты уверен в этом сравнении? Предположим, что idfs равны 0 для «a», 0,5 для «had» и «Mary», 1 для «little» и «white» и 2 для «lamb», я рассчитываю 2,4 для «Mary имел маленького ягненка» и 2,55 для "Мэри был белый маленький ягненок", но 1.83 для "Мэри был маленький ягненок". То есть единственный способ уменьшить норму - это увеличить частоту наиболее часто употребляемого термина, а не добавлять новые слова. Или мы не используем одну и ту же формулу?
Мэтью Грейвз
Я думал, что вы нормализовали документ по взвешенным (с IDF), а не по частоте. Это изменило бы вещи. Для меня имеет больше смысла нормализоваться на взвешенных. Значительное изменение документа || сделав «а» наиболее распространенным термином, путающим с вещами.
Папараццо
dt=wt(0.5+0.5wtf(t,d)max{wtf(t,d):td})wt=logN|{dD:td}|ddid
0

Я отправляю ответ, но ясно, я буду награждать бонус другому

Я думаю, что есть максимальный числитель, если документ TF нормализован

d1⋅d2 / (|| d1, d2, |||| ||)

Предположим, d1 имеет одинаковые или меньшие термины (или просто беру d с меньшим количеством терминов)
. Максимально возможное нормализованное значение tf равно 1.
Таким образом, максимально возможная сумма числителя (tf1, i * idf, i * 1 * idf, i)

|| Д2 || = сумма (tf1, i * idf, i * 1 * idf, i) / || d1 || / .6

Как минимум, я работаю над этим, но, безусловно, есть минимум.
Если вы собираетесь соответствовать, у вас будет || d ||

папараццо
источник