Измерение сходства документов


21

Для кластеризации (текстовых) документов вам нужен способ измерения сходства между парами документов.

Две альтернативы:

  1. Сравните документы как векторы терминов, используя косинусное сходство - и TF / IDF в качестве весовых коэффициентов для терминов.

  2. Сравните распределение вероятностей каждого документа, используя f-расхождение, например, расхождение Кульбака-Лейблера

Есть ли какая-либо интуитивная причина предпочесть один метод другому (предполагая, что средний размер документа составляет 100 терминов)?

Ответы:


23

Для текстовых документов векторы признаков могут быть очень большими по размеру и разреженными в любом из стандартных представлений (пакет слов или TF-IDF и т. Д.). Измерение расстояний непосредственно при таком представлении может быть ненадежным, поскольку известно, что при очень больших измерениях расстояние между любыми двумя точками начинает выглядеть одинаково. Один из способов справиться с этим - уменьшить размерность данных с помощью PCA или LSA ( скрытый семантический анализ ; также известный как скрытый семантический индекс ) и затем измерить расстояния в новом пространстве. Использование чего-то вроде LSA поверх PCA выгодно, поскольку оно может дать значимое представление в терминах «семантических концепций», помимо измерения расстояний в пространстве более низких измерений.

Сравнение документов, основанных на распределениях вероятности, обычно выполняется сначала путем вычисления тематического распределения каждого документа (используя что-то вроде скрытого распределения Дирихле ), а затем вычисление некоторого расхождения (например, расхождения KL) между тематическими распределениями пары документов. В некотором смысле это на самом деле похоже на выполнение сначала LSA, а затем измерение расстояний в пространстве LSA с использованием KL-дивергенции между векторами (вместо косинусного сходства).

KL-дивергенция - это мера расстояния для сравнения распределений, поэтому она может быть предпочтительнее, если представление документа выражается в некотором распределении (что часто имеет место, например, документы, представленные в виде распределения по темам, как в LDA). Также обратите внимание, что при таком представлении записи в векторе объектов будут суммироваться в единицу (поскольку вы в основном рассматриваете документ как распределение по темам или семантическим понятиям).

Также см. Связанную тему здесь .


Спасибо. LDA требует, чтобы вы знали темы заранее? В нашем случае мы не знаем, к какой теме относится каждый документ, и мы будем использовать меру сходства для выполнения кластеризации (EM-G-Means или GAAC)
Джоэл

@ ebony1 Хорошая ссылка на LSA, я дал аналогичный ответ некоторое время назад на stats.stackexchange.com/questions/369/…
chl

1
@Joel: Нет, LDA не предполагает, что вы заранее знаете темы для каждого документа. Кстати, для ясности, LDA представляет каждый документ как совокупность тем, а не только по одной теме. Таким образом, каждая тема будет вносить свой вклад в некоторую долю в документах (а отдельные фракции составят 1). По сути, LDA предполагает, что каждое слово в документе генерируется определенной темой.
ebony1

@ebony - спасибо! Риск перефразировать вопрос и повторить себя, требует ли LDA, чтобы вы знали количество незаметных тем?
Джоэл

Да. Но есть варианты LDA (HDP-LDA), которые не требуют указания количества тем. Смотрите эту статью: cse.buffalo.edu/faculty/mbeal/papers/hdp.pdf
ebony1

0

Возможно, вы захотите попробовать этот онлайн-сервис для сходства документов косинуса http://www.scurtu.it/documentSdentifity.html

import urllib,urllib2
import json
API_URL="http://www.scurtu.it/apis/documentSimilarity"
inputDict={}
inputDict['doc1']='Document with some text'
inputDict['doc2']='Other document with some text'
params = urllib.urlencode(inputDict)    
f = urllib2.urlopen(API_URL, params)
response= f.read()
responseObject=json.loads(response)  
print responseObject

2
Пожалуйста, предоставьте больше деталей.
Сиань
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.