exponenta event banner

преобразовать

Преобразование документов в пространство нижних размеров

Описание

пример

dscores = transform(lsaMdl,documents) преобразование документов в семантическое пространство модели латентного семантического анализа (LSA) lsaMdl.

dscores = transform(lsaMdl,bag) преобразует документы, представленные моделью мешка слов или мешка n грамм bag в семантическое пространство модели LSA lsaMdl.

dscores = transform(lsaMdl,counts) преобразует документы, представленные матрицей подсчета слов, в семантическое пространство модели LSA lsaMdl.

пример

dscores = transform(ldaMdl,documents) преобразует документы в латентное тематическое вероятностное пространство распределения Дирихле (LDA) модели LDA ldaMdl. Строки dscores являются тематическим смешанным представлением документов.

dscores = transform(ldaMdl,bag) преобразует документы, представленные моделью мешка слов или мешка n грамм bag в тематическое вероятностное пространство LDA модели LDA ldaMdl.

пример

dscores = transform(ldaMdl,counts) преобразует документы, представленные матрицей подсчета слов, в тематическое вероятностное пространство LDA модели LDA ldaMdl.

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')

Figure contains an axes. The axes with title Topic Mixtures contains 5 objects of type bar. These objects represent Topic 1, Topic 2, Topic 3, Topic 4, Topic 5.

Загрузите данные примера. 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

Входные аргументы

свернуть все

Входная модель LSA, заданная как lsaModel объект.

Входная модель LDA, заданная как ldaModel объект.

Исходные документы, указанные как tokenizedDocument массив, строковый массив слов или массив ячеек символьных векторов. Если documents является tokenizedDocument, тогда это должен быть вектор-столбец. Если documents является строковым массивом или массивом ячеек символьных векторов, то он должен быть строкой слов одного документа.

Совет

Чтобы убедиться, что функция не отбрасывает полезную информацию, необходимо сначала предварительно обработать входные документы, используя те же шаги, что и для предварительной обработки документов, используемых для обучения модели.

Входная модель сумки слов или сумки n граммов, указанная как bagOfWords объект или bagOfNgrams объект. Если bag является bagOfNgrams объект, то функция рассматривает каждый n-грамм как одно слово.

Число частот слов, указанное как матрица неотрицательных целых чисел. При указании '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','columns', то вы можете испытать значительное сокращение времени оптимизации-выполнения.

Максимальное количество итераций, указанное как пара, разделенная запятыми, состоящая из 'IterationLimit' и положительное целое число.

Пример: 'IterationLimit',200

Относительный допуск на log-правдоподобие, указанный как разделенная запятыми пара, состоящая из 'LogLikelihoodTolerance' и положительный скаляр. Оптимизация завершается при достижении этого допуска.

Пример: 'LogLikelihoodTolerance',0.001

Выходные аргументы

свернуть все

Баллы выходного документа, возвращаемые в виде матрицы векторов баллов.

Представлен в R2017b