Модель Latent Dirichlet allocation (LDA)
Модель скрытого выделения Дирихле (LDA) является моделью темы, которая обнаруживает базовые темы в наборе документов и выводит вероятности слова в темах. Если модель была подходящим использованием мешка n модели граммов, то программное обеспечение обрабатывает N-граммы как отдельные слова.
Создайте модель LDA с помощью функции fitlda
.
NumTopics
— Количество темКоличество тем в модели LDA, заданной как положительное целое число.
TopicConcentration
— Концентрация темыКонцентрация темы, заданная как положительная скалярная величина. Функция устанавливает концентрацию на тему к TopicConcentration/NumTopics
. Для получения дополнительной информации смотрите Скрытое Выделение Дирихле.
WordConcentration
— Концентрация Word1
(значение по умолчанию) | неотрицательный скалярКонцентрация Word, заданная как неотрицательный скаляр. Программное обеспечение устанавливает концентрацию на слово к WordConcentration/numWords
, где numWords
является размером словаря входных документов. Для получения дополнительной информации смотрите Скрытое Выделение Дирихле.
CorpusTopicProbabilities
— Вероятности темы входного документа установленыВероятности темы входного набора документа, заданного как вектор. Корпусные вероятности темы модели LDA являются вероятностями наблюдения, что каждая тема в целом наборе данных раньше соответствовала модели LDA. CorpusTopicProbabilities
является 1 K вектором, где K является количеством тем. k th запись CorpusTopicProbabilities
соответствует вероятности наблюдения темы k.
DocumentTopicProbabilities
— Вероятности темы на входной документВероятности темы на входной документ, заданный как матрица. Вероятности тематики документа модели LDA являются вероятностями наблюдения, что каждая тема в каждом документе раньше соответствовала модели LDA. DocumentTopicProbabilities
является D-by-K матрица, где D является количеством документов, используемых, чтобы соответствовать модели LDA, и K является количеством тем. (d,k) th запись DocumentTopicProbabilities
соответствует вероятности наблюдения темы k в документе d.
Если любой, темы имеют нулевую вероятность (CorpusTopicProbabilities
содержит нули), то соответствующие столбцы DocumentTopicProbabilities
и TopicWordProbabilities
являются нулями.
Порядок строк в DocumentTopicProbabilities
соответствует порядку документов в данных тренировки.
TopicWordProbabilities
— Вероятности Word на темуВероятности Word на тему, заданную как матрица. Вероятности слова темы модели LDA являются вероятностями наблюдения каждого слова в каждой теме модели LDA. TopicWordProbabilities
является V-by-K матрица, где V является количеством слов в Vocabulary
, и K является количеством тем. (v,k) th запись TopicWordProbabilities
соответствует вероятности наблюдения слова v в теме k.
Если любой, темы имеют нулевую вероятность (CorpusTopicProbabilities
содержит нули), то соответствующие столбцы DocumentTopicProbabilities
и TopicWordProbabilities
являются нулями.
Порядок строк в TopicWordProbabilities
соответствует порядку слов в Vocabulary
.
TopicOrder
— Порядок темы'initial-fit-probability'
(значение по умолчанию) | 'unordered'
Порядок темы, заданный как одно из следующего:
'initial-fit-probability'
– Сортировка тем корпусными вероятностями темы начальной образцовой подгонки. Эти вероятности являются свойством CorpusTopicProbabilities
начального объекта ldaModel
, возвращенного fitlda
. Функция resume
не переупорядочивает темы получившихся объектов ldaModel
.
'unordered'
– Не заказывайте темы.
FitInfo
— Информация зарегистрирована при подборе кривой модели LDAИнформация зарегистрирована при подборе кривой модели LDA, заданной как struct со следующими полями:
TerminationCode
– Состояние оптимизации на выход
0 – Предел итерации достигнут.
1 – Допуск на удовлетворенной логарифмической вероятности.
TerminationStatus
– Объяснение возвращенного кода завершения
'NumIterations'
Количество итераций выполняется
NegativeLogLikelihood
– Отрицательная логарифмическая вероятность для данных передала fitlda
Perplexity
– Недоумение для данных передало fitlda
Solver
– Имя решателя используется
History
– Struct, содержащий историю оптимизации
StochasticInfo
– Информация содержащего Struct для стохастических решателей
Типы данных: struct
Vocabulary
— Список слов в моделиСписок слов в модели, заданной как вектор строки.
Типы данных: string
logp | Логарифмические вероятности документа и качество подгонки модели LDA |
predict | Предскажите главные темы LDA документов |
resume | Продолжите соответствовать модели LDA |
topkwords | Большинство важных слов в модели сумки слов или теме LDA |
transform | Преобразуйте документы в более низкое мерное пространство |
wordcloud | Создайте график облака слова из текста, модели сумки слов, мешка n модели граммов или модели LDA |
Чтобы воспроизвести результаты в этом примере, установите rng
на 'default'
.
rng('default')
Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt
содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt
, разделите текст в документы в символах новой строки, и затем маркируйте документы.
filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);
Создайте модель сумки слов использование bagOfWords
.
bag = bagOfWords(documents)
bag = bagOfWords with properties: Counts: [154x3092 double] Vocabulary: [1x3092 string] NumWords: 3092 NumDocuments: 154
Соответствуйте модели LDA четырьмя темами.
numTopics = 4; mdl = fitlda(bag,numTopics)
Initial topic assignments sampled in 0.093538 seconds. ===================================================================================== | Iteration | Time per | Relative | Training | Topic | Topic | | | iteration | change in | perplexity | concentration | concentration | | | (seconds) | log(L) | | | iterations | ===================================================================================== | 0 | 0.03 | | 1.215e+03 | 1.000 | 0 | | 1 | 0.02 | 1.0482e-02 | 1.128e+03 | 1.000 | 0 | | 2 | 0.01 | 1.7190e-03 | 1.115e+03 | 1.000 | 0 | | 3 | 0.01 | 4.3796e-04 | 1.118e+03 | 1.000 | 0 | | 4 | 0.05 | 9.4193e-04 | 1.111e+03 | 1.000 | 0 | | 5 | 0.03 | 3.7079e-04 | 1.108e+03 | 1.000 | 0 | | 6 | 0.05 | 9.5777e-05 | 1.107e+03 | 1.000 | 0 | =====================================================================================
mdl = ldaModel with properties: NumTopics: 4 WordConcentration: 1 TopicConcentration: 1 CorpusTopicProbabilities: [0.2500 0.2500 0.2500 0.2500] DocumentTopicProbabilities: [154x4 double] TopicWordProbabilities: [3092x4 double] Vocabulary: [1x3092 string] TopicOrder: 'initial-fit-probability' FitInfo: [1x1 struct]
Визуализируйте темы с помощью облаков слова.
figure for topicIdx = 1:4 subplot(2,2,topicIdx) wordcloud(mdl,topicIdx); title("Topic: " + topicIdx) end
Составьте таблицу слов с самой высокой вероятностью темы LDA.
Чтобы воспроизвести результаты, установите rng
на 'default'
.
rng('default')
Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt
содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt
, разделите текст в документы в символах новой строки, и затем маркируйте документы.
filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);
Создайте модель сумки слов использование bagOfWords
.
bag = bagOfWords(documents);
Соответствуйте модели LDA 20 темами. Чтобы подавить многословный вывод, установите 'Verbose'
на 0.
numTopics = 20;
mdl = fitlda(bag,numTopics,'Verbose',0);
Найдите лучшие 20 слов первой темы.
k = 20; topicIdx = 1; tbl = topkwords(mdl,k,topicIdx)
tbl=20×2 table
Word Score
________ _________
"eyes" 0.11155
"beauty" 0.05777
"hath" 0.055778
"still" 0.049801
"true" 0.043825
"mine" 0.033865
"find" 0.031873
"black" 0.025897
"look" 0.023905
"tis" 0.023905
"kind" 0.021913
"seen" 0.021913
"found" 0.017929
"sin" 0.015937
"three" 0.013945
"golden" 0.0099608
⋮
Найдите лучшие 20 слов первой темы и используйте среднее значение инверсии масштабироваться на очках.
tbl = topkwords(mdl,k,topicIdx,'Scaling','inversemean')
tbl=20×2 table
Word Score
________ ________
"eyes" 1.2718
"beauty" 0.59022
"hath" 0.5692
"still" 0.50269
"true" 0.43719
"mine" 0.32764
"find" 0.32544
"black" 0.25931
"tis" 0.23755
"look" 0.22519
"kind" 0.21594
"seen" 0.21594
"found" 0.17326
"sin" 0.15223
"three" 0.13143
"golden" 0.090698
⋮
Создайте облако слова с помощью масштабированных очков в качестве данных о размере.
figure wordcloud(tbl.Word,tbl.Score);
Доберитесь вероятности тематики документа (также известный как смеси темы) документов раньше соответствовали модели LDA.
Чтобы воспроизвести результаты, установите rng
на 'default'
.
rng('default')
Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt
содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt
, разделите текст в документы в символах новой строки, и затем маркируйте документы.
filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);
Создайте модель сумки слов использование bagOfWords
.
bag = bagOfWords(documents);
Соответствуйте модели LDA 20 темами. Чтобы подавить многословный вывод, установите 'Verbose'
на 0.
numTopics = 20;
mdl = fitlda(bag,numTopics,'Verbose',0)
mdl = ldaModel with properties: NumTopics: 20 WordConcentration: 1 TopicConcentration: 5 CorpusTopicProbabilities: [1x20 double] DocumentTopicProbabilities: [154x20 double] TopicWordProbabilities: [3092x20 double] Vocabulary: [1x3092 string] TopicOrder: 'initial-fit-probability' FitInfo: [1x1 struct]
Просмотрите вероятности темы первого документа в данных тренировки.
topicMixtures = mdl.DocumentTopicProbabilities; figure bar(topicMixtures(1,:)) title("Document 1 Topic Probabilities") xlabel("Topic Index") ylabel("Probability")
Чтобы воспроизвести результаты в этом примере, установите rng
на 'default'
.
rng('default')
Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt
содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt
, разделите текст в документы в символах новой строки, и затем маркируйте документы.
filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);
Создайте модель сумки слов использование bagOfWords
.
bag = bagOfWords(documents)
bag = bagOfWords with properties: Counts: [154x3092 double] Vocabulary: [1x3092 string] NumWords: 3092 NumDocuments: 154
Соответствуйте модели LDA 20 темами.
numTopics = 20; mdl = fitlda(bag,numTopics)
Initial topic assignments sampled in 0.085018 seconds. ===================================================================================== | Iteration | Time per | Relative | Training | Topic | Topic | | | iteration | change in | perplexity | concentration | concentration | | | (seconds) | log(L) | | | iterations | ===================================================================================== | 0 | 0.22 | | 1.159e+03 | 5.000 | 0 | | 1 | 0.09 | 5.4884e-02 | 8.028e+02 | 5.000 | 0 | | 2 | 0.08 | 4.7400e-03 | 7.778e+02 | 5.000 | 0 | | 3 | 0.06 | 3.4597e-03 | 7.602e+02 | 5.000 | 0 | | 4 | 0.08 | 3.4662e-03 | 7.430e+02 | 5.000 | 0 | | 5 | 0.08 | 2.9259e-03 | 7.288e+02 | 5.000 | 0 | | 6 | 0.08 | 6.4180e-05 | 7.291e+02 | 5.000 | 0 | =====================================================================================
mdl = ldaModel with properties: NumTopics: 20 WordConcentration: 1 TopicConcentration: 5 CorpusTopicProbabilities: [1x20 double] DocumentTopicProbabilities: [154x20 double] TopicWordProbabilities: [3092x20 double] Vocabulary: [1x3092 string] TopicOrder: 'initial-fit-probability' FitInfo: [1x1 struct]
Предскажите главные темы для массива новых документов.
newDocuments = tokenizedDocument([ "what's in a name? a rose by any other name would smell as sweet." "if music be the food of love, play on."]); topicIdx = predict(mdl,newDocuments)
topicIdx = 2×1
19
8
Визуализируйте предсказанные темы с помощью облаков слова.
figure subplot(1,2,1) wordcloud(mdl,topicIdx(1)); title("Topic " + topicIdx(1)) subplot(1,2,2) wordcloud(mdl,topicIdx(2)); title("Topic " + topicIdx(2))
Модель скрытого выделения Дирихле (LDA) является моделью тематики документа, которая обнаруживает базовые темы в наборе документов и выводит вероятности слова в темах. LDA моделирует набор документов D как смеси темы , по темам K, охарактеризованным векторами вероятностей слова . Модель принимает что смеси темы , и темы следуйте за распределением Дирихле с параметрами концентрации и соответственно.
Смеси темы векторы вероятности длины K, где K является количеством тем. Запись вероятность темы i, появляющийся в d th документ. Смеси темы соответствуют строкам свойства DocumentTopicProbabilities
объекта ldaModel
.
Темы векторы вероятности длины V, где V является количеством слов в словаре. Запись соответствует вероятности v th слово словаря, появляющегося в i th тема. Темы соответствуйте столбцам свойства TopicWordProbabilities
объекта ldaModel
.
Учитывая темы и предшествующий Дирихле на смесях темы LDA принимает следующий порождающий процесс для документа:
Выберите смесь темы . Случайная переменная вектор вероятности длины K, где K является количеством тем.
Для каждого слова в документе:
Выберите список тем . z случайной переменной является целым числом от 1 до K, где K является количеством тем.
Выберите слово . w случайной переменной является целым числом от 1 до V, где V является количеством слов в словаре и представляет соответствующее слово в словаре.
При этом порождающем процессе, совместном распределении документа со словами , со смесью темы , и с индексами темы дают
где N является количеством слов в документе. Подведение итогов совместного распределения по z и затем интеграция приводит к предельному распределению документа w:
Следующая схема иллюстрирует модель LDA как вероятностную графическую модель. Теневые узлы являются наблюдаемыми переменными, незаштрихованные узлы являются скрытыми переменными, узлы без основ являются параметрами модели. Стрелки подсвечивают, что зависимости между случайными переменными и пластинами указывают на повторенные узлы.
Распределение Дирихле является непрерывным обобщением распределения многочлена. Учитывая количество категорий , и параметр концентрации , где вектор положительных реалов длины K, функцией плотности вероятности распределения Дирихле дают
где B обозначает многомерную Бета-функцию, данную
Особый случай распределения Дирихле является симметричным распределением Дирихле. Симметричное распределение Дирихле характеризуется параметром концентрации , где все элементы то же самое.
bagOfWords
| fitlda
| logp
| lsaModel
| predict
| resume
| topkwords
| transform
| wordcloud
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.