Документирование вероятностей и достоверности соответствия модели LDA
___ = logp(___, указывает дополнительные параметры, использующие один или несколько аргументов пары имя-значение.Name,Value)
Чтобы воспроизвести результаты в этом примере, установите 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 темами. Для подавления подробных выходных данных установите 'Verbose' в 0.
numTopics = 20;
mdl = fitlda(bag,numTopics,'Verbose',0);Вычислите журнал вероятностей документов обучения и покажите их в гистограмме.
logProbabilities = logp(mdl,documents); figure histogram(logProbabilities) xlabel("Log Probability") ylabel("Frequency") title("Document Log-Probabilities")

Определите три документа с наименьшей логарифмической вероятностью. Низкая логарифмическая вероятность может предполагать, что документ может быть отклонением.
[~,idx] = sort(logProbabilities); idx(1:3)
ans = 3×1
146
19
65
documents(idx(1:3))
ans =
3x1 tokenizedDocument:
76 tokens: poor soul centre sinful earth sinful earth rebel powers array why dost thou pine suffer dearth painting thy outward walls costly gay why large cost short lease dost thou upon thy fading mansion spend shall worms inheritors excess eat up thy charge thy bodys end soul live thou upon thy servants loss let pine aggravate thy store buy terms divine selling hours dross fed rich shall thou feed death feeds men death once dead theres dying
76 tokens: devouring time blunt thou lions paws make earth devour own sweet brood pluck keen teeth fierce tigers jaws burn longlivd phoenix blood make glad sorry seasons thou fleets whateer thou wilt swiftfooted time wide world fading sweets forbid thee heinous crime o carve thy hours loves fair brow nor draw lines thine antique pen thy course untainted allow beautys pattern succeeding men yet thy worst old time despite thy wrong love shall verse ever live young
73 tokens: brass nor stone nor earth nor boundless sea sad mortality oersways power rage shall beauty hold plea whose action stronger flower o shall summers honey breath hold against wrackful siege battering days rocks impregnable stout nor gates steel strong time decays o fearful meditation alack shall times best jewel times chest lie hid strong hand hold swift foot back spoil beauty forbid o none unless miracle might black ink love still shine bright
Загрузите данные примера. sonnetsCounts.mat содержит матрицу подсчётов слов и соответствующую лексику предварительно обработанных версий сонетов Шекспира.
load sonnetsCounts.mat
size(counts)ans = 1×2
154 3092
Поместите модель LDA с 20 темами.
numTopics = 20; mdl = fitlda(counts,numTopics)
Initial topic assignments sampled in 0.039264 seconds. ===================================================================================== | Iteration | Time per | Relative | Training | Topic | Topic | | | iteration | change in | perplexity | concentration | concentration | | | (seconds) | log(L) | | | iterations | ===================================================================================== | 0 | 0.26 | | 1.159e+03 | 5.000 | 0 | | 1 | 0.14 | 5.4884e-02 | 8.028e+02 | 5.000 | 0 | | 2 | 0.11 | 4.7400e-03 | 7.778e+02 | 5.000 | 0 | | 3 | 0.10 | 3.4597e-03 | 7.602e+02 | 5.000 | 0 | | 4 | 0.13 | 3.4662e-03 | 7.430e+02 | 5.000 | 0 | | 5 | 0.03 | 2.9259e-03 | 7.288e+02 | 5.000 | 0 | | 6 | 0.10 | 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]
Вычислите вероятности журнала документов учебных документов. Укажите, чтобы нарисовать 500 образцов для каждого документа.
numSamples = 500; logProbabilities = logp(mdl,counts, ... 'NumSamples',numSamples);
Отображение вероятностей журнала документа в гистограмме.
figure histogram(logProbabilities) xlabel("Log Probability") ylabel("Frequency") title("Document Log-Probabilities")

Определите индексы трех документов с наименьшей логарифмической вероятностью.
[~,idx] = sort(logProbabilities); idx(1:3)
ans = 3×1
146
19
65
Сравните достоверность соответствия для двух моделей LDA, рассчитав недоумение из-за ограниченного набора тестовых документов.
Для воспроизведения результатов установите rng кому 'default'.
rng('default')Загрузите данные примера. Файл sonnetsPreprocessed.txt содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлечь текст из sonnetsPreprocessed.txtразделите текст на документы с новыми символами, а затем пометьте документы.
filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);Отложите 10% документов в случайном порядке для тестирования.
numDocuments = numel(documents);
cvp = cvpartition(numDocuments,'HoldOut',0.1);
documentsTrain = documents(cvp.training);
documentsTest = documents(cvp.test);Создайте модель пакета слов из учебных документов.
bag = bagOfWords(documentsTrain)
bag =
bagOfWords with properties:
Counts: [139x2909 double]
Vocabulary: [1x2909 string]
NumWords: 2909
NumDocuments: 139
Поместите модель LDA с 20 темами в модель сумки слов. Для подавления подробных выходных данных установите 'Verbose' в 0.
numTopics = 20;
mdl1 = fitlda(bag,numTopics,'Verbose',0);Просмотр информации о посадке модели.
mdl1.FitInfo
ans = struct with fields:
TerminationCode: 1
TerminationStatus: "Relative tolerance on log-likelihood satisfied."
NumIterations: 26
NegativeLogLikelihood: 5.6915e+04
Perplexity: 742.7118
Solver: "cgs"
History: [1x1 struct]
Вычислите недоумение набора тестов с удержанием.
[~,ppl1] = logp(mdl1,documentsTest)
ppl1 = 781.6078
Поместите модель LDA с 40 темами в модель сумки слов.
numTopics = 40;
mdl2 = fitlda(bag,numTopics,'Verbose',0);Просмотр информации о посадке модели.
mdl2.FitInfo
ans = struct with fields:
TerminationCode: 1
TerminationStatus: "Relative tolerance on log-likelihood satisfied."
NumIterations: 37
NegativeLogLikelihood: 5.4466e+04
Perplexity: 558.8685
Solver: "cgs"
History: [1x1 struct]
Вычислите недоумение набора тестов с удержанием.
[~,ppl2] = logp(mdl2,documentsTest)
ppl2 = 808.6602
Меньшее недоумение предполагает, что модель может быть лучше приспособлена к задержанным данным теста.
ldaMdl - Входная модель LDAldaModel объектВходная модель LDA, заданная как ldaModel объект.
documents - Исходные документыtokenizedDocument массив | строковый массив слов | массив ячеек векторов символовИсходные документы, указанные как tokenizedDocument массив, строковый массив слов или массив ячеек символьных векторов. Если documents не является tokenizedDocument массив, то это должен быть вектор строки, представляющий один документ, где каждый элемент является словом. Чтобы указать несколько документов, используйте tokenizedDocument массив.
bag - Входная модельbagOfWords объект | bagOfNgrams объектВходная модель сумки слов или сумки n граммов, указанная как bagOfWords объект или bagOfNgrams объект. Если bag является bagOfNgrams объект, то функция рассматривает каждый n-грамм как одно слово.
counts - Число частот словЧисло частот слов, указанное как матрица неотрицательных целых чисел. При указании 'DocumentsIn' быть 'rows', то значение counts(i,j) соответствует числу раз, когда j-е слово словаря появляется в i-ом документе. В противном случае значение counts(i,j) соответствует числу раз, когда i-е слово словаря появляется в j-ом документе.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'NumSamples',500 указывает, что необходимо нарисовать 500 образцов для каждого документа'DocumentsIn' - Ориентация документов'rows' (по умолчанию) | 'columns'Ориентация документов в матрице подсчета слов, определяемая как разделенная запятыми пара, состоящая из 'DocumentsIn' и одно из следующих:
'rows' - Ввод представляет собой матрицу подсчета слов со строками, соответствующими документам.
'columns' - Ввод представляет собой транспонированную матрицу подсчета слов со столбцами, соответствующими документам.
Этот параметр применяется только в том случае, если входные документы указаны в виде матрицы счетчиков слов.
Примечание
Если сориентировать матрицу подсчета слов так, чтобы документы соответствовали столбцам, и указать 'DocumentsIn','columns', то вы можете испытать значительное сокращение времени оптимизации-выполнения.
'NumSamples' - Количество образцов для отбораКоличество образцов для каждого документа, указанное как пара, разделенная запятыми, состоящая из 'NumSamples' и положительное целое число.
Пример: 'NumSamples',500
logProb - Логарифмические вероятностиЛогарифмические вероятности документов в модели LDA, возвращаемые в виде числового вектора.
ppl - НедоумениеНедоумение документов, вычисленное по логарифмическим вероятностям, возвращаемое как положительный скаляр.
logp использует итерируемый метод псевдосчетов, описанный в
[1] Валлах, Ханна М., Айн Мюррей, Руслан Салахутдинов и Давид Мимно. «Методы оценки тематических моделей». В Трудах 26-й ежегодной международной конференции по машинному обучению, стр. 1105-1112. ACM, 2009. Гарвард
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.