Тематическая модель для обработки естественного языка (4)

NLP

Эта статья в основном относится к курсу «Обработка естественного языка» на Coursera.

Введение

Тематические модели — это еще один способ понимания семантики (извлечение темы статьи, построение векторного представления статьи).

Краткое понимание тематической модели выглядит следующим образом:

  1. Мы хотим получить векторное представление статьи;
  2. Статьи могут просматривать некоторыетемаописывать;
  3. теманекоторымисловоописывать.

Например, тема погоды может быть описана такими словами, как небо, дождь, солнечно и солнце.

Как показано ниже:

общего пользования

  1. Классификация текстов (по темам)
  2. Агрегация и анализ новостных потоков
  3. Рекомендательные системы (найдите статьи на похожие темы)

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 Читатели должны изучить больше контента.