Вектор космічної моделі косинус tf-idf для пошуку подібних документів


10

Мають корпус з понад мільйона документів

Для даного документа потрібно знайти подібні документи, використовуючи косинус, як у векторній космічній моделі

г1г2/(||г1||||г2||)

Всі tf були нормалізовані за допомогою збільшеної частоти, щоб запобігти упередженню до більш довгих документів, як у цьому tf-idf :

тf(т,г)=0,5+0,5f(т,г)мах{f(т,г):тг}

Попередньо обчислили всі Має значення для знаменника попередньо розраховані Таким чином , для даного потрібно набрати більше 1 мільйон має поріг 0,6 косинуса для подібності ||г||

г1г2

Я можу спостерігати, що для даногоіснує досить вузький діапазондля косинуса 0.6 Наприклад, при одному пошуку схожих на косинус 0.6 і aвід 7.7631 тодідіапазон від 7.0867 до 8.8339 Там, де поза порогом косинусу 0,6діапазон від 0,7223 до 89,3395 Це було зі стандартною нормалізацією документа tf. Він дивиться наякі не мають шансів бути косинусом 0,6 ||г1||||d2||
||d1||||d2||
||d2||

||d2||

Нарешті питання:
Для дачіі косинус> = 0,6, як можна визначити діапазонщо є шанс? Якийчи можна безпечно усунути? ||d1||||d2||
||d2||

Я також знаю кількість термінів у та якщо є діапазон підрахунку термінів.d1d2

Через експериментиі схоже, є безпечним, але, сподіваємось, існує ряд, який виявився безпечним
||d2||>.8||d1||||d2||<||d1||/.8

Створено кілька тестових випадків з дуже деякими унікальними термінами, деякі не настільки унікальними, а деякі загальними. Звичайно, ви можете взяти найбільш унікальний термін і збільшити цю частоту в порівнянні. Чисельник буде (крапковий добуток) підніматися вгору і так буде || порівнювати || і отримаємо косинус дуже близький до 1.

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

Будь ласка, визначте недоліки в цьому аналізі.
Як зазначав AN6U5, у цьому аналізі є недолік.
Це більше не косинус, якщо документ нормалізується за зваженим
рівнем. І як вказував Матвій, також не можна зробити висновок d1⋅d2≤d1⋅d1
Я ще сподіваючись на те , щоб дати мені важко пов'язані , але люди , які , здається, знають цей матеріал кажуть мені , немає ,
я не хочу , щоб змінити це питання так просто ігнорувати це
я буду робити деякий аналіз і можливо опублікувати окреме питання про документ нормалізації
для мета цього питання припустимо, що документ нормалізований на необробленому tf
Вибачте, але мені просто непогано з тим, що коли-небудь розмітка використовується для створення рівнянь.
Отже, у моєму позначенні
|| d1 || = sqrt (сума (w1 x w1))
d1 крапка d2 = сума (w1 X w2)
Припустимо, d1 - коротший документ
. Найкращою d1 крапкою d2, яку можна досягти, є d1 крапка d1,
якщо d1 виходить заміж, 100 paul 20,
і d2 виходить заміж 100 paul 20 peter 1
Нормалізований
d1 одружується 1 Paul 1/5
d2 одружується 1 Paul 1/5 peter 1/100
Очевидно, що одружуватися, і Паул має однаковий idf в обох документах
Найкращий можливий d1 крапка d2 d1 точка d1
Максимально можлива відповідність d1 d1
cos = d1 крапка d1 / || d1 || || d2 ||
квадрат обидві сторони
cos X cos = (d1 точка d1) X (d1 точка d1) / ((d1 точка d1) X (d2 точка d2)) cos X cos = (d1 точка d1) / (d2 точка d2)
візьміть квадрат корінь обох сторін
cos = || d1 || / || d2 ||
є || d2 || не обмежений cos?
Якщо я просто використовую || d2 || > = cos || d1 || і || d2 || <= || d1 || / cos я отримую необхідну обчислювальну швидкість


Ваш аргумент, який завершується межею, визначеною не працює, оскільки "Найкраща 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^

Тепер і B є векторами , що точка в тому ж напрямку, A і B , але вони були унормовані до довжини одного. Отже, визначення метрики подібності косинусу - це взяти початкові вектори, нормалізувати їх до довжини одиниці, а потім виміряти крапковий добуток одиничних векторів.A^B^АБ

Для цього:

сiмiлаriту=cos(θ)=г1г2||г1||||г2||=г1^г2^0,6

залежить лише від орієнтації векторів, а не від їх величини (тобто довжини).

Порівнюючи це з тим, що ви робите:

0,6||г2||>.8||г1||||г2||<||г1||/.8

Ви можете, можливо, узгодити те, що ви робили, з метрикою відстані, також враховуючи евклідову відстань. Якщо косинусна схожість повертає лише значення між -1 і 1 на основі кута між двома векторами, евклідові відстані повернуть значення, що залежать від довжин двох векторів. У певному сенсі ви поєднуєте аспекти евклідової відстані з косинусною схожістю.

Досить здоровим є сенс вимагати, щоб відносні довжини знаходилися в межах 25% одна від одної в тому сенсі, що це поєднує в собі аспект евклідової відстані для створення групових навісів, які скорочують час обчислення, а потім подібність косинуса косину може бути використана як кінцевий визначник.

Зауважимо, що 1 / .8 = 1,25, тому d2> =. 8d1 є більш жорстким обмеженням, ніж d2 <= d1 / .8. Я пропоную використовувати d2> =. 75d1 та d2 <= 1,25d1, оскільки це симетрично.

Сподіваюся, це допомагає!


Я думаю, що це не використовує той факт, що довжина вектора здебільшого походить від загальних ваг idf через схему нормалізації tf, яку він використовує. Якщо документ має дуже низьку норму, це означає, що він не містить рідкісних слів (або містить їх з дуже низькою дробовою частотою), це означає, що його можна виключити як подібний до документа, який містить лише рідкісні слова. Але наскільки жорстке це обмеження взагалі, мені здається незрозумілим. Мабуть, так трапляється, що теоретичні межі дуже широкі порівняно із спостережуваними емпіричними межами.
Меттью Грейвс

@Matthew Graves. Все, що я говорю, - це те, що схожість косинуса є агностичною щодо довжини вектора. Він запитує, як різниці у довжині вектора можуть вплинути на отриману схожість косинусу, і відповідь: вони не можуть.
AN6U5

1
Емпіричну кореляцію не можна ігнорувати. Існує спосіб співвіднести випадковість корпусу до ряду, якщо тільки статистична. У мене не вистачає представника на цьому сайті, щоб проголосувати до підсилення.
папараццо

Тут я не згоден. Він не нормалізується виходячи з довжини. Він нормалізується на одному найпоширенішому терміні. Більш довгий документ можна лише розбавити. Я готовий скорегувати те, як здійснюється нормалізація, щоб отримати обмежений, який я можу підтримати.
папараццо

Дякуємо, що змінили ваше запитання. Це краще уточнює, що ви намагаєтеся досягти. Зауважте, що ваша змінена нормалізація робить це насправді не косинусною схожістю, оскільки це суворо визначено. Я б запропонував кілька додаткових редагувань, щоб це викласти. Бережіть і удачі.
AN6U5

3

||гi||||гi||||гi||

Щоб опрацювати якусь алгебру, дозвольте ввести ще кілька термінів (і перейменувати деякі на більш короткі):

г1[т1,т2,...][ш1,ш2,...][г1,г2,...]0,5тi10шi6D1=||г1||

г1хг1+хХ

Х=iшi2(тi+хi)2

0,6D1Хiшi2тi(тi+хi)

0,5тi+хi1

ххi=0 iгi+хi=1

хХ2ХХ>0Х-ХПП

00,36D12iшi2(тi+хi)2-i,jшi4тiтj(тi+хi)(тj+хj)

0хТПх+qТх+rПi,j=0,36D12-шi2тiтji=j-шi2тiтj

Пг1Х

Хшлегко. Але той факт, що мінімальна вага tf 0,5, а не 0, викидає мою інтуїцію щодо створення змагальностіх з максимумом Х, і тому найкращий підхід, який я придумую, - це спуск градієнта, який може бути, а може і не знайти фактичного глобального максимуму, але, ймовірно, буде близьким.


Я не згоден з || d || з, здається, служить мірою рідкості. Це нормалізується. "Марія мала ягня" матиме менший || ніж "Одружився маленький ягнятий білий". І "oddxxA oddxxB oddxxC" матиме менший || ніж "oddxxA oddxxB oddxxC oddxxD" приблизно в такому ж співвідношенні. І ці два порівняння матимуть подібні cos.
папараццо

@Frisbee, ти впевнений у цьому порівнянні? Припустимо, що idfs дорівнює 0 для "a", 0,5 для "had" і "Mary", 1 для "little" і "white", і 2 для "баранчик", я обчислюю 2,4 для "Марія мала ягня" і 2,55 для "Марія мала біле ягня", але 1,83 для "А Марія мала ягня". Тобто єдиний спосіб зменшення норми - це збільшення частоти найбільш частого терміна, а не додавання нових слів. Або ми не використовуємо ту саму формулу?
Меттью Грейвс

Я думав, ви нормалізували документ на зваженому (за допомогою IDF), а не на необмеженій частоті. Це змінило б справи. Мені більше сенсу нормалізуватися на зваженому. Суттєво змінюється документ || роблячи "a" найпоширенішим терміном messed з речами.
папараццо

Впевнений; Я просто хочу бути впевненим, що ми працюємо з тією ж формулою. Я думаю, я згоден з вами, що ви отримаєте чудові результати, нормалізуючи на основі сировини tf * idf, тобто: гт=шт(0,5+0,5штf(т,г)мах{штf(т,г):тг}) де шт=логN|{гD:тг}|. (З дещо незрозумілим, але, сподіваємось, прийнятним зіткненням міжг, вектор ваг гi, і г, документ, пов'язаний з цим вектором.) Мені доведеться більше подумати сьогодні про те, чи покращить це чи ні (але це, мабуть, включає багато алгебри).
Меттью Грейвс

0

Я публікую відповідь, але чітко я присуджую бонус комусь іншому

Я думаю, що існує максимальний чисельник, якщо документ tf нормалізується

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

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

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

Щодо мінімуму, я працюю над цим, але явно є мінімум.
Якщо ви збираєтеся відповідати, у вас буде || d ||

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.