Преобразование документов в пространство нижних размеров
указывает дополнительные параметры, использующие один или несколько аргументов пары имя-значение. Эти пары «имя-значение» применяются только в том случае, если входной моделью является dscores = transform(___,Name,Value)ldaModel объект.
Загрузите данные примера. Файл 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
Поместите модель LSA с 20 компонентами.
numCompnents = 20; mdl = fitlsa(bag,numCompnents)
mdl =
lsaModel with properties:
NumComponents: 20
ComponentWeights: [1x20 double]
DocumentScores: [154x20 double]
WordScores: [3092x20 double]
Vocabulary: [1x3092 string]
FeatureStrengthExponent: 2
Использовать transform преобразование первых 10 документов в семантическое пространство модели LSA.
dscores = transform(mdl,documents(1:10))
dscores = 10×20
5.6059 -1.8559 0.9286 -0.7086 -0.4652 0.8340 -0.6751 0.0611 -0.2268 1.9320 -0.7289 -1.0864 0.7131 -0.0571 -0.3401 0.0940 -0.4406 1.7507 -1.1534 0.1785
7.3069 -2.3578 1.8359 -2.3442 -1.5776 2.0310 -0.7948 1.3411 1.1700 1.8839 0.0883 0.4734 -1.1244 0.6795 1.3585 -0.0247 0.3627 -0.5414 -0.0272 -0.0114
7.1056 -2.3508 -2.8837 -1.0688 -0.3462 0.6962 -0.0334 -0.0472 -0.4916 0.6496 -1.1959 -1.0171 -0.4020 1.2953 -0.4583 0.5984 -0.3890 1.1780 0.6413 0.6575
8.6292 -3.0471 -0.8512 -0.4356 -0.3055 -0.4671 1.4219 -0.8454 0.8270 0.4122 2.2082 -1.1770 1.7775 -2.2344 -2.7813 1.4979 0.7486 -2.0593 0.6376 1.0721
1.0434 1.7490 0.8703 -2.2315 -1.1221 -0.2848 2.0522 -0.6975 -1.7191 -0.2852 0.8879 0.9950 -0.5555 0.8842 -0.0360 1.0050 0.4158 0.5061 0.9602 0.4672
6.8358 -2.0806 -3.3798 -1.0452 -0.2075 -2.0970 0.4477 0.2080 -0.9532 1.6203 0.6653 0.0036 1.0825 0.6396 -0.2154 -0.0794 0.7108 1.8007 -4.0326 -0.3872
2.3847 0.3923 -0.4323 -1.5340 0.4023 1.0396 1.0326 0.3776 -0.2101 -1.0944 -0.7513 -0.2894 0.4303 0.1864 0.4922 0.4844 0.5191 -0.2378 0.9528 0.4817
3.7925 -0.3941 -4.4610 -0.4930 0.4651 -0.3404 0.5493 0.1470 -0.5065 0.2566 0.3394 -1.1529 -0.0391 -0.8800 -0.4712 0.9672 0.5457 -0.3639 -0.3085 0.5637
4.6522 0.7188 -1.1787 -0.8996 0.3360 -0.4531 0.1935 0.3328 0.8640 -1.6679 -0.8056 -2.1993 0.1808 0.0163 -0.9520 -0.8982 0.6603 3.6451 1.2412 1.9621
8.8218 -0.8168 -2.5101 1.1197 -0.8673 1.2336 -0.0768 0.1943 0.7629 -0.1222 0.3786 1.1611 0.2326 0.3415 -0.3327 -0.3792 1.7554 0.2526 -2.1574 -0.0193
Чтобы воспроизвести результаты в этом примере, установите 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 = 5; mdl = fitlda(bag,numTopics)
Initial topic assignments sampled in 0.035563 seconds. ===================================================================================== | Iteration | Time per | Relative | Training | Topic | Topic | | | iteration | change in | perplexity | concentration | concentration | | | (seconds) | log(L) | | | iterations | ===================================================================================== | 0 | 0.00 | | 1.212e+03 | 1.250 | 0 | | 1 | 0.01 | 1.2300e-02 | 1.112e+03 | 1.250 | 0 | | 2 | 0.01 | 1.3254e-03 | 1.102e+03 | 1.250 | 0 | | 3 | 0.02 | 2.9402e-05 | 1.102e+03 | 1.250 | 0 | =====================================================================================
mdl =
ldaModel with properties:
NumTopics: 5
WordConcentration: 1
TopicConcentration: 1.2500
CorpusTopicProbabilities: [0.2000 0.2000 0.2000 0.2000 0.2000]
DocumentTopicProbabilities: [154x5 double]
TopicWordProbabilities: [3092x5 double]
Vocabulary: [1x3092 string]
TopicOrder: 'initial-fit-probability'
FitInfo: [1x1 struct]
Использовать transform преобразование документов в вектор вероятностей тематики. Эти смеси можно визуализировать с помощью сгруппированных гистограмм. Просмотрите смеси тем первых 10 документов.
topicMixtures = transform(mdl,documents(1:10)); figure barh(topicMixtures,'stacked') xlim([0 1]) title("Topic Mixtures") xlabel("Topic Probability") ylabel("Document") legend("Topic " + string(1:numTopics),'Location','northeastoutside')

Загрузите данные примера. sonnetsCounts.mat содержит матрицу подсчётов слов и соответствующую лексику предварительно обработанных версий сонетов Шекспира.
load sonnetsCounts.mat
size(counts)ans = 1×2
154 3092
Поместите модель LDA с 20 темами. Чтобы воспроизвести результаты в этом примере, установите rng кому 'default'.
rng('default')
numTopics = 20;
mdl = fitlda(counts,numTopics)Initial topic assignments sampled in 0.043574 seconds. ===================================================================================== | Iteration | Time per | Relative | Training | Topic | Topic | | | iteration | change in | perplexity | concentration | concentration | | | (seconds) | log(L) | | | iterations | ===================================================================================== | 0 | 0.07 | | 1.159e+03 | 5.000 | 0 | | 1 | 0.16 | 5.4884e-02 | 8.028e+02 | 5.000 | 0 | | 2 | 0.03 | 4.7400e-03 | 7.778e+02 | 5.000 | 0 | | 3 | 0.12 | 3.4597e-03 | 7.602e+02 | 5.000 | 0 | | 4 | 0.13 | 3.4662e-03 | 7.430e+02 | 5.000 | 0 | | 5 | 0.23 | 2.9259e-03 | 7.288e+02 | 5.000 | 0 | | 6 | 0.15 | 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]
Использовать transform преобразование документов в вектор вероятностей тематики.
topicMixtures = transform(mdl,counts(1:10,:))
topicMixtures = 10×20
0.0167 0.0035 0.1645 0.0977 0.0433 0.0833 0.0987 0.0033 0.0299 0.0234 0.0033 0.0345 0.0235 0.0958 0.0667 0.0167 0.0300 0.0519 0.0833 0.0300
0.0711 0.0544 0.0116 0.0044 0.0033 0.0033 0.0431 0.0053 0.0145 0.0421 0.0971 0.0033 0.0040 0.1632 0.1784 0.0937 0.0683 0.0398 0.0954 0.0037
0.0293 0.0482 0.1078 0.0322 0.0036 0.0036 0.0464 0.0036 0.0064 0.0612 0.0036 0.0176 0.0036 0.0464 0.0906 0.1169 0.0888 0.1115 0.1180 0.0607
0.0055 0.0962 0.2403 0.0033 0.0296 0.1613 0.0164 0.0955 0.0163 0.0045 0.0172 0.0033 0.0415 0.0404 0.0342 0.0176 0.0417 0.0642 0.0033 0.0676
0.0341 0.0224 0.0341 0.0645 0.0948 0.0038 0.0189 0.1099 0.0187 0.0560 0.1045 0.0356 0.0668 0.1196 0.0038 0.0931 0.0493 0.0038 0.0038 0.0626
0.0445 0.0035 0.1167 0.0034 0.0446 0.0583 0.1268 0.0169 0.0034 0.1135 0.0034 0.0034 0.0047 0.0993 0.0909 0.0582 0.0308 0.0887 0.0856 0.0034
0.1720 0.0764 0.0090 0.0180 0.0325 0.1213 0.0036 0.0036 0.0505 0.0472 0.0348 0.0477 0.0039 0.0038 0.0122 0.0041 0.0036 0.1605 0.1487 0.0465
0.0043 0.0033 0.1248 0.0033 0.0299 0.0033 0.0690 0.1699 0.0695 0.0982 0.0033 0.0039 0.0620 0.0833 0.0040 0.0700 0.0033 0.1479 0.0033 0.0433
0.0412 0.0387 0.0555 0.0165 0.0166 0.0433 0.0033 0.0038 0.0048 0.0033 0.0473 0.0474 0.1290 0.1107 0.0089 0.0112 0.0167 0.1555 0.2423 0.0040
0.0362 0.0035 0.1117 0.0304 0.0034 0.1248 0.0439 0.0340 0.0168 0.0714 0.0034 0.0214 0.0056 0.0449 0.1438 0.0036 0.0290 0.1437 0.0980 0.0304
lsaMdl - Входная модель LSAlsaModel объектВходная модель LSA, заданная как lsaModel объект.
ldaMdl - Входная модель LDAldaModel объектВходная модель LDA, заданная как ldaModel объект.
documents - Исходные документыtokenizedDocument массив | строковый массив слов | массив ячеек векторов символовИсходные документы, указанные как tokenizedDocument массив, строковый массив слов или массив ячеек символьных векторов. Если documents является tokenizedDocument, тогда это должен быть вектор-столбец. Если documents является строковым массивом или массивом ячеек символьных векторов, то он должен быть строкой слов одного документа.
Совет
Чтобы убедиться, что функция не отбрасывает полезную информацию, необходимо сначала предварительно обработать входные документы, используя те же шаги, что и для предварительной обработки документов, используемых для обучения модели.
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.
'IterationLimit',200 устанавливает предел итерации равным 200.Примечание
Эти пары «имя-значение» применяются только в том случае, если входной моделью является ldaModel объект.
'DocumentsIn' - Ориентация документов'rows' (по умолчанию) | 'columns'Ориентация документов в матрице подсчета слов, определяемая как разделенная запятыми пара, состоящая из 'DocumentsIn' и одно из следующих:
'rows' - Ввод представляет собой матрицу подсчета слов со строками, соответствующими документам.
'columns' - Ввод представляет собой транспонированную матрицу подсчета слов со столбцами, соответствующими документам.
Этот параметр применяется только в том случае, если входные документы указаны в виде матрицы счетчиков слов.
Примечание
Если сориентировать матрицу подсчета слов так, чтобы документы соответствовали столбцам, и указать 'DocumentsIn','columns', то вы можете испытать значительное сокращение времени оптимизации-выполнения.
'IterationLimit' - Максимальное число итераций100 (по умолчанию) | положительное целое числоМаксимальное количество итераций, указанное как пара, разделенная запятыми, состоящая из 'IterationLimit' и положительное целое число.
Пример: 'IterationLimit',200
'LogLikelihoodTolerance' - Относительный допуск по логарифмическому правдоподобию0.0001 (по умолчанию) | положительный скалярОтносительный допуск на log-правдоподобие, указанный как разделенная запятыми пара, состоящая из 'LogLikelihoodTolerance' и положительный скаляр. Оптимизация завершается при достижении этого допуска.
Пример: 'LogLikelihoodTolerance',0.001
dscores - Баллы выходного документаБаллы выходного документа, возвращаемые в виде матрицы векторов баллов.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.