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


34

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

Відповіді:


48

Існує кілька різних способів вирішити це залежно від того, скільки саме семантичної інформації ви хочете зберегти та наскільки легко ваші документи токенізувати (html-документи, мабуть, досить складно токенізувати, але ви могли б зробити щось із тегами та контекстом .)

Деякі з них були згадані ffriend, а абзаци векторів користувачем1133029 - це справді солідний, але я просто подумав, що буду заглиблюватися в більшу глибину щодо плюсів і мінусів різних підходів.

  • Косінальна відстань - випробувана справжня косинусова відстань, мабуть, є найпоширенішою метрикою відстані, яка використовується загалом у кількох областях. Зважаючи на це, в косинусній відстані є дуже мало інформації, яка насправді може бути відображена назад до чогось семантичного, що, здається, не ідеально для цієї ситуації.
  • Відстань Левенштейна - також відомий як edit distance, це зазвичай просто використовується на рівні окремих токенів (слова, біграми тощо). Взагалі я б не рекомендував цю метрику, оскільки вона не тільки відкидає будь-яку смислову інформацію, але також має тенденцію дуже подібним чином трактувати різні зміни слів, але це надзвичайно поширена метрика для подібного роду
  • LSA - це частина великого арсеналу методів, коли мова йде про оцінку подібності документів topic modeling. LSA вийшов з моди зовсім недавно, і на мій досвід, це не зовсім сильний підхід до моделювання теми, але він порівняно простий у здійсненні та має кілька реалізацій з відкритим кодом
  • LDA - це також техніка, яка використовується topic modeling, але вона відрізняється LSAтим, що насправді вивчає внутрішні уявлення, які, як правило, більш плавні та інтуїтивні. Взагалі результати, які ви отримуєте LDA, краще для моделювання подібності документів LSA, але не настільки хороші для того, щоб навчитися сильно розмежовувати теми.
  • Розподіл Пачінка - це дійсно акуратне розширення на вершині LDA. Загалом, це лише значно вдосконалена версія. LDAЄдиний мінус полягає в тому, що тренуватись потрібно трохи більше часу, а впровадження з відкритим кодом трохи складніше:
  • word2vec - Google працював над низкою методів інтелектуального скорочення слів і документів до більш розумних векторів, ніж рідкісні вектори, отримані за допомогою таких методів, як Count Vectorizersі TF-IDF. Word2vec чудовий тим, що має ряд реалізацій з відкритим кодом. Коли у вас є вектор, будь-який інший показник подібності (наприклад, відстань косинуса) можна використовувати поверх нього зі значно більшою ефективністю.
  • doc2vec - Також відомий як paragraph vectors, це останній і найбільший у серії робіт Google, які розглядають щільні векторні зображення документів. gensimБібліотека Python має реалізація , word2vecщо є досить простим , що він може досить розумно бути використані для складання doc2vec, але переконайтеся , щоб зберегти ліцензію на увазі , якщо ви хочете йти цим шляхом

Сподіваюся, що це допоможе, повідомте мені, якщо у вас є якісь питання.


6

Існує ряд семантичних заходів дистанції, кожен зі своїми плюсами і мінусами. Ось лише декілька з них:

  • косинусова відстань , внутрішній добуток між векторами ознак документа;
  • LSA , ще одна векторна модель, але використовує SVD для знеструмлення оригінальної матриці термінового документа;
  • WordNet, заснований на WordNet , перевірений людиною, хоча й навряд чи розширюється.

Почніть з найпростішого підходу, а потім рухайтеся далі, виходячи з питань для вашого конкретного випадку.


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

6

Емпірично я виявляв, що LSA значно перевершує LDA кожного разу, і на кожному наборі даних я намагався його використовувати. Я спілкувався з іншими людьми, які сказали те саме. Він також використовувався для перемоги в ряді змагань SemEval для вимірювання смислової подібності між документами, часто в поєднанні з мірою, що базується на wordnet, тому я б не сказав, що він виходить з моди, або, безумовно, поступається LDA, що краще для моделювання теми та не семантичної подібності в моєму досвіді, всупереч тому, що заявили деякі респонденти.

Якщо ви використовуєте gensim (бібліотеку python), він має LSA, LDA та word2vec, тому ви можете легко порівняти 3. doc2vec - це класна ідея, але не дуже масштабний, і вам, швидше за все, доведеться реалізувати його як я не знаючи про будь-які реалізації з відкритим кодом. Це не так добре, як для кожного документа, нову та окрему модель потрібно побудувати за допомогою SGD, алгоритму повільного машинного навчання. Але це, мабуть, дасть найточніші результати. LSA та LDA також не мають масштабних масштабів (одначе, Word2vec робить), LDA загалом гіршає. Однак реалізація Gensim дуже швидка, оскільки вона використовує ітеративний SVD.

Ще одна примітка: якщо ви використовуєте word2vec, вам все одно доведеться визначити спосіб складання векторів з документів, оскільки це дає вам різний вектор на слово. Найпростіший спосіб зробити це - нормалізувати кожен вектор і взяти середнє значення для всіх векторів слів у документі, або взяти середнє зважене значення за значенням idf для кожного слова. Тож це не так просто, як "використовувати word2vec", вам потрібно буде зробити щось далі, щоб обчислити схожість документа.

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


Як саме ви використовували LSA? Варто зазначити, що LDA насправді є досить тонкою обгорткою навколо LSA (це pLSA з диріхлетом раніше), що емпірично показано, що значно збільшує узагальнення. Ви майже напевно побачите кращі точності з LSA, але це, як правило, результат надмірного пристосування, що є дуже помітною проблемою для LSA. Також, що саме ви маєте на увазі під масштабуванням тут? doc2vec насправді не вимагає нової моделі для кожного документа, і для обчислень немає помітної різниці між LSA та LDA, обидва вони дуже масштабовані.
Слейтер Вікторофф

Я не спостерігав за пристосуванням до LSA, і, як я вже говорив, я зустрів декількох інших людей, які побачили кращі показники порівняно з LDA. Крім того, я бачив, як LSA використовувався у багатьох виграшних змаганнях у змаганнях по змаганнях, я ніколи не бачив, щоб LDA використовувався у виграшному конкурсі. Це академічна конференція для порівняння смислової подібності між документами, тому я припускаю, що вони знають, що роблять. Doc2vec, якщо ви маєте на увазі реалізацію абзацу в векторному режимі Міколова, робить SGD на кожному документі окремо. Так що це дуже повільно.
Саймон

@SlaterVictoroff Я думаю, що це над тим, що можна сказати, що це витончено. Відомо, що LDA є поганим для випадків пошуку / пошуку інформації та рекомендацій, емпірично показано, що LSA працює набагато краще, і це відповідає моєму власному досвіду, тому що я люблю підтверджувати ці результати стосовно наших власних даних. Версії Doc2Vec роблять спуск градієнта на документ, це залежить від алгоритму, який використовується в Doc2Vec, оскільки це, як правило, стосується безлічі різних алгоритмів.
Саймон

3

Найсучаснішими видаються "вектори абзацу", представлені в недавньому документі: http://cs.stanford.edu/~quocle/paragraph_vector.pdf . Косину / евклідова відстань між векторами абзацу, швидше за все, спрацює краще, ніж будь-який інший підхід. Це, мабуть, ще неможливо через відсутність реалізації відкритого коду.

Наступне найкраще - це косинусова відстань між векторами LSA або відстань косинуса між неочищеними векторами BOW. Іноді краще вибирати різні схеми зважування, наприклад TF-IDF.


Зверніть увагу на мої коментарі нижче щодо масштабності векторного абзацу. Ця методика виглядає дуже багатообіцяючою, але її важко реалізувати і зовсім не масштабувати, оскільки ви робите окремий SGD для кожного документа, що дуже дорого, якщо я правильно пам’ятаю папір
Саймон

1

Корисно мати в собі сумку з інструментами сімейства алгоритмів хешування чутливих для місцевості . Ця сім'я зовсім не семантична. Насправді розглядається текст як послідовність бітів. Мені здається корисним у брудних наборах даних, коли один і той же текст з’являється багато разів з невеликими відмінностями.

Ви можете використовувати ssdeep (який заснований на хелі Nilsimsa ) для ідентифікації таких документів. Спочатку Ssdeep планувався для домену спаму. Спамери часто роблять невеликі зміни в повідомленні (додають пробіл), щоб запобігти виявленню точним підписом (наприклад, md5 ).

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

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