Расчет косинусного сходства по модели Генсима - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь вычислить оценку косинусного сходства между топиками 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?

Спасибо за помощь.

1 Ответ

1 голос
/ 04 мая 2020

Метод get_topics() дает вам полный (разреженный) массив, где каждая строка - это топи c, а каждый столбец - словарное слово. Таким образом, вы можете вычислить topi c -to-topi c косинус-сходство примерно так:

from sklearn.metrics.pairwise import cosine_similarity

topics = lda_model.get_topics()
sim_18_to_30 = cosine_similarity(topics[18], topics[30])   # topic 18 to topic 30
all_sims = cosine_similarity(topics)  # all pairwise similarities

(я не проверял этот код на живой модели; точные требуемые формы / et c может быть выключено.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...