transform

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

Описание

пример

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 модели 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 объект.

Ориентация документов в матрице count слов, заданная как разделенная разделенными запятой парами, состоящая из 'DocumentsIn' и одно из следующих:

  • 'rows' - Вход является матрицей счетчиков слов со строками, соответствующими документам.

  • 'columns' - Вход является транспонированной матрицей счетчиков слов со столбцами, соответствующими документам.

Эта опция применяется только в том случае, если документы входа заданы как матрица счетчиков слов.

Примечание

Если вы ориентируете матрицу count слов так, чтобы документы соответствовали столбцам и задавали 'DocumentsIn','columns', тогда вы можете испытать значительное сокращение времени оптимизации-выполнения.

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

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

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

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

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

свернуть все

Выход счетов документа, возвращенный как матрица векторов счета.

Введенный в R2017b