Информационный поиск. Инвертированный индекс....

16
Сибирский государственный университет телекоммуникаций и информатики КУРСОВОЙ ПРОЕКТ по дисциплине «Структуры и алгоритмы обработки данных» Самойлов Денис Игоревич студент группы ИУ-323 Новосибирск - 2014 Поисковые системы. Инвертированный индекс. Обработка булевых запросов.

Upload: denis-samoylov

Post on 17-Jul-2015

453 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Сибирский государственный университет телекоммуникаций и информатики

КУРСОВОЙ ПРОЕКТ по дисциплине

«Структуры и алгоритмы обработки данных»

Самойлов Денис Игоревич

студент группы ИУ-323

Новосибирск - 2014

Поисковые системы. Инвертированный индекс.

Обработка булевых запросов.

Page 2: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Информационный поиск

Информационный поиск (Information Retrieval) – это процесс поиска в большой коллекции некоторого неструктурированного материала, удовлетворяющего информационные потребности

Коллекция – группа документов по которым осуществляется поиск

Информационная потребность (information need) – это тема о которой пользователь хочет знать больше

Релевантность (relevant) – документ называется релевантным, если содержит информацию, удовлетворяющую информационную потребность пользователя

Page 3: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Булева модель поиска

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

В рамках этой модели документ рассматривается просто как множество слов (терминов)

Плюсы: o простота, способность работать с большими объемами

информации o высокая скорость выполнения поисковых запросов o точна, документ либо удовлетворяет запросу либо нет

Минусы: o крайняя жесткость (отсутствие морфологического анализа) o отсутствие ранжирования

Page 4: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Практические применения:

Sphinx (англ. SQL Phrase Index) – система полнотекстового поиска

oпо технологии SphinxSE осуществляется поиск на блоге Хабрахабр, проекте Викимапия и др.

mnoGoSearch - является поисковым движком, использующим SQL, и предназначенным для организации поиска на одном или многих веб-серверах

Булева модель поиска

Page 5: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Матрица «термин-документ»

Индексирование (indexing) – составление индекса документа, для избегания последовательного просмотра текста при выполнении каждого запроса

Матрица инцидентности «термин – документ» (term-document incidence matrix) - запись в которой указано, содержит ли данный документ конкретное слово

Элемент матрицы (t, d) равен 1, если документ из столбца d содержит слово из строки t, и 0, если не содержит.

Page 6: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Вид запроса: tree AND near

Информация о наличии слов в соответствующих документах, берется из матрицы

Выполняется поразрядная операция «AND»

10101 AND 10111 = 10101 – соответственно в первом, третьем и пятом документе содержатся оба этих слова

Doc1 Doc2 Doc3 Doc4 Doc5

tree near

1 0 1 0 1

1 0 1 1 1

Цель: найти документы содержащие слова tree и near

AND

Обработка булевых запросов

Page 7: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Инвертированный индекс

В подобных документах может оказаться до 500 000

разных слов

500 000 Х 1М = 2ТБ – слишком много чтобы

поместиться в памяти

В данном случае невозможно создать матрицу

наивным способом. Матрица такого размера

содержит полтриллиона нулей и единиц

Как минимум 99.8% ячеек будут содержать нули

Требуется произвести поиск в 1 миллионе документов, каждый из которых включает в себя по 1000 слов

Page 8: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Формирование инвертированного индекса

Эта идея является основной по отношению к концепции информационного поиска – инвертированному индексу

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

Решение: хранить в памяти только единицы

словарь

Для организации словарей (инвертированного индекса) может использоваться B+ -дерево

Page 9: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

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

Этапы индексирования: Собираем документы подлежащие индексации

Размечается текст, превращая каждый документ в список лексем (tokens) Проводится предварительная лингвистическая обработка Создается список нормализованных лексем, представляющих собой

индексируемые термины

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

Формирование инвертированного индекса

Page 10: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Обработка булевых запросов Цель: обработать запрос по инвертированному индексу

Вид запроса: tree AND turn

o Ищем термин tree в словаре, находим его список словопозиций

o Ищем термин turn в словаре, находим его список словопозиций

o Находим пересечение этих списков

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

Page 11: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Алгоритм пересечения списков словопозиций

function Intersect(list1, list2)

while list1 != NULL AND list2 != NULL do

if list1(docID) = list2(docID) then

AddToResult(result, list1(docID))

/* продвигаем оба списка */

list1 = list1 + 1

list2 = list2 + 1

else

/* продвигаем список с меньшим docID */

if list1(docID) < list2(docID) then

list1 = list1 + 1

else

list2 = list2 + 1

return result

end function

Page 12: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Алгоритм пересечения списков словопозиций

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

Сохраняем указатели на два списка и проходим по этим спискам одновременно за время, линейно зависящее от количества словопозиций в списках

На каждом этапе мы сравниваем идентификаторы документов, на которые указывают оба указателя. Если они совпадают, то мы помещаем идентификатор документа в список результатов, а затем продвигаем оба указателя вперед

В противном случае мы продвигаем вперед только указатель, соответствующий списку с меньшим идентификатором

сравниваем

Элементы списка – docID, отсортированные по возрастанию

Page 13: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Алгоритм пересечения списков словопозиций

4 < 14 => продвигаем указатель второго списка

14 = 14 => продвигаем оба указателя, добавляем docID в результирующий список

Результат:

18 < 25 => продвигаем указатель второго списка

Результат:

Page 14: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Алгоритм пересечения списков словопозиций

Результат:

Результат:

25 = 25 => продвигаем оба указателя, добавляем docID в результирующий список

38 = 38 => продвигаем оба указателя, добавляем docID в результирующий список

Первый список закончился - это является условием завершения алгоритма

Результат:

Page 15: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Алгоритм пересечения списков словопозиций

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

Если длины списков словопозиций равны х и у, то пересечение осуществляется за O(х + у) операций. С формальной точки зрения, сложность обработки запроса равна Θ(N), где N—количество документов в коллекции

Page 16: Информационный поиск. Инвертированный индекс. Обработка булевых запросов

Литература

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

2. Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К. Алгоритмы: построение и анализ. – 3-е изд. – М.: Вильямс, 2013. – 1328 с.

3. Д. Э. Кнут: Искусство Программирования. Том 3 Сортировка и Поиск . – М.: Вильямс, 2012. – 824с.

4. www.mkurnosov.net/teaching