Научная статья на тему 'СРАВНЕНИЕ ВРЕМЕННОЙ СЛОЖНОСТИ АЛГОРИТМОВ ПОСТРОЕНИЯ ОБРАТНОГО ИНДЕКСА'

СРАВНЕНИЕ ВРЕМЕННОЙ СЛОЖНОСТИ АЛГОРИТМОВ ПОСТРОЕНИЯ ОБРАТНОГО ИНДЕКСА Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
27
7
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ИНФОРМАЦИОННЫЙ ПОИСК / ОБРАТНЫЙ ИНДЕКС / ВРЕМЕННАЯ СЛОЖНОСТЬ АЛГОРИТМА

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Баранкова И.А.

В статье описываются различные алгоритмы построения обратного индекса и производится сравнение их эффективности с помощью оценки их временной сложности. Полученные оценки позволяют сделать вывод о преимуществах использования каждого из приведенных алгоритмов.This article is about algorithm of the constructed of the reverse index. Principles of operation of different algorithm are described. Author analyzed three algorithms of the constructing of the reverse index and compared their time complexity.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «СРАВНЕНИЕ ВРЕМЕННОЙ СЛОЖНОСТИ АЛГОРИТМОВ ПОСТРОЕНИЯ ОБРАТНОГО ИНДЕКСА»

УДК 004.91

Баранкова И.А. студент магистратуры, 2 курс кафедра «Системы обработки информации и управления» факультет «Информатика и системы управления»

МГТУ им. Н.Э. Баумана Россия, г. Москва

СРАВНЕНИЕ ВРЕМЕННОЙ СЛОЖНОСТИ АЛГОРИТМОВ ПОСТРОЕНИЯ ОБРАТНОГО ИНДЕКСА

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

Ключевые слова: информационный поиск, обратный индекс, временная сложность алгоритма

COMPARISON OF THE TIME COMPLEXITY OF THE

ALGORITHMS OF THE BUILDING OF THE REVERSE INDEX

This article is about algorithm of the constructed of the reverse index. Principles of operation of different algorithm are described. Author analyzed three algorithms of the constructing of the reverse index and compared their time complexity.

Keywords: time complexity, information retrieval, inverted index.

Введение

Обратный индекс необходим при решении задачи полнотекстового поиска в информационных и поисковых системах веб. При полнотекстовом поиске определяется список документов, соответствующих запросу по содержимому документа, а не по набору его атрибутов (например, автор, тема, название) или другой метаинформации. Текст документов при этом имеет естественную структуру (может иметь заголовок, абзацы, главы), и его содержимое не подвергается дополнительной обработке с целью приведения к какому-либо виду. Процесс построения обратного индекса часто называют индексированием, а машину, реализующую тот или иной алгоритм построения индекса — индексатором.

При создании информационно-поисковых систем размеры коллекций текстов, в которых осуществляется поиск, имеют большой размер. Поиск по шаблону, задаваемому с помощью регулярных выражений, в таком случае становится неэффективным в силу слишком большого времени поиска и пословного перебора данных документа. Чтобы избежать просмотра текста документа последовательно при выполнении каждого нового информационного запроса, по необходимой коллекции документов заранее строится обратный индекс. Каждая запись индекса содержит термин документа и список документов коллекции, в которых этот термин присутствует (в качестве маркера документа часто используют

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

Реализация алгоритмов построения обратного индекса во многом зависит от аппаратных возможностей индексатора. Рассмотрим параметры аппаратных систем, имеющих отношение к индексированию.

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

При размещении части индекса на диске следует записывать данные индекса в виде массива, то есть последовательно в смежные ячейки памяти, для того, чтобы минимизировать время позиционирования головки на диске. Считывание последовательности из 100 идентификаторов документов некоторого термина, хранимых в массиве, потребует одной операции позиционирования. Если же список идентификаторов документов термина хранится в виде односвязного списка, для его чтения, поскольку все 100 идентификаторов хранятся разрозненно, потребуется 100 операций позиционирования, что значительно увеличит время считывания данных с диска.

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

Блочное индексирование, использующее сортировку

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

Рассмотрим этапы построения блочного индекса. Сначала текст документа разбивается на абзацы, предложения, выделяются отдельные слова. Этот процесс также называют токенизацией текста. Ей предшествует этап предобработки текста: определяется формат документа, кодировка, его язык либо фрагменты документа, написанные на разных языках. Как только текст декодирован и определен его язык, можно разбирать его структуру, выделять абзацы и предложения, отдельные слова.

Для выделения отдельных слов и границ предложений зачастую используют методы машинного обучения, обученные на размеченных

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

После выделения отдельных слов документа имеем список: «термин» -«идентификатор документа», иными словами, каждый термин документа помещаем с словарь в качестве ключа, значением выступает id документа. Далее сортируем словарь по терминам. Идентификаторы документов совпадающих терминов заносятся в обратный индекс и вычисляются статистические характеристики: документная частота (DF) и частота термина в документе (TF). Если коллекция документов небольшая, все эти вычисления можно выполнять в оперативной памяти.

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

Если доступной оперативной памяти недостаточно, то используются алгоритмы внешней сортировки, то есть алгоритмы, хранящие на диске списки документов термина. Одним из таких алгоритмов является алгоритм блочного индексирования.

Алгоритм блочного сегментирования разбивает коллекцию на равные части, для каждой части сортирует пары «термин» - «идентификатор документа» в оперативной памяти, причем для сокращения объема заменяет термин его идентификатором. Далее отсортированные части, которые являются промежуточными частями индекса, сохраняет на диске. Все отсортированные части затем объединяются в общий индекс, то есть осуществляется слияние всех частей индекса одновременно. Части организуются в блоки, каждый из которых имеет фиксированный размер пар «термин» - «документ». Как только блок заполнен и отсортирован, результат сортировки записывается на диск.

Временная сложность блочного алгоритма сортировки: ©(Г \о%Г), где Т — число пар «термин» - «идентификатор документа», поскольку ключевым этапом является сортировка, а количество сортируемых документов ограничено Т.

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

Если термин ранее не встречался в словаре, он добавляется в него и

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

Временная сложность алгоритма однопроходного индексирования 0(7), поскольку не используется сортировка и вся сложность составления индекса определяется только размером коллекции.

Алгоритм индексирования с помощью слияния Алгоритм индексации с помощью слияния - алгоритм, в котором обратный список создается при помощи поиска в хэш -таблице. Метод не поддерживает никаких глобальных значений структур, в частности, нет необходимости в глобальных идентификаторах терминов документов. Если коллекция индексируемых документов невелика, тогда алгоритм индексации с помощью слияния имеет ту же оценку временной сложности, что и алгоритм индексации на основе слияния, то есть 0(7 logT). Но если индексируемых данных слишком много, то алгоритм динамически разделяет на блоки коллекцию документов. Индекс начинает создаваться в оперативной памяти. Если память в какой-либо момент исчерпана или достигнут некоторый заданный порог использования оперативной памяти, создается обратный индекс на диске, путем передачи индексируемых данных на диск, текущий индекс удаляется из памяти и на индексирование поступает новый блок. Так алгоритм работает, пока не будут проиндексированы все части коллекции. Поэтому алгоритм имеет временную сложность 0(7).

В результате работы алгоритма имеем последовательность обратных индексов. Каждый из них представляет собой некоторую часть коллекции, называемый индексным разделом, далее они объединяются. Списки документов термина в каждом индексном разделе часто записаны в сжатом виде. Записанные на диск индексные разделы не зависят друг от друга.

Алгоритм имеет некоторый предел масштабирования. После объединения индексных разделов, для каждого из них необходим буфер для предварительного чтения достаточно большого объема. С его помощью можно сохранить число поисков на диске (переходом между разделами) небольшим. Размер такого буфера имеет верхнюю границу Min, где М -доступная память n - число необходимых разделов. Если n становится слишком большим, слияние производится медленно.

Сравнение временной сложности Чтобы определить, в какой ситуации нужно использовать один из возможных алгоритмов построения обратного индекса для набора текстовых документов, сравним временную сложность приведенных алгоритмов.

Результаты сравнения приведены в табл. 1.

Главными характеристиками текстового набора является его объем V и число обрабатываемых лексем Т, поэтому сложность алгоритмов стоит оценивать для двух случаев: если объем текстового набора меньше или больше объема оперативной памяти компьютера М, который осуществляет индексирование.

Таблица 1. Сравнение временной сложности алгоритмов

Название алгоритма Оценка сложности

V < M V >M

Индексирование, использующее сортировку 0(7 logT) 0(7 logT)

Однопроходное индексирование 0(7) 0(7)

Алгоритм индексации с помощью слияния 0(7 logT) 0(7)

Можно сделать вывод о том, что индексирование, использующее сортировку, лучше применять, если объем текстовых данных не превышает нескольких гигабайт. Если объем слишком велик, следует использовать алгоритм индексации с помощью слияния.

Заключение

Обратный индекс как правило имеет достаточно большой размер, поэтому не может быть размещен в оперативной памяти полностью. Решением этой проблемы является разделение обратного индекса: в память записывают только словарь (список лемм или начальных форм слова), а остальную часть индекса — списки документов, соответствующие леммам, записывают на диск.

Если оперативная память имеет недостаточный объем, чтобы сформировать в ней индекс целиком, то следует использовать алгоритм индексации с помощью слияния. В ходе работы этого алгоритма коллекция текстов разбивается на части (подколлекции) динамически по мере использования и заполнения оперативной памяти. Если проиндексирована каждая часть исходной коллекции, обратные индексы для отдельных частей соединяются с помощью слияния. Производительность такого алгоритма зависит линейно от объема текстовой коллекции данных.

Использованные источники:

1. Лукашевич Н.В. Тезаурусы в задачах информационного поиска. М.: Изд-во МГУ, 2011.

2. Захаров В.П. Информационные системы (документальный поиск): учебное пособие. СПб.: Изд-во СПбГУ, 2002.

3. Расковалов Д. Информационный поиск изнутри. Курс лекций в Computer Science Club при ПОМИ РАН. СПб., 2012. Режим доступа: https://www.lektorium.tv.course/22855, дата обращения 17.02.17

4. Маннинг К.Д.. Рагхаван П., Шютце Х. Введение в информационный поиск. М.: Вильямс, 2011.

i Надоели баннеры? Вы всегда можете отключить рекламу.