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) представляет подобие между ith и jдокументы th закодированы bag.

similarities = bm25Similarity(bag,queries) возвращает общие черты между документами, закодированными сумкой слов или мешком n модели bag граммов и документы заданы queries. Счет в similarities(i,j) представляет подобие между iдокумент th закодирован 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-грамму как отдельное слово.

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

  • tokenizedDocument массив

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

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

  • 1 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-by-N несимметричная матрица, где similarities(i,j) представляет подобие между documents(i) и documents(j), и N является количеством входных документов.

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

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

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

Советы

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

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

Алгоритмы

свернуть все

BM25

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

BM25(документ,запрос;D)=word запрос(IDF(word;D)Количество(word,документ)(k+1)Количество(word,документ)+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(word,D) обратная частота документа заданного слова, учитывая набор документов D.

BM25 +

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

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

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

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

BM11

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

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

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

BM15

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

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

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

Ссылки

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

[2] Барриос, Федерико, Федерико Лопес, Луис Аргерих и Роза Уокэнчозер. "Изменения Функции Подобия TextRank для Автоматизированного Резюмирования". arXiv предварительно распечатывают arXiv:1602.03606 (2016).

Введенный в R2020a