tfidf

Term Frequency-Inverse Document Frequency (tf-idf) матрица

Описание

пример

M = tfidf(bag) возвращает Term Frequency-Inverse Document Frequency (tf-idf) матрицу, основанную на модели bag-of-words или bag-of-gams bag.

пример

M = tfidf(bag,documents) возвращает tf-idf матрицу для документов в documents при помощи коэффициента обратной частоты документа (IDF), вычисленного из bag.

пример

M = tfidf(___,Name,Value) задает дополнительные опции, используя один или несколько аргументы пары "имя-значение".

Примеры

свернуть все

Создайте Term Frequency-Inverse Document Frequency (tf-idf) матрицу из модели мешка слов.

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

Создайте матрицу tf-idf. Просмотрите первые 10 строк и столбцов.

M = tfidf(bag);
full(M(1:10,1:10))
ans = 10×10

    3.6507    4.3438    2.7344    3.6507    4.3438    2.2644    3.2452    3.8918    2.4720    2.5520
         0         0         0         0         0    4.5287         0         0         0         0
         0         0         0         0         0         0         0         0         0    2.5520
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0    2.5520
         0         0    2.7344         0         0         0         0         0         0         0

Создайте Term Frequency-Inverse Document Frequency (tf-idf) матрицу из модели мешка слов и массива новых документов.

Загрузите данные примера. Файл sonnetsPreprocessed.txt содержит предварительно обработанные версии сонетов Шекспира. Файл содержит по одному сонету на линию со словами, разделенными пространством. Извлеките текст из sonnetsPreprocessed.txtразделите текст на документы в символах новой строки, а затем пометьте его токеном.

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

Создайте модель мешка слов из документов.

bag = bagOfWords(documents) 
bag = 
  bagOfWords with properties:

          Counts: [154x3092 double]
      Vocabulary: [1x3092 string]
        NumWords: 3092
    NumDocuments: 154

Создайте матрицу tf-idf для массива новых документов с помощью коэффициента частоты обратного документа (IDF), вычисленного из bag.

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."]);
M = tfidf(bag,newDocuments)
M = 
   (1,7)       3.2452
   (1,36)      1.2303
   (2,197)     3.4275
   (2,313)     3.6507
   (2,387)     0.6061
   (1,1205)    4.7958
   (1,1835)    3.6507
   (2,1917)    5.0370

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

Создайте матрицу tf-idf. Просмотрите первые 10 строк и столбцов.

M = tfidf(bag);
full(M(1:10,1:10))
ans = 10×10

    3.6507    4.3438    2.7344    3.6507    4.3438    2.2644    3.2452    3.8918    2.4720    2.5520
         0         0         0         0         0    4.5287         0         0         0         0
         0         0         0         0         0         0         0         0         0    2.5520
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0    2.5520
         0         0    2.7344         0         0         0         0         0         0         0

Можно изменить вклады, внесенные факторами TF и IDF в матрицу tf-idf, путем определения весовых формул TF и IDF.

Чтобы игнорировать, сколько раз слово появляется в документе, используйте двоичную опцию 'TFWeight'. Создайте tf-idf матрицу и установите 'TFWeight' на 'binary'. Просмотрите первые 10 строк и столбцов.

M = tfidf(bag,'TFWeight','binary');
full(M(1:10,1:10))
ans = 10×10

    3.6507    4.3438    2.7344    3.6507    4.3438    2.2644    3.2452    1.9459    2.4720    2.5520
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0         0         0         0         0    2.5520
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0    2.5520
         0         0    2.7344         0         0         0         0         0         0         0

Входные параметры

свернуть все

Входная модель мешка слов или мешка n-граммов, заданная как bagOfWords объект или bagOfNgrams объект.

Входные документы, заданные как tokenizedDocument массив, строковые массивы слов или массив ячеек из векторов символов. Если documents не является tokenizedDocument Массив это должно быть вектор-строка, представляющее один документ, где каждый элемент является словом. Чтобы задать несколько документов, используйте tokenizedDocument массив.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Normalized',true задает нормализацию счетчиков частот.

Метод для задания коэффициента частоты членов (TF), заданный как разделенная разделенными запятой парами, состоящая из 'TFWeight' и одно из следующих:

  • 'raw' - Установите коэффициент TF в неизмененное значение отсчета членов.

  • 'binary' - Установите коэффициент TF в матрицу таковых и нулей, где таковые указывают, находится ли термин в документе.

  • 'log' - Установите коэффициент TF равным 1 + log(bag.Counts).

Пример: 'TFWeight','binary'

Типы данных: char

Метод вычисления коэффициента частоты обратного документа, заданный как разделенная разделенными запятой парами, состоящая из 'IDFWeight' и одно из следующих:

  • 'textrank' - Используйте взвешивание IDF TextRank [1]. Для каждого термина установите коэффициент IDF

    • log((N-NT+0.5)/(NT+0.5)) если термин встречается более чем в половине документов, где N количество документов во входных данных и NT - количество документов во входных данных, содержащих каждый термин.

    • IDFCorrection*avgIDF если термин встречается в половине документов или f, где avgIDF - средний IDF всех лексем.

  • 'classic-bm25' - Для каждого термина установите коэффициент IDF равным log((N-NT+0.5)/(NT+0.5)).

  • 'normal' - Для каждого термина установите коэффициент IDF равным log(N/NT).

  • 'unary' - Для каждого условия установите коэффициент IDF равным 1.

  • 'smooth' - Для каждого термина установите коэффициент IDF равным log(1+N/NT).

  • 'max' - Для каждого термина установите коэффициент IDF равным log(1+max(NT)/NT).

  • 'probabilistic' - Для каждого термина установите коэффициент IDF равным log((N-NT)/NT).

где N количество документов во входных данных и NT - количество документов во входных данных, содержащих каждый термин.

Пример: 'IDFWeight','smooth'

Типы данных: char

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

Эта опция применяется только при 'IDFWeight' является 'textrank'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Опция для нормализации отсчётов терминов, заданная как разделенная разделенными запятой парами, состоящая из 'Normalized' и true или false. Если true, затем функция нормирует каждый вектор отсчётов членов в евклидовой норме.

Пример: 'Normalized',true

Типы данных: logical

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

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

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

Типы данных: char

Индикатор для принудительного возврата выхода в виде массива ячеек, заданный как разделенная запятыми пара, состоящая из 'ForceCellOutput' и true или false.

Типы данных: logical

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

свернуть все

Выводная терминологическая матрица частоты-обратной частоты документа, заданная как разреженная матрица или массив ячеек из разреженных матриц.

Если bag является некалярным массивом или 'ForceCellOutput' является true, затем функция возвращает выходы как массив ячеек разреженных матриц. Каждый элемент массива ячеек является матрицей tf-idf, вычисленной из соответствующего элемента bag.

Ссылки

[1] Барриос, Федерико, Федерико Лопес, Луис Аргерих и Роза Вахеншаузер. «Изменения функции подобия TextRank for Automated Summarization». arXiv preprint arXiv:1602.03606 (2016).

Введенный в R2017b