Ще ви трябват 5 минути, за да разберете и внедрите LDA в Python
Въведение
Живеем в епоха, в която сме заобиколени от голям обем текстова информация, като отговори на анкети, коментари в социалните медии, туитове и т.н. Намирането на подходяща информация за вашите нужди може да бъде предизвикателство, особено когато се работи с голям, но различен корпус от данни.
Благодарение на моделиране на теми, ера на обработка на естествен език, използвана за ефективно анализиране на големи немаркирани текстови данни чрез групирането/клъстерирането им в теми. Ще се опитаме да покрием техника за моделиране на теми, наречена LDA с Python.
LDA — Как работи
LDA означава латентно разпределение на Дирихле. Тази техника се опитва да открие теми от набор от документи, като използва вероятностно разпределение, базирано на следните допускания:
- Предположение 1: Документи с подобни теми използват подобни групи от думи, което означава, че всички документи са вероятностни разпределения за латентни теми.
- Предположение 2: Латентните теми могат да бъдат намерени чрез търсене на групи от думи, които обикновено се срещат заедно в документи в целия корпус, което означава, че темите са разпределения на вероятностите върху думите.
Внедряване на LDA
Основни стъпки
- Изберете фиксиран брой K теми за откриване.
- За всеки документ в корпуса произволно присвоете всяка дума в документа към една от темите. Тази стъпка дава както тематично представяне на всички документи, така и разпределение на думи на всички теми.
- От предишната стъпка итерирайте думите във всеки документ, за да подобрите тези теми
- В края на процеса всеки документ ще бъде присвоен на тема
Относно данните
- Това са новините на Australian Broadcasting Corporation, публикувани за период от осем години, достъпни на Kaggle. Тези данни имат две основни колони:
- publish_date: дата на публикуване на статията във формат yyyyMMdd.
- headline_text: текст на заглавието на английски език
- Наборът от данни има
Зареждане на данни и избор на подмножество
Ред 6 показва (1226258, 2), което означава 1226258 реда и 2 колони. Тъй като имаме много редове, реших да избера подмножество от 20 000 реда, за да ускоря обработката. Тази операция се извършва в редове 9 и 10. Можете да промените номера на наблюдението, ако желаете.
Ред 13 показва 5 произволни реда от избраната проба, както е показано по-долу
Подготовка на данни за LDA
Изградете матрицата на термините на документа X
Не се интересуваме от колоната publish_data, тъй като ще използваме само данни от headline_text.
Дефинирайте обекта CountVectorizer както по-долу, игнорираме:
- всички термини, които се срещат над 95% пъти в нашия документен корпус. Тъй като прагът
max_df
(0,95) означава, че термините, срещащи се повече от тази стойност, не са значими. В конкретния случай повечето от тях ще бъдатstopwords
. - всички термини, които се срещат по-малко от три пъти (
min_df = 3
) в целия корпус.
Ред 9 показва следния резултат, което означава, че имаме 20 000 документа и 6425 различни думи.
<20000x6425 sparse matrix of type '<class 'numpy.int64'>' with 89645 stored elements in Compressed Sparse Row format>
Нека да разгледаме някои от тези думи/характеристики, които са извлечени от документите.
Ред 5 показва следните думи:
['zimbabwe', 'zimbabwean', 'zone', 'zones', 'zoo']
Изградете LDA модел
От нашата DTM матрица вече можем да изградим LDA модела за извличане на теми от подчертаните текстове. Броят на темите, които трябва да бъдат извлечени, е хиперпараметър и ние ще използваме 7 теми.
Тъй като LDA е итеративен алгоритъм, в нашия случай ще имаме 30 итерации, но стойността по подразбиране е 10. Стойността на случайното състояние може е всяка цифра и има за цел да възпроизведе същия резултат.
Показване на най-популярните думи по тема
От модела LDA вече можем да генерираме най-добрите думи от всяка от седемте теми.
Предишният код генерира следния изход.
THE TOP 10 WORDS FOR TOPIC #0 ['weather', 'election', 'labor', 'urged', 'qld', 'act', 'council', 'nsw', 'new', 'govt'] THE TOP 10 WORDS FOR TOPIC #1 ['report', 'indigenous', 'country', 'rural', 'charged', 'accused', 'new', 'health', 'calls', 'says'] THE TOP 10 WORDS FOR TOPIC #2 ['queensland', 'charges', 'hospital', 'case', 'guilty', 'child', 'sex', 'murder', 'man', 'court'] THE TOP 10 WORDS FOR TOPIC #3 ['face', 'england', 'years', 'win', 'australian', 'talks', 'wins', 'final', 'cup', 'world'] THE TOP 10 WORDS FOR TOPIC #4 ['probe', 'dead', 'woman', 'killed', 'dies', 'car', 'crash', 'man', 'interview', 'police'] THE TOP 10 WORDS FOR TOPIC #5 ['live', 'return', 'care', 'residents', 'test', 'australia', 'new', 'change', 'workers', 'day'] THE TOP 10 WORDS FOR TOPIC #6 ['news', 'search', 'west', 'market', 'coronavirus', 'national', 'gold', 'farmers', 'sydney', 'coast']
Наблюдение: Изглежда
- Тема 1 е по-ориентирана към правителството
- Тема 3 изглежда е повече за спорта, отколкото за нещо друго
Прикрепете етикети за открити теми към оригинални документи
Ред 5 на кода показва: (20000, 7), което означава, че final_topics съдържа, за всеки от нашите 20 000 документа, вероятностния резултат от колко вероятно е даден документ да принадлежи към всяка от 7-те теми.
Ред 11 показва първите 5 документа и съответните им теми
Според нашия LDA модел:
- първият и вторият документ принадлежат към 4-та тема.
- третият и четвъртият документ принадлежат към 4-та тема.
- петият документ принадлежи към 6-та тема.
- и т.н.
Малко визуализация
От следната визуализация можем динамично да имаме за всяка тема набора от думи, с които тя е свързана.
Този панел показва темите, представени с кръгове вляво и техния набор от думи вдясно. В тази графика можем да видим, че тема 3 е представена от думите съд, мъж, убийство, секс, дете, виновен и т.н. От тези думи можем да заключим, че тази тема е за нещо драматично.
Заключение
Направи го! Преминаване от немаркирани данни до създаване на краен модел, който свързва всеки документ с тема по графичен начин. При моделирането на теми не знаем правилните теми предварително, така че може би е по-добре да имаме бизнес познания, които могат да улеснят тълкуването на думите, генерирани от модела. Надявам се, че сте харесали тази статия и можете да изследвате повече от следните ресурси.
Допълнителни ресурси
„Извличане на теми с факторизация на неотрицателна матрица и латентно разпределение на Дирихле“