Поднимите свой текстовый анализ на новый уровень: научитесь применять алгоритмы тематического моделирования Gensim

Тематическое моделирование — эффективный подход к анализу неструктурированных текстовых данных. Использование фреймворков обработки естественного языка Python, таких как Gensim, NLTK и spaCy, упрощает эту задачу.

Эта статья проведет вас через весь процесс тематического моделирования, включая предварительную обработку необработанных текстовых данных, создание тематических моделей, оценку моделей и визуализацию результатов. В учебнике используется spaCy для предварительной обработки, Gensim для тематического моделирования и pyLDAvis для визуализации.

Таблица содержания

· 1. Обзор тематического моделирования
· 2. Анализ текста с помощью spaCy
· 3. Компьютерная лингвистика
· 4. Очистка данных
· 5. Тематическое моделирование
· 6. Визуализация тем с помощью pyLDAvis

1. Обзор тематического моделирования

Что такое тематическое моделирование и почему это важно?

Тематическое моделирование: мощная техника машинного обучения без присмотра. Это позволяет нам анализировать большие объемы текстовых данных, группируя документы по темам на основе их сходства.

Основная проблема при работе с текстовыми данными заключается в том, что они часто не помечены, что делает их непригодными для традиционных подходов к обучению с учителем. Целью тематического моделирования является обнаружение кластеров документов, которые имеют общие темы или темы. Важно отметить, что точные темы могут быть неизвестны, и мы должны интерпретировать результаты и определить, что эти темы представляют.

2. Анализ текста с помощью spaCy

Наши шаги, естественно, настраивают наш импорт. Мы будем использовать spaCyдля предварительной обработки данных и компьютерной лингвистики, Gensimдля Тематическое моделирование, Scikit-Learn для классификации и Keras для генерации текста .

Импорт библиотек

Сбор данных

Набор данных, с которым мы будем работать, будет представлять собой корпус Lee, который представляет собой сокращение от Lee Background Corpus и 20NG набор данных.

C:..\anaconda3\lib\site-packages\gensim\test\test_data
C:..\anaconda3\lib\site-packages\gensim\test\test_data\lee_background.cor

Очистка текстовых данных

У нас не может быть самых современных результатов без данных, которые так же хороши. Давайте проведем этот раздел, работая над очисткой и пониманием нашего набора данных. Мы познакомимся с spaCy, отраслевым пакетом обработки текста.

В целях безопасности давайте добавим стоп-слова. Это газетный корпус, поэтому мы, скорее всего, столкнемся с вариациями «сказал», «мистер» и «мистер»… которые не добавят никакой ценности тематическим моделям.

3. Компьютерная лингвистика

Теперь, когда у нас есть объект документа. Мы видим, что объект документа теперь содержит весь корпус. Это важно, потому что мы будем использовать объект doc для создания нашего корпуса для алгоритмов машинного обучения. Создавая корпус для gensim/scikit-learn, мы иногда забываем о невероятной мощи, которую spaCy заключает в себе, поэтому в этом разделе мы кратко продемонстрируем то же самое на небольшом примере.

POS-маркировка — (Часть речи)

Часть речи (POS)объясняет, как слово используется в предложении. Существует восемь основных частей речи: существительные, местоимения, прилагательные, глаголы, наречия, предлоги, союзы и междометия.

Last ADJ JJ
Thursday PROPN NNP
, PUNCT ,
Manchester PROPN NNP
United PROPN NNP
defeated VERB VBD
AC PROPN NNP
Milan PROPN NNP
at ADP IN
San PROPN NNP
Siro PROPN NNP
. PUNCT .

NER-Tagged — (Распознавание именованных объектов)

Распознавание именованных объектов (NER) – это подзадача извлечения информации, которая направлена ​​на поиск и классификацию именованных объектов, упомянутых в неструктурированном тексте, по заранее определенным категориям, таким как имена людей, организации. , местоположения, медицинские коды, выражения времени, количества, денежные значения, проценты и т. д.

Last DATE
Thursday DATE
, 
Manchester GPE
United GPE
defeated 
AC ORG
Milan ORG
at 
San GPE
Siro GPE
.
Last Thursday DATE
Manchester United GPE
AC Milan ORG
San Siro GPE

Анализ зависимостей

Термин анализ зависимостей (DP) относится к процессу изучения зависимостей между фразами предложения с целью определения его грамматической структуры.

Manchester United United nsubj defeated
AC Milan Milan dobj defeated
San Siro Siro pobj at
Last amod Thursday PROPN []
Thursday npadvmod defeated VERB [Last]
, punct defeated VERB []
Manchester compound United PROPN []
United nsubj defeated VERB [Manchester]
defeated ROOT defeated VERB [Thursday, ,, United, Milan, at, .]
AC compound Milan PROPN []
Milan dobj defeated VERB [AC]
at prep defeated VERB [Siro]
San compound Siro PROPN []
Siro pobj at ADP [San]
. punct defeated VERB []

4. Очистка данных

Взгляните на вывод объекта документа. Вроде ничего, да? Но внутренняя структура данных spaCy сделала всю работу за нас. Давайте посмотрим, как мы можем создать наш корпус.

['hundred', 'people', 'force', 'vacate', 'home', 'Southern', 'Highlands', 'New', 'South', 'Wales', 'strong', 'wind', 'push', 'huge', 'bushfire', 'town', 'Hill', 'new', 'blaze', 'near', 'Goulburn', 'south', 'west', 'Sydney', 'force', 'closure', 'Hume', 'Highway', '4:00pm', 'AEDT', 'marked', 'deterioration', 'weather', 'storm', 'cell', 'move', 'east', 'Blue', 'Mountains', 'force', ....]
  • И в этом заключается магия spaCy — именно так нам удалось избавиться от стоп-слов и знаков препинания, а также добавить лемматизированные слова.
  • Иногда Тематическое моделирование имеет больше смысла, когда New и York рассматриваются как New York — мы можем сделать это, создав биграммную модель и соответствующим образом изменив наш корпус.
['hundred', 'people', 'force', 'vacate', 'home', 'Southern', 'Highlands', 'New_South', 'Wales', 'strong', 'wind', 'push', 'huge', 'bushfire', 'town', 'Hill', 'new', 'blaze', 'near', 'Goulburn', 'south_west', 'Sydney', 'force', 'closure', 'Hume', 'Highway', '4:00pm', 'AEDT', 'marked', 'deterioration', 'weather', 'storm', 'cell', 'move', 'east', 'Blue_Mountains', 'force', 'authority', 'decision', 'evacuate', 'people', 'home', 'outlying', ....]
[(71, 1), (83, 1), (91, 1), (93, 1), (94, 1), (108, 1), (109, 1), (110, 1), (111, 4), (112, 1), (113, 1), (114, 1), (115, 1), (116, 2), (117, 1), (118, 1), (119, 3), (120, 1), (121, 1), (122, 1), (123, 2), (124, 3), (125, 1), (126, 2), (127, 2), (128, 1), (129, 1), (130, 1), (131, 1), (132, 1), (133, 1), (134, 1), (135, 1), (136, 1), (137, 1), (138, 3), (139, 1), (140, 1), (141, 1), (142, 2), (143, 1), (144, 1), (145, 1), (146, 1), (147, 1), (148, 1), (149, 1), (150, 3), (151, 3), (152, 1), (153, 1), (154, 2), (155, 1), (156, 1), (157, 2), (158, 1), (159, 1), (160, 1), (161, 1), (162, 1), (163, 1), (164, 1), (165, 1), (166, 1), (167, 1), (168, 1), (169, 1), (170, 2), (171, 1), (172, 1), (173, 1), (174, 1), (175, 1), (176, 1)]

Завершение жизненно важного шага в анализе текста: очистка и настройка корпуса. Крайне важно помнить, что причина, по которой мы очищали и организовывали данные определенным образом, заключается в том, что это требуется Gensim. Многие алгоритмы анализа текста по-прежнему требуют такой подготовки данных, включая удаление стоп-слов и чисел, добавление лемматизированных форм слов и использование биграмм.

5. Тематическое моделирование

Тематическое моделирование относится к вероятностному моделированию текстовых документов как тем. Gensim остается самой популярной библиотекой для такого моделирования, и мы будем использовать ее для нашего тематического моделирования. .

LSI — скрытое семантическое индексирование

LSI расшифровывается как Скрытое семантическое индексирование — это популярный поиск информации (IR), который работает путем разложения исходной матрицы слов для сохранения ключевых тем.

[(0,
  '0.231*"israeli" + 0.215*"Arafat" + 0.197*"palestinian" + 0.177*"force" + 0.159*"kill" + 0.158*"official" + 0.151*"attack" + 0.141*"people" + 0.118*"day" + 0.116*"Israel"'),
 (1,
  '0.306*"israeli" + 0.304*"Arafat" + 0.272*"palestinian" + -0.167*"Afghanistan" + 0.165*"Sharon" + -0.159*"Australia" + 0.154*"Israel" + 0.126*"Hamas" + 0.123*"West_Bank" + -0.118*"force"'),
 (2,
  '0.259*"Afghanistan" + 0.218*"force" + -0.191*"fire" + 0.182*"Al_Qaeda" + 0.173*"bin_Laden" + 0.150*"Pakistan" + -0.146*"Sydney" + 0.130*"fighter" + 0.130*"Tora_Bora" + 0.127*"Taliban"'),
 (3,
  '0.388*"fire" + 0.271*"area" + -0.207*"Australia" + 0.202*"Sydney" + 0.180*"firefighter" + 0.160*"north" + 0.149*"wind" + 0.135*"New_South" + 0.135*"Wales" + 0.128*"south"'),
 (4,
  '0.274*"company" + 0.206*"Qantas" + 0.180*"union" + -0.165*"test" + 0.147*"worker" + -0.143*"match" + -0.141*"South_Africa" + -0.134*"win" + -0.131*"wicket" + -0.124*"day"')]

HDP — иерархический процесс Дирихле

HDP, Иерархический процесс Дирихле – это неконтролируемая тематическая модель который сам определяет количество тем.

[(0,
  '0.006*israeli + 0.004*Sharon + 0.004*Arafat + 0.004*palestinian + 0.004*kill + 0.003*group + 0.003*Taliban + 0.003*choose + 0.003*airport + 0.003*official + 0.003*West_Bank + 0.003*civilian + 0.003*Hamas + 0.003*militant + 0.002*military + 0.002*suicide_attack + 0.002*attack + 0.002*Government + 0.002*target + 0.002*people'),
 (1,
  '0.003*Harrison + 0.002*hit + 0.002*tree + 0.002*Liverpool + 0.002*storm + 0.002*strike + 0.002*come + 0.002*George + 0.002*pay + 0.002*life + 0.002*music + 0.002*  + 0.002*minute + 0.002*bad + 0.002*hollow + 0.002*north + 0.002*damage + 0.002*State + 0.001*memory + 0.001*Beatle'),
 (2,
  '0.002*Afghanistan + 0.002*Powell + 0.002*southern + 0.002*Taliban + 0.002*face + 0.001*distress + 0.001*day + 0.001*time + 0.001*force + 0.001*game + 0.001*allegedly + 0.001*match + 0.001*want + 0.001*dressing + 0.001*district + 0.001*kill + 0.001*Buchanan + 0.001*John + 0.001*bin_Laden + 0.001*security'),
 (3,
  '0.004*company + 0.002*entitlement + 0.002*staff + 0.002*Austar + 0.002*cent + 0.002*australian + 0.002*redundancy + 0.002*$ + 0.002*receive + 0.002*administrator + 0.001*defence + 0.001*creditor + 0.001*earnest + 0.001*line + 0.001*Kennedy + 0.001*Razzano + 0.001*copy + 0.001*payment + 0.001*cease + 0.001*fielding'),
 (4,
  '0.003*match + 0.002*decide + 0.002*team + 0.002*israeli + 0.002*play + 0.002*ask + 0.002*Australia + 0.002*France + 0.002*guarantee + 0.002*attack_Israel + 0.002*tennis + 0.001*Rafter + 0.001*urinary + 0.001*hour + 0.001*win + 0.001*personal + 0.001*Nice + 0.001*late + 0.001*response + 0.001*group'),
 (5,
  '0.002*cow + 0.002*case + 0.002*call + 0.002*agreement + 0.002*disease + 0.002*confirm + 0.002*Japan + 0.002*time + 0.002*go + 0.001*unlucky + 0.001*chairman + 0.001*McDonald + 0.001*council + 0.001*administrator + 0.001*people + 0.001*day + 0.001*footstep + 0.001*chain + 0.001*assembly + 0.001*triple')]

LDA — скрытое распределение Дирихле

LDA или Скрытое распределение Дирихле, возможно, является самым известным алгоритмом тематического моделирования. . Здесь мы создаем простую модель темы с 10 темами.

[(0,
  '0.005*"Afghanistan" + 0.005*"year" + 0.005*"good" + 0.004*"force" + 0.004*"kill" + 0.003*"day" + 0.003*"Australia" + 0.003*"official" + 0.003*"new" + 0.003*"people"'),
 (1,
  '0.005*"attack" + 0.004*"people" + 0.004*"Arafat" + 0.004*"arrest" + 0.004*"Pakistan" + 0.004*"Australia" + 0.004*"United_States" + 0.003*"israeli" + 0.003*"group" + 0.003*"day"'),
 (2,
  '0.007*"year" + 0.005*"area" + 0.004*"report" + 0.004*"fire" + 0.004*"people" + 0.004*"Sydney" + 0.004*"official" + 0.003*"Government" + 0.003*"new" + 0.003*"Wales"'),
 (3,
  '0.005*"people" + 0.004*"day" + 0.004*"israeli" + 0.004*"group" + 0.004*"militant" + 0.004*"Australia" + 0.003*"force" + 0.003*"come" + 0.003*"time" + 0.003*"tell"'),
 (4,
  '0.004*"day" + 0.004*"israeli" + 0.004*"take" + 0.004*"company" + 0.004*"people" + 0.003*"Arafat" + 0.003*"time" + 0.003*"attack" + 0.003*"year" + 0.003*"palestinian"'),
 (5,
  '0.008*"Australia" + 0.005*"man" + 0.004*"fire" + 0.004*"day" + 0.004*"australian" + 0.004*"test" + 0.003*"detainee" + 0.003*"year" + 0.003*"people" + 0.003*"attack"'),
 (6,
  '0.005*"company" + 0.005*"cent" + 0.004*"tell" + 0.004*"year" + 0.004*"report" + 0.003*"man" + 0.003*"fire" + 0.003*"australian" + 0.003*"day" + 0.003*"continue"'),
 (7,
  '0.006*"palestinian" + 0.006*"israeli" + 0.006*"force" + 0.004*"Australia" + 0.004*"attack" + 0.004*"official" + 0.004*"Arafat" + 0.004*"kill" + 0.004*"call" + 0.003*"early"'),
 (8,
  '0.004*"Australia" + 0.004*"day" + 0.003*"United_States" + 0.003*"union" + 0.003*"man" + 0.003*"charge" + 0.003*"company" + 0.003*"lead" + 0.003*"win" + 0.003*"Afghanistan"'),
 (9,
  '0.006*"people" + 0.005*"Australia" + 0.005*"Australian" + 0.004*"tell" + 0.004*"force" + 0.004*"year" + 0.004*"company" + 0.004*"Afghanistan" + 0.003*"think" + 0.003*"know"')]

6. Визуализация тем с помощью pyLDAvis

Библиотека Python для визуализации интерактивной тематической модели. Это порт легендарного R package от Carson Sievert и Kenny Shirley.

pyLDAvis помогает пользователям интерпретировать темы в тематической модели, адаптированной к корпусу текстовых данных. Пакет извлекает информацию из подобранной тематической модели LDA для интерактивной веб-визуализации.

Визуализация предназначена для использования в блокноте IPython, но ее также можно сохранить в отдельный HTML-файл для удобства совместного использования.

Это отличный способ получить представление о том, какие слова появляются в наших документах и ​​какие темы документов могут присутствовать.

Ссылки: