Эта статья в основном относится к курсу «Обработка естественного языка» на Coursera.
Введение
Тематические модели — это еще один способ понимания семантики (извлечение темы статьи, построение векторного представления статьи).
Краткое понимание тематической модели выглядит следующим образом:
- Мы хотим получить векторное представление статьи;
- Статьи могут просматривать некоторыетемаописывать;
- теманекоторымисловоописывать.
Например, тема погоды может быть описана такими словами, как небо, дождь, солнечно и солнце.
Как показано ниже:
общего пользования
- Классификация текстов (по темам)
- Агрегация и анализ новостных потоков
- Рекомендательные системы (найдите статьи на похожие темы)
LDA
LDA (латентное распределение Дирихле) — это модель генерации темы документа, которая включаетслово,темаиДокументацияТрехуровневая структура.
Эта статья больше не о различных математических теориях модели LDA.Для студентов, которые заинтересованы в понимании, перейдите по следующим ссылкамLDA математические сплетни
Модуль gensim обеспечиваетмодель лдаРеализация может использоваться непосредственно в производственной среде.
Несколько замечаний по использованию этой модели:
Dictionary
Модель lda gensim должна пройти черезЭкземпляр словаряИли здесь рекомендуется сопоставление id->word с использованием экземпляра словаря, потому что экземпляр словаря gensim предоставляет множество полезных методов.
Например:
- Получить токен по id;
- Получить id через токен;
- Получить луковое представление документа (похожее на BoW, описанное в предыдущей статье, но не идентичное);
- Сохраняйте и загружайте файлы словарей.
Пример этого класса выглядит следующим образом:
>>> from gensim.corpora import Dictionary
>>>
>>> texts = [['human', 'interface', 'computer']]
>>> dct = Dictionary(texts) # initialize a Dictionary
>>> dct.add_documents([["cat", "say", "meow"], ["dog"]]) # add more document (extend the vocabulary)
>>> dct.token2id
{'computer': 0, 'human': 1, 'interface': 2, 'cat': 3, 'meow': 4, 'say': 5, 'dog': 6}
>>> dct.doc2bow(["dog", "computer", "non_existent_word", "dog"]) # 第一个值表示 id,第二个值表示出现的次数
[(0, 1), (6, 2)]
Однако при использовании этого класса для непосредственной обработки китайского текста возникает много проблем.стоп-слово,низкочастотные словаМы не хотим существовать в представлении лука.В настоящее время нам нужно вызвать этот метод для создания словаря после разделения слов самостоятельно после соответствующей обработки.
На самом деле, внимательно изучив эту модель, мы обнаружили, что в slearn есть очень похожий класс, который можно использовать, чтобы помочь нам справляться с такими вещами, какстоп-слово,низкочастотные словаи т. д., этот класс в sklearn называетсяCountVectorizer
CountVectorizer
Пример выглядит следующим образом:
>>> from sklearn.feature_extraction.text import CountVectorizer
>>> corpus = [
... 'This is the first document.',
... 'This document is the second document.',
... 'And this is the third one.',
... 'Is this the first document?',
... ]
>>> vectorizer = CountVectorizer()
>>> X = vectorizer.fit_transform(corpus)
>>> print(vectorizer.get_feature_names())
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
>>> print(X.toarray())
[[0 1 1 1 0 0 1 0 1]
[0 2 0 1 0 1 1 0 1]
[1 0 0 1 1 0 1 1 1]
[0 1 1 1 0 0 1 0 1]]
Этот класс имеет некоторые параметры, которые могут быть автоматически удалены для нас.стоп-слово,высокочастотные слова,низкочастотные словаи так далее.
Объединив эти два класса, мы можем передать необработанный текст черезjiaba
причастие какCountVectorizer
ввод; дождитесь обучения использованию ввода классаbuild_tokenizer
метод, чтобы получить функцию, которая может разделить текст на последовательности токенов; затем используйте эту функцию, чтобы снова обработать исходный текст, получить последовательность токенов и ввестиDictionary
Вот и все.
gensim lda
Вышеуказанным методом получаемDictionary
После экземпляра просто передайте исходный текст в экземплярdoc2bow
Метод получает соответствующее представление лука, после чего можно обучить модель lda.
После окончания обучения вы можете свободно исследовать модель!
evaluation
Как оценить обученную модель gensim lda?
недоумение является широко используемым методом оценки модели в nlp. Ссылочные ссылки:blog.CSDN.net/index20001/…
предоставлено модельюlog_perplexity
Метод может получить оценку, и чем меньше недоумение, тем лучше модель.
Суммировать
В этой статье кратко объясняется роль следующих тематических моделей, а также методы обучения и оценки модели gensim lda Читатели должны изучить больше контента.