Я пытаюсь вычислить оценку косинусного сходства между топиками c из модели Gensim
LDA topi c, но это оказывается сложнее, чем я ожидал.
Gensim
есть метод для расчета расстояний между темами model.diff(model)
, но, к сожалению, косинусное расстояние не реализовано; у него есть расстояние jaccard, но оно слишком зависит от длины вектора (т. е. при сравнении 100 самых важных слов в топи c расстояние меньше, чем при сравнении 500 лучших, а расстояние равно 0, когда векторы полной длины по сравнению, так как каждая топика c включает в себя все термины, но с разными вероятностями).
Моя проблема в том, что выходные данные модели выглядят так (показано только 4 главных слова):
(30, '0.008*"tax" + 0.004*"cut" + 0.004*"bill" + 0.004*"spending"')
(18, '0.009*"candidate" + 0.009*"voter" + 0.009*"vote" + 0.009*"election"')
(42, '0.047*"shuttle" + 0.034*"astronaut" + 0.026*"launch" + 0.025*"orbit"')
(22, '0.023*"boat" + 0.020*"ship" + 0.015*"migrant" + 0.013*"vessel"')
Итак, чтобы рассчитать косинус сим / расстояние, мне нужно было бы проанализировать второй элемент кортежа (т. Е. Часть '0.008*"tax" +...'
, которая указывает вероятности членов.
Мне было интересно, Есть более простой способ получить косинусное сходство из модели? Или разбор каждой отдельной строки термина / вероятностей - действительно единственный способ go?
Спасибо за помощь.