Вычисление косинусного сходства двух векторов разного размера

У меня есть 2 вопроса,

  1. Я сделал вектор из документа, узнав, сколько раз каждое слово появлялось в документе. Это правильный способ сделать вектор? Или я должен сделать что-то еще?

  2. Используя вышеописанный метод, я создал векторы из 16 документов, которые имеют разные размеры. Теперь я хочу применить косинусное сходство, чтобы выяснить, насколько похож каждый документ. У меня проблема с получением точечного произведения двух векторов, потому что они имеют разные размеры. Как бы я это сделал?

1 ответ

Решение
  1. Звучит разумно, если у вас есть список / карта /dict/hash (word, count) пары как ваше векторное представление.

  2. Вы должны сделать вид, что у вас есть нулевые значения для слов, которые не встречаются в каком-либо векторе, без сохранения этих нулей в любом месте. Затем вы можете использовать следующий алгоритм для вычисления точечного произведения этих векторов (псевдокод):

    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 может быть любым, но для скорости я бы использовал хеш-таблицы в качестве векторного представления (например, Python dict).

Другие вопросы по тегам