Вычисление косинусного сходства двух векторов разного размера
У меня есть 2 вопроса,
Я сделал вектор из документа, узнав, сколько раз каждое слово появлялось в документе. Это правильный способ сделать вектор? Или я должен сделать что-то еще?
Используя вышеописанный метод, я создал векторы из 16 документов, которые имеют разные размеры. Теперь я хочу применить косинусное сходство, чтобы выяснить, насколько похож каждый документ. У меня проблема с получением точечного произведения двух векторов, потому что они имеют разные размеры. Как бы я это сделал?
1 ответ
Звучит разумно, если у вас есть список / карта /dict/hash
(word, count)
пары как ваше векторное представление.Вы должны сделать вид, что у вас есть нулевые значения для слов, которые не встречаются в каком-либо векторе, без сохранения этих нулей в любом месте. Затем вы можете использовать следующий алгоритм для вычисления точечного произведения этих векторов (псевдокод):
algorithm dot_product(a : WordVector, b : WordVector): dot = 0 for word, x in a do y = lookup(word, b) dot += x * y return dot
lookup
part может быть любым, но для скорости я бы использовал хеш-таблицы в качестве векторного представления (например, Pythondict
).