exponenta event banner

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) возвращает сходства между документами, закодированными указанной моделью пакета слов или пакета n-грамм. Оценка в similarities(i,j) представляет сходство между iи jдокументы, закодированные bag.

similarities = bm25Similarity(bag,queries) возвращает сходства между документами, закодированными с помощью модели мешка слов или мешка n-граммов 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 объект

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

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

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

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

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

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

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

  • 'textrank' - Используйте взвешивание TextRank IDF [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-на-N, где similarities(i,j) представляет сходство между documents(i) и documents(j)и N - количество входных документов.

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

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

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

Совет

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

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

Алгоритмы

свернуть все

BM25

При наличии документа из коллекции документов D и документа запроса BM25 балл присваивается

BM25 (документ, запрос; D)  =∑word∈ запрос (IDF (слово; D) Count (слово, документ) (k + 1) Count (слово, документ) + k (1 − b + b 'document' n ve)),

где

  • Count (слово, документ) обозначает частоту слова в документе.

  • 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)  =∑word∈ запрос (IDF (слово; D) (Count (слово, документ) (k + 1) Count (слово, документ) + k (1 b + b 'document' n)),

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

BM11

BM11 является частным случаем BM25, когда b = 1.

При наличии документа из коллекции документов D и документа запроса BM11 балл присваивается

BM11 (документ, запрос; D)  =∑word∈ запрос (IDF (слово; D) Count (слово, документ) (k + 1) Count (слово, документ) + k (| document 'n wet)).

BM15

BM15 является частным случаем BM25, когда b = 0.

При наличии документа из коллекции документов D и документа запроса BM15 балл присваивается

BM15 (документ, запрос; D)  =∑word∈ запрос (IDF (слово; D) Count (слово, документ) (k + 1) Count (слово, документ) + k).

Ссылки

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

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

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