Upload
cs-center
View
301
Download
0
Embed Size (px)
Citation preview
технологии хранения и обработкибольших объёмов данныхИнформационный поиск
Дмитрий Барашев11 марта 2016 г.
Computer Science Center
Этот материал распространяется под лицензией
Creative Commons”Attribution - Share Alike” 3.0
http://creativecommons.org/licenses/by-sa/3.0/us/deed.ru
сверстано в онлайн LATEX редакторе
P
a
peeriapapeeria.com
сегодня в программе
Введение
Модели информационного поиска
Вычислительная часть
3/43
постановка задачи
• Документом называется некоторая единицапоиска и результата• веб-страница• абзац текста (например библиотечная запись)• коллекция страниц (например патент)
• Документы образуют корпус
4/43
постановка задачи ii
• У пользователя есть поисковая потребность¹• Потребность более или менее точно выражаетсязапросом• запрос ̸=потребность
• Задача информационного поиска: найти вкорпусе документы, удовлетворяющиеинформационную потребность• или хотя бы документы, релевантные запросу
¹information need
5/43
поисковая система
6/43
основные проблемы
• Большой размер корпуса• Слабая структура или отсутствие структуры• Плохие пользователи с неточными запросами• Нетерпеливые пользователи не хотят ждать дажеминуту
7/43
запрос и результат
• Как выглядит запрос?• Каким должен быть результат?• Что означает «документ удовлетворяет запросу» ?• Все ли документы одинаково хорошоудовлетворяют запросу?
• Как измерить релевантность документа(соответствие его запросу) ?
• Насколько точные запросы формулируютпользователи?
8/43
сегодня в программе
Введение
Модели информационного поиска
Вычислительная часть
9/43
некоторые модели
• Строковое совпадение• Булевская модель• Векторная модель• Вероятностная модель
10/43
подстрока и регулярные выражения
• Запрос – одна строка или одно регулярноевыражение• ”Database query optimization” илиDatabase\s+query\s+optimization
• Документ рассматривается как одна большаястрока или как список строк
• Документ, в котором нашлось совпадениеподстроки/выражения, считается релевантным
• Обычно все документы в результате одинаковорелевантны
• Самый простой инструмент – утилита grep
11/43
булевский поиск
• Документ рассматривается как (мульти)множествослов
• Запросом являются слова, объединённыелогическими операторами
• Слово в запросе заменяется на true если оносодержится в документе
• Релевантным называется документ, для которогополученное логическое выражение вернуло true
ПримерKing AND Richard AND NOT Queen• Булевский поиск тоже можно сделатьконсольными утилитами
12/43
булевский поиск: расширенные модели
• Дополнительные операции: «находится рядом»,совпадение по подстроке или регулярномувыражению
• Некоторое ранжирование: документ делится на«зоны» и зонам назначаются веса
13/43
булевский поиск: достоинства
• Запросы точны: вы получаете ровно то, чтопросили
• Запросы могут передавать довольно сложныеинформационные потребности
14/43
булевский поиск: недостатки
• Формулировка запросов – непростая задача• выпускник технического вуза может и справится,обычный человек нет
• Классическая модель бедна, расширенныесложны
• «Неустойчивость» результата к операторам• AND может сильно сократить множестводокументов в результате
• OR наоборот, может его сильно расширить
• Классическая модель не подразумеваетранжирования документов
15/43
векторный поиск: мотивация
• Пользователь может и не знать какие словаприсутствуют в корпусе• сколько нужно SEOшников чтобы вкрутитьлампочку, лампочки, лампы накаливания, бра,светильники, доставка
• Если слова в документе нет то это не поводдокумент отвергать
• Не все слова одинаково ценны• купить синхрофазотрон онлайн
16/43
векторный поиск: мотивация
• Пользователь может и не знать какие словаприсутствуют в корпусе• сколько нужно SEOшников чтобы вкрутитьлампочку, лампочки, лампы накаливания, бра,светильники, доставка
• Если слова в документе нет то это не поводдокумент отвергать
• Не все слова одинаково ценны• купить синхрофазотрон онлайн
16/43
векторный поиск: абстрактная модель
• Документ d и запрос q – векторы в многомерномпространстве
• Измерениями являются слова, значениямикоординат вектора – некоторые числа,соответствующие паре (d,w)
• Релевантность документа запросу – какая-то мераблизости двух векторов sim(d,q)
17/43
наивный пример
• Три измерения• Координата равна 1 если слово есть вдокументе/запросе
• Мера близости – модуль разности векторов
18/43
локальная частота слова
• Слова в каждом документе неравноправны• Если текст про конечные автоматы случайносодержит слово ”Калашников” то для запросаавтомат Калашникова он будет равноправен стекстом, описывающим историю автоматаКалашникова
• Давайте посчитаем ft,d – «сырую» частотувхождения каждого слова в документ
теперь текст про автомат Калашникова скорее всеговыиграет
19/43
локальная частота слова
• Слова в каждом документе неравноправны• Если текст про конечные автоматы случайносодержит слово ”Калашников” то для запросаавтомат Калашникова он будет равноправен стекстом, описывающим историю автоматаКалашникова
• Давайте посчитаем ft,d – «сырую» частотувхождения каждого слова в документ
теперь текст про автомат Калашникова скорее всеговыиграет
19/43
нормализация сырой частоты
• Если просто считать число вхождений то болеедлинные документы будут выигрывать
• Сырую частоту можно нормализовать:• длиной документа:
tft,d =ft,d|d|
• максимальной сырой частотой:
tft,d =ft,d
max fw,d,w ∈ d• или сделать ее рост нелинейным:
tft,d = 1+ log ft,dесли ft,d > 0
20/43
обратная встречаемость слова
• Слова вообще неравноправны• я, мы, что, где, когда встречаются чуть менее чемвезде, а вот синхрофазотрон еще надо поискать• кошмар гуглера: ансамбль The The
• Можно посчитать частоту слова во всем корпусе
• Но более разумно:
• посчитать сколько документов в корпусе содержатслово:
|d : t ∈ d|• и взять логарифм от обратной дроби:
idft = log |D||d : t ∈ d|
21/43
обратная встречаемость слова
• Слова вообще неравноправны• я, мы, что, где, когда встречаются чуть менее чемвезде, а вот синхрофазотрон еще надо поискать• кошмар гуглера: ансамбль The The
• Можно посчитать частоту слова во всем корпусе• Но более разумно:
• посчитать сколько документов в корпусе содержатслово:
|d : t ∈ d|
• и взять логарифм от обратной дроби:
idft = log |D||d : t ∈ d|
21/43
обратная встречаемость слова
• Слова вообще неравноправны• я, мы, что, где, когда встречаются чуть менее чемвезде, а вот синхрофазотрон еще надо поискать• кошмар гуглера: ансамбль The The
• Можно посчитать частоту слова во всем корпусе• Но более разумно:
• посчитать сколько документов в корпусе содержатслово:
|d : t ∈ d|• и взять логарифм от обратной дроби:
idft = log |D||d : t ∈ d|
21/43
tf-idf
• Получили IDF - глобальную характеристику словаи TF - характеристику слова в конкретномдокументе
tf ∗ idft,d = tft,d ∗ idft
• увеличивается когда вообще редкое слово частовстречается в одном документе
• уменьшается когда слово встречается реже вдокументе или чаще в коллекции
• равен нулю если слово присутствует во всехдокументах
22/43
варианты модели векторного поиска
• вектор документа−→d состоит из tf*idf, вектор
запроса −→q из 1 или 0•−→d состоит из tf, −→q из idf
• скалярное произведение−→d · −→q нормализуется
эвклидовыми длинами:
sim(d,q) =−→d · −→q
|−→d | ∗ |−→q |
• или как-то иначе• или рассматривается модуль расстояния междувекторами: sim(d,q) = |
−→d −−→q |
23/43
сегодня в программе
Введение
Модели информационного поиска
Вычислительная часть
24/43
эффективный поиск
• Линейно просмотреть все документы! O(N)!• При 1млрд документов и 1мс на документуложимся в 1млн секунд :)
• Если найдем 10000 процессоров, уложимся в 100секунд
• O(результата), а не O(корпуса) было бы лучше
25/43
эффективный поиск
• Линейно просмотреть все документы! O(N)!• При 1млрд документов и 1мс на документуложимся в 1млн секунд :)
• Если найдем 10000 процессоров, уложимся в 100секунд
• O(результата), а не O(корпуса) было бы лучше
25/43
матрица инцидентности
• Построим матрицу с терминами в строках идокументами в столбцах
compscicenter amazon microsoft iStorecomputer 1 1 0 1science 1 0 0 0center 1 0 1 1
research 0 0 1 0book 0 1 0 0sale 0 1 0 1
• булевский запрос computer AND center AND NOTscience вычислится как 1101 AND 1011 AND 0111и вернет 0001 – iStore
26/43
булевский поиск по матрице инцидентности
• Каждое слово запроса – бинарная строка матрицы
compscicenter amazon microsoft iStorecomputer 1 1 0 1science 1 0 0 0center 1 0 1 1
research 0 0 1 0book 0 1 0 0sale 0 1 0 1
• булевский запрос computer AND center AND NOTscience вычислится как 1101 AND 1011 AND 0111и вернет 0001 – iStore
27/43
матрица инцидентности великовата
• Пусть в корпусе 1млрд. документов• Битовая маска для 1млрд битов займет порядка100Мб, но слов сотни тысяч
• Матрица сильно разреженная
28/43
инвертированный индекс
• Отображение терма в список содержащих егодокументов
• Документ идентифицируется численнымидентификатором docid
• Множество термов называется словарем(vocabulary, dictionary)
• Списки называются списками вхождений (postinglists)
• Кроме docid элемент списка может содержатьtf*idf и еще какую-нибудь информацию
29/43
булевский поиск с использованием индекса
• Пусть списки вхождений отсортированы повозрастанию docid
• Тогда запрос computer AND center можновычислить алгоритмом похожим на merge sort
30/43
более сложные запросы
• В запросе несколько термов: computer ANDcenter AND NOT science
• Можно воспользоваться multiway merge sort• Можно составить деревянный план выполнения иначать оптимизировать:• сначала пересечь самые короткие списки• или положить самый маленький список в память иначать вычеркивать лишние документы
31/43
а может sql?
Запрос a AND b:1 SELECT doc_id FROM PL JOIN T WHERE PL.term_id = T.id AND
T.value=’a’2 INTERSECT3 SELECT doc_id FROM PL JOIN T WHERE PL.term_id = T.id AND
T.value=’b’
32/43
векторный поиск с использованием индекса
• Общая мысль: нужны не все документы, а толькосамые релевантные
• Два подхода: пословный (term-at-a-time) иподокументный (document-at-a-time)
33/43
пословный поиск
1 scores = {}2 for qt in query:3 for dt in posting_lists[qt]:4 scored[dt.doc] += qt.weight * dt.weight5
6 return top_k(scores)
34/43
подокументный поиск
1 top_k = TopK()2 plists = {}3 for qt in query:4 plists[qt] = posting_lists[qt]5 cur_doc_id = None6 score = 07 while len(plists) > 0:8 qt, dt = pull_min_doc_id(plists)9 if dt.doc_id != cur_doc_id:
10 top_k[cur_doc_id] = score11 score = 012 cur_doc_id = dt.doc_id13 score += qt.weight * dt.weight
35/43
размер результата
• Мало кому нужны все 100500 релевантныхдокументов
• Нужно обычно K самых релевантных (Top-K)• Варианты:
• «точный» – это действительно Top-K• «приблизительный» – K похожих на самыерелевантные
36/43
стратегии поиска top-k
• Сортировка всех документов :)• Отбрасывание тех кто заведомо хуже ужеотобранных
• Ограниченное время на поиск – что нашли тонашли
37/43
сделать приблизительный поиск поточнее
• Рассматривать только термы с большим IDF• Рассматривать только документы, содержащиенесколько слов запроса
• Специальная организация списков вхождений
38/43
разбиение списков вхождений
• Чемпионский список для терма t: документы свесом tft выше какого-то порогового значенияили просто top-m документов в порядке убываниявеса терма
• Слоеный индекс, делящий документы по«важности», «свежести», и т.д.
39/43
упорядочивание списков вхождений
• Нужно любое, одинаковое во всех списках• Возрастание docid – окей, но можно ли лучше?• Например чтобы самые «ценные» документыбыли в начале списка
40/43
ценность документа
• Некоторая характеристика, не зависящая отзапроса
• Выше ранг – ценнее документ• Упорядочивание по статическому рангу позволитзакончить поиск быстрее
• Примеры статического ранга: количествоцитирований статьи, индекс Хирша автора, индексцитируемости СМИ, pagerank в вебе
41/43
инструменты веб поиска
• Библиотека Apache Lucene• Одно из лучших Open-source решений• Написана на Java• Работает ”из коробки” и позволяет встраивать инастраивать всё, от структур хранения до моделейранжирования
• Надстройки над Lucene: ElasticSearch, Solr• Sphinx• Реляционные СУБД не сдаются: в PostgreSQLвстроена поисковая система
42/43
поисковик на коленке
• Нужно сделать списки вхождений и найти tf/idf• И то и другое можно сделать при помощиmap-reduce
43/43