Тематични модели: Латентно разпределение на Дирихле

В обработката на естествен език тематичните модели са важни статистически инструменти за откриване на скрити структури в колекция от документи. В този урок ще обсъдим тематични модели и LDA (Latent Dirichlet Allocation), който е един от най-известните и полезни тематични модели.

Тематични модели —

Ще започнем с дефиниране на някои термини.

Документи: Ще считаме документите за „торби с думи“. Например документът, съответстващ на следния текст — „В изчислителната биология ние анализираме ДНК и РНК структури, използвайки сложни инструменти за симулация.“ ще бъде [„изчислителен“, „биология“, „анализ“ , „ДНК“, „РНК“, „структури“, „комплекс“, „симулация“, „инструменти“]. Обърнете внимание, че премахнахме спиращи думи като „в“, „ние“, „използване“ и т.н.

Тема:Тема се отнася до колекция от думи, които са „семантично“ подобни. Например в горния текст има две теми —

  • Тема 0: [„биология“, „ДНК“, „РНК“, „структури“]
  • Тема 1: [„изчислителни“, „анализ“, „симулация“, „инструменти“]

Интуитивно значение на темите — Като се има предвид, че даден документ е по конкретна тема, ние предполагаме, че някои конкретни думи ще се появяват в документа по-често. Например — В документи, свързани с „биология“, думи като „биология“, „ДНК“, „РНК“ ще се появяват по-често, докато в документи, свързани с „изчисление“, думи като „изчислителен“, „анализ“, „симулация“ ще се появява по-често. Думи като „a“, „an“, „the“ ще се появят и в двата типа документи.

Термини:Термините могат да съответстват на отделни думи или фрази (n-грами). В този урок ще ги считаме за думи.

Например, нека нашият документ е— [„изчислителен“, „биология“, „анализ“, „ДНК“, „РНК“, „структури“, „комплекс“, „симулация“, „инструменти“]. Ако считаме думите за термини, тогава нашите термини ще бъдат — „изчислителен“, „биология“ и т.н. и ако считаме биграмите за наши термини, тогава нашите термини ще бъдат – „изчислителна биология“, „биологичен анализ“, и т.н...

Какво представляват моделите на теми:Моделите на теми се използват за извеждане на основната структура на тема в колекция от документи.

Латентно разпределение на Дирихле —

LDA е „генеративен вероятностен модел“. В LDA се опитваме да оценим два типа вероятностни разпределения.

Първият е матрицата Документ-Тема (ние визуализираме разпределението под формата на матрица). Това описва разпределение по теми, дадени на конкретен документ. Имайте предвид, че сборът на редовете на тази матрица е 1.

Втората е матрицата тема-термин. Това описва разпределение по термини, дадени на определена тема. Редовете на тази матрица също дават 1.

Процес на генериране на LDA: LDA приема, че документите са генерирани по следния начин —

  1. Изберете уникален набор от термини. Това е лексиката. Размерът му да еV.
  2. Изберете броя документи, D.
  3. За всеки документ изберете броя на термините за този документ, като вземете извадка от разпределението на Поасон.
  4. Изберете броя на темите, K.
  5. За всеки документ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. Разпределението на Дирихле може да се опише математически като -

  1. Параметърът αконтролира средната стойност, формата и рядкостта на θ.
  2. Пропорциите на темите за всеки документ саKдименсионален Дирихле. При положение, че имамеКтеми.
  3. Разпределението по термини за всяка тема еVизмерен Дирихле. При положение, че имамеVтермини в речника.

За да визуализирате ефекта на αв триизмерно разпределение на Дирихле, можете да следвате следната връзка — http://blog.bogatron.net/blog/2014/02/02/visualizing-dirichlet -разпределения/

Обучение чрез свито вземане на проби от Гибс —

Би било добра идея да прочетете начало за вземането на проби от Gibbs на тази връзка. Сега да предположим, че имаме Dдокументи и искаме да намерим скритата структура на теми в тях. Първо избираме фиксиран брой теми за откриване, K.

Имаме следния алгоритъм -

  1. За всеки документ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 от нулата.