5. 5
Способы тестирования
MacBook Air (13-inch, Mid 2012)
1.8 GHz Intel Core i5
4 GB 1600 MHz DDR3
SSD
На чем ищем:
Где ищем:
700.000 фильмов
±3.000.000 названий
8. 8
Hash based
• быстрый поиск O(1)
• мало памяти O(n)
• простая реализация
П К
• поиск только по полному совпадению
9. 9
Префиксное дерево (radix trie)
м
е
с
т
о
встречисына
ь в
илли
ампира
уду
яц в деревне
довый месяц
…
медовый месяц
месяц в деревне
месть вампира
месть вуду
месть вилли
место сына
место встречи
…
10. 10
Префиксное дерево (radix trie)
• мало памяти O(log(n*m))
• быстрый поиск O(k)
П К
• сложное решение
• возможны проблемы с размером словаря
• поиск только по началу строки
13. 13
Метрика Жаро-Винклера
dj =
1
3
m
| s1 |
+
m
| s2 |
+
m-t
m
æ
è
ç
ö
ø
÷
dw = dj +lp(1-dj )
de*=
max(| s1 |,| s2 |
2
ê
ëê
ú
ûú-1
s – длина слова
m – кол-во совпавших символов*
t – половина транспозиций
l – длина общего префикса
p – коэф. сглаживания
15. 15
Метрика Жаро-Винклера
Т Р А Н С Ф О Р М Е Р Ы
Т 1 0 0 0 0 0 - - - - - -
Р 0 1 0 0 0 0 0 - - - - -
А 0 0 1 0 0 0 0 0 - - - -
Н 0 0 0 1 0 0 0 0 0 - - -
С 0 0 0 0 1 0 0 0 0 0 - -
М 0 0 0 0 0 0 0 0 1 0 0 -
О 0 0 0 0 0 1 0 0 0 0 0
Р 0 0 0 0 0 1 0 0 0 0
Ф 0 0 1 0 0 0 0 0 0
Е 0 0 0 0 0 1 0 0
Р 0 0 0 0 0 1 0
Ы 0 0 0 0 0 1
s = 12
m = 12
t = 1
l = 5
p = 0.1
dj = 0.94
dw = 0.98
16. 16
Метрика Жаро-Винклера
• не требует дополнительной памяти
• поиск опечаток в любой позиции
П К
• медленная работа O(n)
17. 17
Поиск в глубину (DFS)
A
B C
D
C A C
B D D E F
ABCD
• abcd
• abcb (r)
• abd (i)
• accd (r)
• acce (r,r)
• accf (r,r)
• aca (i,r,r)
18. 18
Поиск в глубину (DFS)
• быстрый поиск простых инвариантов
• небольшое потребление памяти
• управляемая производительность
П К
• возможен рост сложности по экспоненте
• нужна сложная реализация
21. 21
N-граммы
• 2-граммы:
– больше возможных исправлений опечаток
– большой словарь и множество коллизий
• >3-граммы:
– небольшой размер словаря
– ограничение на минимальную длину слова
• 3-граммы:
– наилучший баланс точности и объема словаря
23. 23
Template hashing
1 0 1 0 0 0 1 1 1 1 0 0 0
A C E G I K M O Q S U W Y
B D F H J L N P R T V X Z
T R A N S F O R M E R S
24. 24
Template hashing
hash( “Transformers” ) = (1010001111000)2 = (5240)10
• runaway robber
• your name brown?
• your new baby
• warren zevon
• robert emmet
• terror on tape
• to beep or not to beep
• transformers
• a story of montana
• a year to remember
• esperanza
• story seas
523910 524010 524110
25. 25
Template hashing
• быстрый поиск простых опечаток
• маленький объем индекса
П К
• сокращает словарь всего до 20-25%%
производительность – как быстро мы можем найти приемлемые результаты
качество – какой объем выборки нам нужно переранжировать
можно улучшить до O(logN) используя бинарный поиск
Хеширование— преобразование по определённому алгоритму входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем
Хеш-табли́ца — это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу.
1ms поиск
74MiB словарь
PATRICIA
60MiB словарь
9ms поиск
Расстояние Левенштейна - мера разницы двух последовательностей символов (строк) относительно минимального количества операций вставки, удаления и замены, необходимых для перевода одной последовательности в другую.
транспозиция – символ в слове есть, но далее чем De
суть метрики?
описать кейсы похожестей на примере с транспозициями
1500мс поиск по всему словарю
Depth-first search
управляемая производительность:
можно искать пока есть на это время
можно искать, пока не исследовано достаточное кол-во опечаток
можно искать, пока не найдется необходимое кол-во предлагаемых вариантов
N-грамма — последовательность из n элементов. Последовательность из двух последовательных элементов часто называют биграмма, последовательность из трех элементов называется триграмма. Не менее четырех и выше элементов обозначаются как N-грамма, N заменяется на количество последовательных элементов.
Инвертированный индекс (англ. inverted index) — структура данных, в которой для каждого слова коллекции документов в соответствующем списке перечислены все документы в коллекции, в которых оно встретилось. Инвертированный индекс используется для поиска по текстам.
описать как считаем улчшие вариант. Считаем кол-во вхождений слов в н-граммы
строим инвертированный индекс
ранжируем документы
с этой задачей хорошо справляется map-reduce
- если опечатка на стыке н-граммы, то найти ее будет невозможно. Либо, если опечатка попала во все наборы нграмм
140мс – поиск по словарю
496MiB размер словаря
Хеширование по шаблону
основная идея – совместить алгоритмы и структуры данных так, чтобы за минимальное время максимально сократить словарь, а затем тонко отранжировать результаты