bm25Similarity

Документируйте сходство с BM25 алгоритмом

Описание

Использовать bm25Similarity для вычисления сходства документов.

По умолчанию эта функция вычисляет BM25 сходства. Чтобы вычислить BM11, BM15 или BM25 + сходства, используйте 'DocumentLengthScaling' и 'DocumentLengthCorrection' аргументы.

пример

similarities = bm25Similarity(documents) возвращает парное BM25 сходство между указанными документами. Счет в similarities(i,j) представляет собой сходство между documents(i) и documents(j).

пример

similarities = bm25Similarity(documents,queries) возвращает сходство между documents и queries. Счет в similarities(i,j) представляет собой сходство между documents(i) и queries(j).

пример

similarities = bm25Similarity(bag) возвращает сходство между документами, закодированными заданной моделью bag-of-words или bag-of-gams. Счет в similarities(i,j) представляет сходство между iи jПервые документы закодированы bag.

similarities = bm25Similarity(bag,queries) возвращает сходство между документами, закодированными моделью bag-of-words или bag-of-gams bag и документы, указанные в queries. Счет в similarities(i,j) представляет сходство между iвторой документ закодирован bag и queries(j).

пример

similarities = bm25Similarity(___,Name,Value) задает дополнительные опции, используя один или несколько аргументы пары "имя-значение". Например, чтобы использовать алгоритм BM25 +, установите 'DocumentLengthCorrection' опция ненулевого значения.

Примеры

свернуть все

Создайте массив токенизированных документов.

textData = [
    "the quick brown fox jumped over the lazy dog"
    "the fast brown fox jumped over the lazy dog"
    "the lazy dog sat there and did nothing"
    "the other animals sat there watching"];
documents = tokenizedDocument(textData)
documents = 
  4x1 tokenizedDocument:

    9 tokens: the quick brown fox jumped over the lazy dog
    9 tokens: the fast brown fox jumped over the lazy dog
    8 tokens: the lazy dog sat there and did nothing
    6 tokens: the other animals sat there watching

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

similarities = bm25Similarity(documents);

Визуализируйте сходство документов в тепловой карте.

figure
heatmap(similarities);
xlabel("Document")
ylabel("Document")
title("BM25 Similarities")

Figure contains an object of type heatmap. The chart of type heatmap has title BM25 Similarities.

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

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

str = [
    "the quick brown fox jumped over the lazy dog"
    "the fast fox jumped over the lazy dog"
    "the dog sat there and did nothing"
    "the other animals sat there watching"];
documents = tokenizedDocument(str)
documents = 
  4x1 tokenizedDocument:

    9 tokens: the quick brown fox jumped over the lazy dog
    8 tokens: the fast fox jumped over the lazy dog
    7 tokens: the dog sat there and did nothing
    6 tokens: the other animals sat there watching

Создайте массив документов запросов.

str = [
    "a brown fox leaped over the lazy dog"
    "another fox leaped over the dog"];

queries = tokenizedDocument(str)
queries = 
  2x1 tokenizedDocument:

    8 tokens: a brown fox leaped over the lazy dog
    6 tokens: another fox leaped over the dog

Вычислите сходство между входными документами и документами запросов с помощью bm25Similarity функция. Выходы являются разреженной матрицей. Счет в similarities(i,j) представляет собой сходство между documents(i) и queries(j).

similarities = bm25Similarity(documents,queries);

Визуализируйте сходство документов в тепловой карте.

figure
heatmap(similarities);
xlabel("Query Document")
ylabel("Input Document")
title("BM25 Similarities")

Figure contains an object of type heatmap. The chart of type heatmap has title BM25 Similarities.

В этом случае первый входной документ больше всего похож на первый документ запроса.

Создайте модель мешка слов из текстовых данных в sonnets.csv.

filename = "sonnets.csv";
tbl = readtable(filename,'TextType','string');
textData = tbl.Sonnet;
documents = tokenizedDocument(textData);
bag = bagOfWords(documents)
bag = 
  bagOfWords with properties:

          Counts: [154x3527 double]
      Vocabulary: [1x3527 string]
        NumWords: 3527
    NumDocuments: 154

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

similarities = bm25Similarity(bag);

Визуализируйте сходство между первыми пятью документами в тепловой карте.

figure
heatmap(similarities(1:5,1:5));
xlabel("Document")
ylabel("Document")
title("BM25 Similarities")

Figure contains an object of type heatmap. The chart of type heatmap has title BM25 Similarities.

Алгоритм BM25 + обращается к ограничению алгоритма BM25: компонент нормализации термина-частоты по длине документа не должным образом ограничен ниже. В результате этого ограничения длинные документы, которые не совпадают с термином запроса, часто могут быть оценены несправедливо, BM25 как имеющие сходное отношение к более коротким документам, которые не содержат термин запроса.

BM25 + решает это ограничение с помощью коэффициента коррекции длины документа (значение 'DocumentLengthScaling' Пара "имя-значение"). Этот фактор препятствует тому, чтобы алгоритм чрезмерно штрафовал длинные документы.

Создайте два массива токенизированных документов.

textData1 = [
    "the quick brown fox jumped over the lazy dog"
    "the fast fox jumped over the lazy dog"
    "the dog sat there and did nothing"
    "the other animals sat there watching"];
documents1 = tokenizedDocument(textData1)
documents1 = 
  4x1 tokenizedDocument:

    9 tokens: the quick brown fox jumped over the lazy dog
    8 tokens: the fast fox jumped over the lazy dog
    7 tokens: the dog sat there and did nothing
    6 tokens: the other animals sat there watching

textData2 = [
    "a brown fox leaped over the lazy dog"
    "another fox leaped over the dog"];
documents2 = tokenizedDocument(textData2)
documents2 = 
  2x1 tokenizedDocument:

    8 tokens: a brown fox leaped over the lazy dog
    6 tokens: another fox leaped over the dog

Чтобы вычислить сходство документов BM25 +, используйте bm25Similarity и установите 'DocumentLengthCorrection' опция ненулевого значения. В этом случае установите 'DocumentLengthCorrection' опция 1.

similarities = bm25Similarity(documents1,documents2,'DocumentLengthCorrection',1);

Визуализируйте сходство документов в тепловой карте.

figure
heatmap(similarities);
xlabel("Query")
ylabel("Document")
title("BM25+ Similarities")

Figure contains an object of type heatmap. The chart of type heatmap has title BM25+ Similarities.

Здесь, при сравнении с примером Подобие между документами, счета показывают больше подобия между входными документами и первым документом запроса.

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

свернуть все

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

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

Набор документов запроса, заданный как один из следующих:

  • A tokenizedDocument массив

  • A bagOfWords или bagOfNgrams объект

  • Строковый массив N 1 байт, представляющий один документ, где каждый элемент является словом

  • Массив ячеек N 1 байт из векторов символов, представляющий один документ, где каждый элемент является словом

Чтобы вычислить частоту терминов и обратную статистику частот документов, функция кодирует queries использование модели мешка слов. Модель, которую он использует, зависит от синтаксиса, с которым вы его вызываете. Если ваш синтаксис задает входной параметр documents, затем использует bagOfWords(documents). Если ваш синтаксис задает bag, затем использует bag.

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

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

Пример: bm25Similarity(documents,'TFScaling',1.5) возвращает попарное сходство для заданных документов и устанавливает коэффициент масштабирования маркера равным 1,5.

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

  • 'textrank' - Используйте взвешивание IDF TextRank [2]. Для каждого термина установите коэффициент 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 - количество документов во входных данных, содержащих каждый термин.

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

Эта опция соответствует значению, k в алгоритме BM25. Для получения дополнительной информации см. раздел BM25.

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

Масштабный коэффициент длины документа, заданный как разделенная разделенными запятой парами, состоящая из 'DocumentLengthScaling' и скаляром в области значений [0,1].

Эта опция соответствует значению, b в алгоритме BM25. Когда b=1, алгоритм BM25 эквивалентен BM11. Когда b=0, алгоритм BM25 эквивалентен BM15. Для получения дополнительной информации см. BM11, BM15 или BM25.

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

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

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

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

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

Эта опция соответствует значению δ в алгоритме BM25 +. Если коэффициент коррекции длины документа ненулевой, то bm25Similarity функция использует алгоритм BM25 +. В противном случае функция использует алгоритм BM25. Для получения дополнительной информации см. BM25 +.

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

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

свернуть все

BM25 счетов подобия, возвращенные как разреженная матрица:

  • Учитывая один массив токенизированных документов, similarities является N -by N несимметричной матрицей, где similarities(i,j) представляет собой сходство между documents(i) и documents(j), и N - количество входа документов.

  • Учитывая массив токенизированных документов и набор документов запросов, similarities является N1 -by- N2 матрицей, где similarities(i,j) представляет собой сходство между documents(i) и j1й документ запроса, и N1 и N2 представляет количество документов в documents и queries, соответственно.

  • Учитывая одну модель мешка слов или мешка n-граммов, similarities является bag.NumDocuments-by- bag.NumDocuments несимметричная матрица, где similarities(i,j) представляет сходство между iи jПервые документы закодированы bag.

  • Учитывая модели мешка слов или мешка n-граммов и набор документов запроса, similarities является bag.NumDocuments-by - N2 матрица, где similarities(i,j) представляет сходство между iвторой документ закодирован bag и jпервый документ в queries, и N2 соответствует количеству документов в queries.

Совет

  • Алгоритм BM25 агрегирует и использует информацию из всех документов входных данных через частоту терминов (TF) и частоту обратного документа (IDF) на основе опций. Это поведение означает, что одна и та же пара документов может привести к различным счетам BM25 подобия, когда функции заданы различные наборы документов.

  • Алгоритм BM25 может выводить различные счета при сравнении документов с собой. Это поведение связано с использованием весов IDF и длины документа в алгоритме BM25.

Алгоритмы

свернуть все

BM25

Учитывая документ из набора документов Dи документ запроса, счет BM25 задается как

BM25(документ,вопрос;D)=слово вопрос(IDF(слово;D)Граф(слово,документ)(k+1)Граф(слово,документ)+k(1b+b|document|n¯)),

где

  • Count(word,document) обозначает частоту word в document.

  • n¯ обозначает среднюю длину документа в D.

  • k обозначает термин «коэффициент масштабирования частоты» (значение 'TFScaling' Аргумент пары "имя-значение"). Этот фактор ослабляет влияние часто появляющихся терминов на BM25 счет.

  • b обозначает коэффициент масштабирования длины документа (значение 'DocumentLengthScaling' Аргумент пары "имя-значение"). Этот фактор управляет тем, как длина документа влияет на счет BM25. Когда b=1, алгоритм BM25 эквивалентен BM11. Когда b=0, алгоритм BM25 эквивалентен BM15.

  • IDF(слово,D) - обратная частота документа заданного слова, заданная для набора документов D.

BM25 +

Алгоритм BM25 + обращается к ограничению алгоритма BM25: компонент нормализации термина-частоты по длине документа не должным образом ограничен ниже. В результате этого ограничения длинные документы, которые не совпадают с термином запроса, часто могут быть оценены несправедливо, BM25 как имеющие сходное отношение к более коротким документам, которые не содержат термин запроса.

Алгоритм BM25 + аналогичен алгоритму BM25 с одним дополнительным параметром. Учитывая документ из набора документовD и документ запроса, счет BM25 + задается как

BM25+(документ,вопрос;D)=слово вопрос(IDF(слово;D)(Count(слово,документ)(k+1)Граф(слово,документ)+k(1b+b|document|n¯)+δ)),

где дополнительный параметр δ обозначает коэффициент коррекции длины документа (значение 'DocumentLengthScaling' Пара "имя-значение"). Этот фактор препятствует тому, чтобы алгоритм чрезмерно штрафовал длинные документы.

BM11

BM11 является частным случаем BM25 при b=1.

Учитывая документ из набора документов Dи документ запроса, счет BM11 задается как

BM11(документ,вопрос;D)=слово вопрос(IDF(слово;D)Граф(слово,документ)(k+1)Граф(слово,документ)+k(|document|n¯)).

BM15

BM15 является частным случаем BM25 при b=0.

Учитывая документ из набора документов Dи документ запроса, счет BM15 задается как

BM15(документ,вопрос;D)=слово вопрос(IDF(слово;D)Граф(слово,документ)(k+1)Граф(слово,документ)+k).

Ссылки

[1] Робертсон, Стивен и Уго Сарагоса. «Вероятностная среда релевантности: BM25 и за ее пределами». Основы и тренды ® в поиске информации 3, № 4 (2009): 333-389.

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

Введенный в R2020a