Professional Documents
Culture Documents
Untitled
Untitled
СТИСКАННЯ
ІНДЕКСУ
Глибовець А.М.
СТИСКАННЯ ІНДЕКСУ
В попередніх лекціях ми поговорили про створення
словника і інвертованого індексу пошукової системи.
В цій лекції ми розглянемо методи стискання, що
дозволяють підвищити продуктивність роботи
пошукової системи.
СТИСКАННЯ ІНДЕКСУ
Переваги стискання:
Необхідно менше дискового простору
В деяких випадках можна досягнути коефіцієнта 1:4
Підвищує ефективність кешування
Ми можемо розміщувати в пам’ять інвертовані списки термінів
по яким частіше проходить пошук
При використанні стискання ми зможемо покласти більше таких
термінів
Підвищення швидкості передачі даних з диска в пам’ять:
[читання стиснутих даних/ декомпресія] швидше ніж [читання
не стиснутих даних]
Припущення: існують швидкі алгоритми декомпресії
СТИСКАННЯ ІНДЕКСУ
Якщо основною ціллю стискання є економія дискової
пам’яті, то швидкість стискання не грає великої ролі.
Але швидкість розпакування має бути дуже
високою!!!
Алгоритми, що ми розглянемо вважаються
ефективними і тому використовуються в пошукових
системах.
СТИСКАННЯ ІНДЕКСУ
В цій лекції словопозиція (posting) в інвертованому
списку інтерпретуються як ідентифікатор документу
docID
Наприклад інвертований список (6:20,45,100), де 6 –
ідентифікатор терміна з списку, містить три словопозиції
(три документи в яких ми знайшли це слово)
В цій лекції ми не розглядаємо індекси з частотою і
координатні індекси, хоча ефективні алгоритми для цих
індексів також існують.
СТИСКАННЯ ІНДЕКСУ
Як приклад колекції будемо розглядати Reuters-RCV1
Пригадаємо статистичні дані.
REUTERS RCV1 СТАТИСТИКА
Символ Показник Значення
N Документи 800000
Lave Середня кількість лексем в тексті 200
M Терміни 400000
Середня кількість байт в лексемі 6
(включаючи проміжки і знаки
пунктуації)
Середня кількість байт в лексемі (без 4,5
проміжків і знаків пунктуації)
Середня кількість байт в терміні 7,5
T лексеми 100000000
Sec. 5.1
12
ЗАКОН ХІПСА: ОЦІНКА КІЛЬКОСТІ
ТЕРМІНІВ
Параметр k змінюється в доволі широких діапазонах,
оскільки зростання лексикону в багатьох випадках
залежить від природи колекції і способу її обробки.
З за описок і технічних лексем значення b в веб-
колекціях значно ближче до 1.0, чим до 0,5.
ЗАКОН ЦІПФА: МОДЕЛЮВАННЯ
РОЗПОДІЛЕННЯ ТЕРМІНІВ
Визначимо також розподілення термінів серед
документів.
Це допоможе нам описати властивості алгоритмів
стискання.
ЗАКОН ЦІПФА: МОДЕЛЮВАННЯ
РОЗПОДІЛЕННЯ ТЕРМІНІВ
Для моделювання розподілу термінів в колекції
використовується закон Ціпфа (Zipfs’ law).
Якщо до якого-небудь досить великого тексту
скласти список всіх слів, що зустрілися, а потім
відранжувати ці слова в порядку спадання їх частоти
в тексті, то для будь-якого слова добуток його рангу r
і частоти f буде константою.
Що це нам дає?
ЗАКОН ЦІПФА: МОДЕЛЮВАННЯ
РОЗПОДІЛЕННЯ ТЕРМІНІВ
Він стверджує, що якщо t1 – найбільш поширений
термін в колекції, t2 – наступний по поширеності, і
т.д.
Тоді частота і-го по поширеності терміна в колекції
cfi пропорційна 1/і
Sec. 5.1
17
СТИСКАННЯ СЛОВНИКА
Ми розглянемо декілька структур даних, що
забезпечують послідовно збільшуючіся коефіцієнти
стискання.
Як ми вже розібралися, словник має менший розмір
ніж інвертований список, нащо ж нам його стискати?
СТИСКАННЯ СЛОВНИКА
Основне призначення стискання словника, це
можливість розміщення його повністю в оперативну
пам’ять, або хоча б більшу його частину.
РОЗМІР СТРІЧКИ В JAVA
Скільки буде займати порожня стрічка?
Стрічка це об’єкт з трьома полями int і масивом
char‘ів
[8 bytes (заголовок об’єкта) + 3*4(int) + 4 (посилання
на масив)]{вирівнювання по 8 байтам} + [8 bytes
(заголовок об’єкта масива) + 4(int довжина массива)
+ 2(char)*довжина стрічки]{вирівнювання по 8
байтам} = 24 + [12 + 2*length]{вирівнювання по 8
байтам} = [36 + 2*length]{вирівнювання по 8
байтам}
40 байт!!!
23
Термін Частота Вказівник
a 656,265
aachen 65
…. ….
zulu 221
26
….systilesyzygeticsyzygialsyzygyszaibelyiteszczecinszomo….
31
Freq. Postings ptr. Term ptr.
33
29
Зберігаємо 9 bytes
44
на 3 Втрачаємо 4 bytes на
126 вказівниках. довжині терміна.
7
СТИСКАННЯ СЛОВНИКА. БЛОЧНЕ
ЗБЕРІГАННЯ.
Збільшуючи розмір блока k, ми можемо досягнути
ще більшого стискання.
Однак існує протиріччя між стисканням і швидкістю
пошуку терміна.
Це різниця між пошуком по бінарному дереву і
пошуку по списку
СТИСКАННЯ СЛОВНИКА. БЛОЧНЕ
ЗБЕРІГАННЯ.
А. Бінарний пошук в нестиснутому
словнику
ФРОНТАЛЬНА УПАКОВКА
Фронтальна упаковка:
Відсортовані слова зазвичай мають довгі спільні префікси
38
– тоді будемо зберігати лише відмінні частини
(для k-1 в блоку з k)
8automata8automate9automatic10automation
8automat*a1e2ic3ion
Розмір залишку
Кодує automat після automat.
ФРОНТАЛЬНА УПАКОВКА
Експеримент показав, що для колекції Reuters
фронтальна упаковка економить ще 1,2 Мбайт
СТИСКАННЯ СЛОВНИКА
Інші схеми з ще більш високим ступенем стискання
засновані на мінімальному ідеальному хешуванні.
При цьому функція хешування відображує М
термінів в множину [1,..,M] без колізій.
Однак ми не можемо застосовувати ідеальне
хешування необмежено, так як кожний новий термін
викликає колізії, і відповідно вимагає створення
нової ідеальної функції хешування.
СТИСКАННЯ СЛОВНИКА
При роботі з дуже великими текстовими колекціями
на апаратному забезпеченні з обмеженими ресурсами
навіть при найкращій схемі стискання неможливо
записати весь словник в оперативну пам’ять.
Якщо словник необхідно розбити на частини для
запису на диск, то можна проіндексувати перший
термін кожної сторінки за допомогою В-дерева.
Sec. 5.2
42
Словник з фіксованим розміром 11.2
45
СТИСКАННЯ ІНВЕРТОВАНОГО ФАЙЛУ
Яке припущення ми можемо зробити?
СТИСКАННЯ ІНВЕРТОВАНОГО ФАЙЛУ
Ми зберігаємо список документів в порядку
зростання їх docID.
computer: 33,47,154,159,202 …
Висновок: краще зберігати інтервали.
33,14,107,5,43 …
Надія: більшість інтервалів можуть бути збережені з
використанням набагато менше місця ніж 20 біт.
СТИСКАННЯ ІНВЕРТОВАНОГО ФАЙЛУ
На практиці інтервали між найбільш частими
термінами такими як the і for всього 1.
Однак проміжки між рідкими словами (наприклад
arachnocentric) по розміру мало відрізняється від
ідентифікаторів документів і потребує для зберігання
20 біт.
Для економного представлення такого розподілення
інтервалів необхідний метод упаковки з
використанням кодів змінної довжини (variable
encoding method), що для більш коротких інтервалів
використовує менше бітів.
СТИСКАННЯ ІНВЕРТОВАНОГО ФАЙЛУ
Для того, що б закодувати невеликі числа,
використовується менше пам’яті, чим для кодування
великих чисел, розглянемо два методи: байтове
стискання (bytewise compression) і бітове стискання
(bitwise compression).
БАЙТОВЕ КОДУВАННЯ ЗМІННОЇ
ДОВЖИНИ
Байтове кодування змінної довжини (variable byte
encoding – VB, або variable byte coding - VBC)
використовує для кодування інтервалів цілу кількість
байтів.
Останні 7 біт в кожному байті є “корисним
навантаженням” (continuation bit) і кодують частину
інтервала.
Перший біт байта є бітом продовження (continuation
bit).
Він дорівнює одиниці у останнього байта
закодованого інтервалу і нулю в інших випадках
Sec. 5.3
ПРИКЛАД
docIDs 824 829 215406
Інтервал 5 214577
51
VB код 00000110 10000101 00001101
10111000 00001100
10110001
54
Унарний код для 40:
11111111111111111111111111111111111111110 .
Унарний код для 80:
111111111111111111111111111111111111111111111111111
111111111111111111111111111110
ГАММА КОДИ
Число довжина зміщення -код
0
58
1 0 0
2 10 0 10,0
3 10 1 10,1
4 110 00 110,00
9 1110 001 1110,001
13 1110 101 1110,101
24 11110 1000 11110,1000
511 111111110 11111111 111111110,11111111
1025 11111111110 0000000001 11111111110,0000000001
ГАММА КОДИ
Для того, що б декодувати гама код, спочатку
необхідно прочитати унарний код, поки не буде
виявлений 0, який його завершує
Тепер нам відома довжина зміщення
Читаємо 101
Отримуємо число 13
Sec. 5.3
60
Довжина довжини log G + 1 біт
G
Гамма код гарно декодується завдяки префіксу, як і
VB
Гамма код може бути використаний для будь-якого
розподілу
Гамма код безпараметричний
ВЛАСТИВОСТІ ГАМА КОДУ
Наскільки ж гарне стискання з використанням гамма
коду?
Запустивши гамма стискання колекції Reuters ми
зжали індекс до 101 Мбайт, що складає трохи більше
1/10 розміру колекції
Sec. 5.3
RCV1 СТИСКАННЯ
Структура даних Розмір в MB
Словник з фіксованим розміром 11.2
62
Словник з вказівниками на терміни в стрічці 7.6
Те ж саме, але з блоками k = 4 7.1
Те ж саме, але з фронтальною упаковкою 5.9
колекція (текст, xml і т.д.) 3,600.0
колекція (текст) 960.0
Матриця інцидентності 40,000.0
Словопозиції, нестиснуті (32-бітні слова) 400.0
Словопозиції, нестиснуті (20 біт) 250.0
Словопозиції, змінне байтове кодування 116.0
Словопозиції, кодування 101.0
СТИСКАННЯ
Схема гамма кодування дозволяє отримати
найкращий результат стискання
Але її декодування є затратним
Велика кількість побітових операцій…
Дякую за увагу.