Технологии хранения и обработки больших объёмов...

49
Big Data’15 Лекция III: информационный поиск Дмитрий Барашев [email protected] Computer Science Center 3 марта 2015

Upload: cs-center

Post on 27-Jul-2015

253 views

Category:

Documents


5 download

TRANSCRIPT

Big Data’15Лекция III: информационный поиск

Дмитрий Барашев[email protected]

Computer Science Center

3 марта 2015

Этот материал распространяется под лицензией

Creative Commons ”Attribution - Share Alike” 3.0http://creativecommons.org/licenses/by-sa/3.0/us/deed.ru

сверстано в онлайн LATEX редакторе

P

a

peeriapapeeria.com

Сегодня в программе

Введение

Модели информационного поиска

Вычислительная часть

Сегодня в программе

Введение

Модели информационного поиска

Вычислительная часть

Постановка задачи▶ У пользователя есть поисковая потребность(information need)

▶ Потребность более или менее точновыражается запросом

▶ запрос кстати ̸=потребность▶ Документом называется некоторая единицапоиска и результата

▶ например вебстраница, но это может быть иабзац текста или коллекция страниц (напримерпатент)

▶ Документы образуют корпус▶ Задача информационного поиска: найти вкорпусе документы, удовлетворяющиеинф.потребность

▶ или хотя бы документы, релевантные запросу

Поисковая система

Основные проблемы

▶ Большой размеры корпуса▶ Слабая структура или отсутствие структуры▶ Плохие пользователи с неточными запросами▶ Нетерпеливые пользователи не хотят ждатьдаже минуту

Запрос и результат

▶ Как выглядит запрос?▶ Каким должен быть результат?▶ Что означает «документ удовлетворяетзапросу» ?

▶ Все ли документы одинаково хорошоудовлетворяют запросу?

▶ Как измерить релевантность документа(соответствие его запросу) ?

▶ Насколько точные запросы формулируютпользователи?

Ответы зависят от используемой модели поиска

Запрос и результат

▶ Как выглядит запрос?▶ Каким должен быть результат?▶ Что означает «документ удовлетворяетзапросу» ?

▶ Все ли документы одинаково хорошоудовлетворяют запросу?

▶ Как измерить релевантность документа(соответствие его запросу) ?

▶ Насколько точные запросы формулируютпользователи?

Ответы зависят от используемой модели поиска

Сегодня в программе

Введение

Модели информационного поиска

Вычислительная часть

Некоторые модели

▶ Поиск по регулярному выражению▶ Булевская модель▶ Векторная модель▶ Вероятностная модель

Подстрока и регулярные выражения

▶ Запрос – одна строка или одно регулярноевыражение

▶ ”Database query optimization” илиDatabase\s+query\s+optimization

▶ Документ рассматривается как одна большаястрока или как список строк

▶ Документ, в котором нашлось совпадениеподстроки/выражения, считается релевантным

▶ Обычно все документы в результате одинаковорелевантны

▶ Самый простой инструмент – утилита grep

Булевский поиск

▶ Документ рассматривается как(мульти)множество слов

▶ Запросом являются слова, объединённыелогическими операторами

▶ Слово в запросе заменяется на true если оносодержится в документе

▶ Релевантным называется документ, длякоторого полученное логическое выражениевернуло true

ПримерDatabase AND optimization AND NOT query

▶ Булевский поиск тоже можно сделатьконсольными утилитами

Булевский поиск: расширенные модели

▶ Дополнительные операции: «находится рядом»,совпадение по подстроке или регулярномувыражению

▶ Некоторое ранжирование: документ делится на«зоны» и зонам назначаются веса

Булевский поиск: достоинства

▶ Запросы точны: вы получаете ровно то, чтопросили

▶ Запросы могут передавать довольно сложныеинформационные потребности

Булевский поиск: недостатки

▶ Формулировка запросов – непростая задача▶ выпускник технического вуза может исправится, обычный человек нет

▶ Классическая модель бедна, расширенныесложны

▶ «Неустойчивость» результата к операторам▶ AND может сильно сократить множестводокументов в результате

▶ OR наоборот, может его сильно расширить▶ Классическая модель не подразумеваетранжирования документов

Векторный поиск: мотивация

▶ Пользователь может и не знать какие словаприсутствуют в корпусе

▶ сколько нужно SEOшников чтобы вкрутитьлампочку, лампочки, лампы накаливания, бра,светильники, доставка

▶ Если слова в документе нет то это не поводдокумент отвергать

▶ Не все слова одинаково ценны▶ купить синхрофазотрон онлайн

Векторный поиск: мотивация

▶ Пользователь может и не знать какие словаприсутствуют в корпусе

▶ сколько нужно SEOшников чтобы вкрутитьлампочку, лампочки, лампы накаливания, бра,светильники, доставка

▶ Если слова в документе нет то это не поводдокумент отвергать

▶ Не все слова одинаково ценны▶ купить синхрофазотрон онлайн

Векторный поиск: абстрактная модель

▶ Документ d и запрос q – векторы в многомерномпространстве

▶ Измерениями являются слова, значениямикоординат вектора – некоторые числа,соответствующие паре (d,w)

▶ Релевантность документа запросу – какая-томера близости двух векторов sim(d,q)

Наивный пример▶ Три измерения▶ Координата равна 1 если слово есть вдокументе/запросе

▶ Мера близости – модуль разности векторов

Локальная частота слова

▶ Слова в каждом документе неравноправны▶ Если текст про конечные автоматы случайносодержит слово ”Калашников” то для запросаавтомат Калашникова он будет равноправен стекстом, описывающим историю автоматаКалашникова

▶ Давайте посчитаем ft,d – «сырую» частотувхождения каждого слова в документ

теперь текст про автомат Калашникова скореевсего выиграет

Локальная частота слова

▶ Слова в каждом документе неравноправны▶ Если текст про конечные автоматы случайносодержит слово ”Калашников” то для запросаавтомат Калашникова он будет равноправен стекстом, описывающим историю автоматаКалашникова

▶ Давайте посчитаем ft,d – «сырую» частотувхождения каждого слова в документ

теперь текст про автомат Калашникова скореевсего выиграет

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

▶ Сырую частоту можно нормализовать:▶ длиной документа:

tft,d =ft,d|d|

▶ максимальной сырой частотой:

tft,d =ft,d

max fw,d,w ∈ d

▶ или сделать ее рост нелинейным:

tft,d = 1 + log ft,d

если ft,d > 0

Обратная встречаемость слова▶ Слова вообще неравноправны▶ я, мы, что, где, когда встречаются чуть менеечем везде, а вот синхрофазотрон еще надопоискать

▶ кошмар гуглера: ВИА ”the the”▶ Можно посчитать частоту слова во всем корпусе

▶ Но более разумно:

▶ посчитать сколько документов в корпусесодержат слово:

|d : t ∈ d|▶ и взять логарифм от обратной дроби:

idft = log |D||d : t ∈ d|

Обратная встречаемость слова▶ Слова вообще неравноправны▶ я, мы, что, где, когда встречаются чуть менеечем везде, а вот синхрофазотрон еще надопоискать

▶ кошмар гуглера: ВИА ”the the”▶ Можно посчитать частоту слова во всем корпусе▶ Но более разумно:

▶ посчитать сколько документов в корпусесодержат слово:

|d : t ∈ d|

▶ и взять логарифм от обратной дроби:

idft = log |D||d : t ∈ d|

Обратная встречаемость слова▶ Слова вообще неравноправны▶ я, мы, что, где, когда встречаются чуть менеечем везде, а вот синхрофазотрон еще надопоискать

▶ кошмар гуглера: ВИА ”the the”▶ Можно посчитать частоту слова во всем корпусе▶ Но более разумно:

▶ посчитать сколько документов в корпусесодержат слово:

|d : t ∈ d|▶ и взять логарифм от обратной дроби:

idft = log |D||d : t ∈ d|

TF-IDF

▶ Получили IDF - глобальную характеристикуслова и TF - характеристику слова в конкретномдокументе

tf ∗ idft,d = tft,d ∗ idft

▶ увеличивается когда вообще редкое слово частовстречается в одном документе

▶ уменьшается когда слово встречается реже вдокументе или чаще в коллекции

▶ равен нулю если слово присутствует во всехдокументах

Варианты модели векторного поиска

▶ вектор документа −→d состоит из tf*idf, вектор

запроса −→q из 1 или 0▶

−→d состоит из tf, −→q из idf

▶ скалярное произведение −→d · −→q нормализуется

эвклидовыми длинами:

sim(d,q) =−→d · −→q

|−→d | ∗ |−→q |

▶ или как-то иначе▶ или рассматривается модуль расстояния междувекторами: sim(d,q) = |

−→d −−→q |

Сегодня в программе

Введение

Модели информационного поиска

Вычислительная часть

Эффективный поиск

▶ Линейно просмотреть все документы! O(N)!▶ При 1млрд документов и 1мс на документуложимся в 1млн секунд :)

▶ Если найдем 10000 процессоров, уложимся в100 секунд

▶ O(результата), а не O(корпуса) было бы лучше

Эффективный поиск

▶ Линейно просмотреть все документы! O(N)!▶ При 1млрд документов и 1мс на документуложимся в 1млн секунд :)

▶ Если найдем 10000 процессоров, уложимся в100 секунд

▶ O(результата), а не O(корпуса) было бы лучше

Матрица инцидентности▶ Построим матрицу с терминами в строках идокументами в столбцах

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 AND0111 и вернет 0001 – iStore

▶ Битовая маска для 1млрд битов займет порядка100Мб, но таких понадобятся сотни тысяч

Матрица инцидентности▶ Построим матрицу с терминами в строках идокументами в столбцах

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 AND0111 и вернет 0001 – iStore

▶ Битовая маска для 1млрд битов займет порядка100Мб, но таких понадобятся сотни тысяч

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

▶ Отображение терма в список содержащих егодокументов

▶ Документ идентифицируется численнымидентификатором docid

▶ Множество термов называется словарем(vocabulary, dictionary)

▶ Списки называются списками вхождений(posting lists)

▶ Кроме docid элемент списка может содержатьtf*idf и еще какую-нибудь информацию

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

▶ Пусть списки вхождений отсортированы повозрастанию docid

▶ Тогда запрос computer AND center можновычислить алгоритмом похожим на merge sort

Более сложные запросы

▶ В запросе несколько термов: computer ANDcenter AND NOT science

▶ Можно воспользоваться multiway merge sort▶ Можно составить деревянный план выполненияи начать оптимизировать:

▶ сначала пересечь самые короткие списки▶ или положить самый маленький список в памятьи начать вычеркивать лишние документы

А может 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’

Векторный поиск с использованиеминдекса

▶ Общая мысль: нужны не все документы, атолько самые релевантные

▶ Два подхода: пословный (term-at-a-time) иподокументный (document-at-a-time)

Пословный поиск

1 scores = {}2 for qt in query:3 for dt in posting_lists[qt]:4 scored[dt.doc] += qt.weight * dt.weight5

6 for d in keys(scores):7 scores[d] = scores[d] / d.length8

9 return top_k(scores)

Подокументный поиск

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

Размер результата

▶ Мало кому нужны все 100500 релевантныхдокументов

▶ Нужно обычно K самых релевантных (Top-K)▶ Варианты:

▶ «точный» – это действительно Top-K▶ «приблизительный» – K похожих на самыерелевантные

Стратегии поиска Top-K

▶ Сортировка всех документов :)▶ Отбрасывание тех кто заведомо хуже ужеотобранных

▶ Ограниченное время на поиск – что нашли тонашли

Сделать приблизительный поискпоточнее

▶ Рассматривать только термы с большим IDF▶ Рассматривать только документы, содержащиенесколько слов запроса

▶ Специальная организация списков вхождений

Разбиение списков вхождений

▶ Чемпионский список для терма t: документы свесом tft выше какого-то порогового значенияили просто top-m документов в порядкеубывания веса терма

▶ Слоеный индекс, делящий документы по«важности», «свежести», и т.д.

Упорядочивание списков вхождений

▶ Нужно любое, одинаковое во всех списках▶ Возрастание docid – окей, но можно ли лучше?▶ Например чтобы самые «ценные» документыбыли в начале списка

Ценность документа

▶ Некоторая характеристика, не зависящая отзапроса

▶ Выше ранг – ценнее документ▶ Упорядочивание по статическому рангупозволит закончить поиск быстрее

▶ Примеры статического ранга: количествоцитирований статьи, индекс Хирша автора,индекс цитируемости СМИ, pagerank в вебе

Инструменты веб поиска

▶ Библиотека Apache Lucene▶ Одно из лучших Open-source решений▶ Написана на Java▶ Работает ”из коробки” и позволяет встраивать инастраивать всё, от структур хранения домоделей ранжирования

▶ Надстройки над Lucene: ElasticSearch, Solr▶ Sphinx▶ Реляционные СУБД не сдаются: в PostgreSQLвстроена поисковая система

Поисковик на коленке

▶ Нужно сделать списки вхождений и найти tf/idf▶ И то и другое можно сделать при помощиmap-reduce

Литература I

Christopher D Manning, Prabhakar Raghavan, andHinrich Schütze.Introduction to information retrieval, volume 1.Cambridge University Press Cambridge, 2008.