Тематични модели: Латентно разпределение на Дирихле
В обработката на естествен език тематичните модели са важни статистически инструменти за откриване на скрити структури в колекция от документи. В този урок ще обсъдим тематични модели и LDA (Latent Dirichlet Allocation), който е един от най-известните и полезни тематични модели.
Тематични модели —
Ще започнем с дефиниране на някои термини.
Документи: Ще считаме документите за „торби с думи“. Например документът, съответстващ на следния текст — „В изчислителната биология ние анализираме ДНК и РНК структури, използвайки сложни инструменти за симулация.“ ще бъде [„изчислителен“, „биология“, „анализ“ , „ДНК“, „РНК“, „структури“, „комплекс“, „симулация“, „инструменти“]. Обърнете внимание, че премахнахме спиращи думи като „в“, „ние“, „използване“ и т.н.
Тема:Тема се отнася до колекция от думи, които са „семантично“ подобни. Например в горния текст има две теми —
- Тема 0: [„биология“, „ДНК“, „РНК“, „структури“]
- Тема 1: [„изчислителни“, „анализ“, „симулация“, „инструменти“]
Интуитивно значение на темите — Като се има предвид, че даден документ е по конкретна тема, ние предполагаме, че някои конкретни думи ще се появяват в документа по-често. Например — В документи, свързани с „биология“, думи като „биология“, „ДНК“, „РНК“ ще се появяват по-често, докато в документи, свързани с „изчисление“, думи като „изчислителен“, „анализ“, „симулация“ ще се появява по-често. Думи като „a“, „an“, „the“ ще се появят и в двата типа документи.
Термини:Термините могат да съответстват на отделни думи или фрази (n-грами). В този урок ще ги считаме за думи.
Например, нека нашият документ е— [„изчислителен“, „биология“, „анализ“, „ДНК“, „РНК“, „структури“, „комплекс“, „симулация“, „инструменти“]. Ако считаме думите за термини, тогава нашите термини ще бъдат — „изчислителен“, „биология“ и т.н. и ако считаме биграмите за наши термини, тогава нашите термини ще бъдат – „изчислителна биология“, „биологичен анализ“, и т.н...
Какво представляват моделите на теми:Моделите на теми се използват за извеждане на основната структура на тема в колекция от документи.
Латентно разпределение на Дирихле —
LDA е „генеративен вероятностен модел“. В LDA се опитваме да оценим два типа вероятностни разпределения.
Първият е матрицата Документ-Тема (ние визуализираме разпределението под формата на матрица). Това описва разпределение по теми, дадени на конкретен документ. Имайте предвид, че сборът на редовете на тази матрица е 1.
Втората е матрицата тема-термин. Това описва разпределение по термини, дадени на определена тема. Редовете на тази матрица също дават 1.
Процес на генериране на LDA: LDA приема, че документите са генерирани по следния начин —
- Изберете уникален набор от термини. Това е лексиката. Размерът му да еV.
- Изберете броя документи, D.
- За всеки документ изберете броя на термините за този документ, като вземете извадка от разпределението на Поасон.
- Изберете броя на темите, K.
- За всеки документdот 1 до D,
--- Draw a sample of dimension K from a Dirichlet distribution. --- The Dirichlet distribution takes in a parameter α (a positive valued vector) and returns a simplex, which is a positive valued vector and sums to 1. [More about Dirichlet distribution in the next section] --- Assign this sample as the topic-proportion for the document d.
Ние по същество изградихме нашата матрица документ-тема от горния процес.
7. За всяка темаkот 1 до K,
--- Draw a sample of dimension V from a Dirichlet distribution. --- Assign this sample as the distribution-over-terms for the topic k.
По същество сме изградили нашата матрица тема-термин от горния процес.
8. Сега ще се опитаме да генерираме Dдокументи от горните две дистрибуции (матрица документ-тема и матрица тема-термин). За всеки документгот 1 до Гиз
--- Look at the row corresponding to document d in the Document-Topic matrix. The row corresponds to the topic-proportion of the document d. --- Sample a topic from this topic-proportion. --- Look at the row corresponding to the sampled topic in the Topic-Term matrix. The row corresponds to the distribution-over-terms for the sampled topic. --- Sample a term from this distribution-over-terms. --- Repeat until the document d has number of terms which it was set to have (sampled using the Poisson distribution).
Това е генеративният процес, който LDA приема за колекция от документи. Казано на лаик, тъй като наблюдавахме „истинските“ документи, LDA се опитва да направи обратен инженеринг и да намери набора от теми, матрицата тема-термин и матрицата документ-тема, които е най-вероятно да генерират документите, които имаме.
Горният генеративен процес може да се обясни със следната структура на плочата.
Тук θпредставлява матрицата документ-тема, а ϕ представлява матрицата тема-термин. Z представлява темата, която вземаме от пропорциите на темата на документа d.
Разпределение на Дирихле —
Разпределението на Дирихле е експоненциално семейно разпределение върху симплекс. Симплексите са вектори с положителни стойности, чиято сума е 1. Разпределението на Дирихле може да се опише математически като -
- Параметърът αконтролира средната стойност, формата и рядкостта на θ.
- Пропорциите на темите за всеки документ саKдименсионален Дирихле. При положение, че имамеКтеми.
- Разпределението по термини за всяка тема еVизмерен Дирихле. При положение, че имамеVтермини в речника.
За да визуализирате ефекта на αв триизмерно разпределение на Дирихле, можете да следвате следната връзка — http://blog.bogatron.net/blog/2014/02/02/visualizing-dirichlet -разпределения/
Обучение чрез свито вземане на проби от Гибс —
Би било добра идея да прочетете начало за вземането на проби от Gibbs на тази връзка. Сега да предположим, че имаме Dдокументи и искаме да намерим скритата структура на теми в тях. Първо избираме фиксиран брой теми за откриване, K.
Имаме следния алгоритъм -
- За всеки документdот 1 до D,
--- Randomly assign each word in the document to one of the K topics.
2. Имаме нашите първоначални (произволни) матрици документ-тема и тема-термин. Сега искаме да ги подобрим.
3. За всеки документdот 1 до D,
For each word w in the document d, compute - 1. P(topic = t | document = d) = (number of words in d that are assigned to topic t + α)/(total number of words in d + number of topics * α) 2. P(word = w | topic = t) = (number of times word w is assigned to topic t across all documents + β)/(total number of words assigned to topic t across all documents + vocabulary size * β) 3. Here, 0 < α < 1 and 0 < β < 1 are hyper-parameters. Using them can be thought of as similar to L1 regularization. 4. Now, we reassign a topic to w, we choose t from the probability distribution = P(topic = t | document = d) x P(word = w | topic = t). This is as per the generative process assumption by LDA. 5. We repeat the above steps for some number of iterations, after which our topic assignments become steady.
В следващия урок ще видим как да внедрим LDA от нулата в Python. Засега просто ще видим как да използваме много популярен Python пакет за LDA.
LDA в Python
Можете да използвате lda пакета на lda-project в Python, за да изпълнявате LDA. Това LDA използва свито вземане на проби от Gibbs. Интерфейсът на този пакет следва конвенциите, намерени в scikit-learn.
Пример (източник — https://github.com/lda-project/lda), който демонстрира използването на този пакет —
Инсталация:
pip install lda
Употреба:
>>> import numpy as np >>> import lda >>> import lda.datasets >>> X = lda.datasets.load_reuters() # X is a Document-Term matrix >>> vocab = lda.datasets.load_reuters_vocab() # tuple of all words in the vocabulary >>> model = lda.LDA(n_topics = 10, n_iter = 1000, random_state = 7) >>> model.fit(X) # scikit-learn style >>> topic_term = model.topic_word_ # Topic-Term matrix >>> n_top_words = 5 # print 5 words from each topic >>> for i, topic_dist in enumerate(topic_word): ... topic_words = np.array(vocab)[np.argsort(topic_dist)][:-(n_top_words+1):-1] ... print('Topic {}: {}'.format(i, ' '.join(topic_words)))
Изход:
Topic 0: police miami versace cunanan wright Topic 1: elvis film music fans show Topic 2: yeltsin president political russian russia Topic 3: city million art century exhibition Topic 4: charles prince king royal diana Topic 5: germany against french war rights Topic 6: church people years year told Topic 7: pope mother teresa vatican order Topic 8: harriman clinton u.s churchill ambassador Topic 9: died church bernardin life president
Това е то! Ако ви е харесала тази статия, моля, уведомете ме в отговорите! Следващия път ще се върна с внедряване на LDA в Python от нулата.