Как использовать LDA gensim для проведения поиска по запросам? - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь понять, как LDA можно использовать для извлечения текста, и в настоящее время я использую модель LdaModel от gensim для реализации LDA, здесь: https://radimrehurek.com/gensim/models/ldamodel.html.

Мне удалось определитьk тем и их наиболее часто используемых слов, и я понимаю, что LDA касается вероятностного распределения тем и того, как слова распределены по этим темам в документах, так что это имеет смысл.

Тем не менее, я не понимаю, как использовать LdaModel для получения документов, которые имеют отношение к строковому вводу поискового запроса, например, "отрицательные эффекты контроля рождаемости".Я попытался вывести распределения тем по поисковому запросу и найти сходства между распределением тем по поисковому запросу и распределениями тем из корпуса, используя сходства gensim.MatrixShoity для вычисления сходства косинусов, например:

lda = LdaModel(corpus, num_topics=10) index = similarities.MatrixSimilarity(lda[corpus]) query = lda[query_bow] sims = index[query]

Но производительность не очень хорошая.Я считаю, что нахождение распределения тем в поисковом запросе не слишком важно, поскольку в поисковом запросе обычно есть только 1 тема.Но я не знаю, как еще я мог бы реализовать это на LdaModel на Gensim.Любой совет был бы очень признателен, я новичок в теме моделирования и, возможно, мне не хватает чего-то, что для меня очевидно очевидно?Спасибо!

1 Ответ

0 голосов
/ 30 апреля 2018

Я считаю, что длина вашего текстового запроса слишком мала и / или ваше отношение количества тем к длине запроса слишком мало для того, чего вы хотите достичь.

Если вы хотите использовать LDA для поиска похожихтемы для данного запроса, в большинстве случаев вам потребуется более одной темы на запрос, чтобы иметь возможность представлять конкретный документ, а не целый раздел документов.

В приведенной выше модели LDA есть только 10 темтак что ваши шансы найти более одной темы в данном предложении очень низки.Итак, я бы предложил провести тестирование, если обучение модели на 100 или 200 темах сделает это немного лучше.Теперь у вас есть большие шансы попасть на несколько тем в одном предложении.

Вот (упрощенно) пример того, почему это может работать:
С num_topics=10 вы можете иметь темы:

topic_1: "pizza", "pie", "fork", dinner", "farm",...
topic_2: "pilot", "navy", "ocean", "air", "USA", ...
...

Теперь, если вы запросите предложение

"Tonight at dinner I will eat pizza with a fork"

Вы получите только topic_1 в качестве ответа

Однако, с num_topics=200 ваши темы могут выглядеть примерно так:

topic_1: "pizza", "margherita", "funghi",...
topic_2: "fork", "knife", "spoon",...
topic_3: "dinner", "date", "lunch", ...

Так что то же самое предложение теперь cpvers topic_1, topic_2, topic_3.

Теперь от вашего корпуса во многом зависит, увеличит ли количество тем, что будет значительным для вывода.Для чего-то такого большого, как английская Википедия, работает 200 тем.Для меньшего корпуса это не ясно.

И даже с большим количеством тем, я полагаю, что ваш запрос может быть слишком коротким.

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