Информационный поиск. Инвертированный индекс....
TRANSCRIPT
![Page 1: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/1.jpg)
Сибирский государственный университет телекоммуникаций и информатики
КУРСОВОЙ ПРОЕКТ по дисциплине
«Структуры и алгоритмы обработки данных»
Самойлов Денис Игоревич
студент группы ИУ-323
Новосибирск - 2014
Поисковые системы. Инвертированный индекс.
Обработка булевых запросов.
![Page 2: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/2.jpg)
Информационный поиск
Информационный поиск (Information Retrieval) – это процесс поиска в большой коллекции некоторого неструктурированного материала, удовлетворяющего информационные потребности
Коллекция – группа документов по которым осуществляется поиск
Информационная потребность (information need) – это тема о которой пользователь хочет знать больше
Релевантность (relevant) – документ называется релевантным, если содержит информацию, удовлетворяющую информационную потребность пользователя
![Page 3: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/3.jpg)
Булева модель поиска
Булева модель поиска - это модель информационного поиска, в ходе которого можно обрабатывать любой запрос имеющий вид булева выражения
В рамках этой модели документ рассматривается просто как множество слов (терминов)
Плюсы: o простота, способность работать с большими объемами
информации o высокая скорость выполнения поисковых запросов o точна, документ либо удовлетворяет запросу либо нет
Минусы: o крайняя жесткость (отсутствие морфологического анализа) o отсутствие ранжирования
![Page 4: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/4.jpg)
Практические применения:
Sphinx (англ. SQL Phrase Index) – система полнотекстового поиска
oпо технологии SphinxSE осуществляется поиск на блоге Хабрахабр, проекте Викимапия и др.
mnoGoSearch - является поисковым движком, использующим SQL, и предназначенным для организации поиска на одном или многих веб-серверах
Булева модель поиска
![Page 5: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/5.jpg)
Матрица «термин-документ»
Индексирование (indexing) – составление индекса документа, для избегания последовательного просмотра текста при выполнении каждого запроса
Матрица инцидентности «термин – документ» (term-document incidence matrix) - запись в которой указано, содержит ли данный документ конкретное слово
Элемент матрицы (t, d) равен 1, если документ из столбца d содержит слово из строки t, и 0, если не содержит.
![Page 6: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/6.jpg)
Вид запроса: 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: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/7.jpg)
Инвертированный индекс
В подобных документах может оказаться до 500 000
разных слов
500 000 Х 1М = 2ТБ – слишком много чтобы
поместиться в памяти
В данном случае невозможно создать матрицу
наивным способом. Матрица такого размера
содержит полтриллиона нулей и единиц
Как минимум 99.8% ячеек будут содержать нули
Требуется произвести поиск в 1 миллионе документов, каждый из которых включает в себя по 1000 слов
![Page 8: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/8.jpg)
Формирование инвертированного индекса
Эта идея является основной по отношению к концепции информационного поиска – инвертированному индексу
Для формирования инвертированного индекса необходимо добавить каждый термин в словарь, затем для каждого термина создать список, в котором указать документы, содержащие этот термин
Решение: хранить в памяти только единицы
словарь
Для организации словарей (инвертированного индекса) может использоваться B+ -дерево
![Page 9: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/9.jpg)
Чтобы получить выигрыш в скорости поиска, необходимо построить инвертированный индекс заранее
Этапы индексирования: Собираем документы подлежащие индексации
Размечается текст, превращая каждый документ в список лексем (tokens) Проводится предварительная лингвистическая обработка Создается список нормализованных лексем, представляющих собой
индексируемые термины
Индексируются документы, в которых встречается термин, создавая инвертированный индекс, состоящий из терминов и списков словопозиций
Формирование инвертированного индекса
![Page 10: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/10.jpg)
Обработка булевых запросов Цель: обработать запрос по инвертированному индексу
Вид запроса: tree AND turn
o Ищем термин tree в словаре, находим его список словопозиций
o Ищем термин turn в словаре, находим его список словопозиций
o Находим пересечение этих списков
Операция пересечения (intersection) является наиболее важной. Для того, чтобы быстро найти документы, содержащие оба термина, необходимо обеспечить эффективное пересечение их списков
![Page 11: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/11.jpg)
Алгоритм пересечения списков словопозиций
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: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/12.jpg)
Алгоритм пересечения списков словопозиций
Простой и эффективный метод пересечения списков словопозиций с помощью алгоритма слияния
Сохраняем указатели на два списка и проходим по этим спискам одновременно за время, линейно зависящее от количества словопозиций в списках
На каждом этапе мы сравниваем идентификаторы документов, на которые указывают оба указателя. Если они совпадают, то мы помещаем идентификатор документа в список результатов, а затем продвигаем оба указателя вперед
В противном случае мы продвигаем вперед только указатель, соответствующий списку с меньшим идентификатором
сравниваем
Элементы списка – docID, отсортированные по возрастанию
![Page 13: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/13.jpg)
Алгоритм пересечения списков словопозиций
4 < 14 => продвигаем указатель второго списка
14 = 14 => продвигаем оба указателя, добавляем docID в результирующий список
Результат:
18 < 25 => продвигаем указатель второго списка
Результат:
![Page 14: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/14.jpg)
Алгоритм пересечения списков словопозиций
Результат:
Результат:
25 = 25 => продвигаем оба указателя, добавляем docID в результирующий список
38 = 38 => продвигаем оба указателя, добавляем docID в результирующий список
Первый список закончился - это является условием завершения алгоритма
Результат:
![Page 15: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/15.jpg)
Алгоритм пересечения списков словопозиций
Если обработать нужно более чем два термина, то следует выбрать тот, у которого список словопозиций меньше
Если длины списков словопозиций равны х и у, то пересечение осуществляется за O(х + у) операций. С формальной точки зрения, сложность обработки запроса равна Θ(N), где N—количество документов в коллекции
![Page 16: Информационный поиск. Инвертированный индекс. Обработка булевых запросов](https://reader033.vdocuments.pub/reader033/viewer/2022052301/55a8dd951a28ab280d8b465e/html5/thumbnails/16.jpg)
Литература
1. Маннинг К., Рагхаван П., Шютце Х. Введение в информационный поиск. – М.: Вильямс, 2011. – 528 с.
2. Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К. Алгоритмы: построение и анализ. – 3-е изд. – М.: Вильямс, 2013. – 1328 с.
3. Д. Э. Кнут: Искусство Программирования. Том 3 Сортировка и Поиск . – М.: Вильямс, 2012. – 824с.
4. www.mkurnosov.net/teaching