View
131
Download
0
Category
Preview:
Citation preview
Алексей Токарьруководитель группы разработки в направлении медиасервисов
Найти «иглоку» в стоге сена
2
Виды поиска
• Поиск по атрибутам
• Поиск по изображениям
• Полнотекстовый поиск– нечеткий поиск в словаре
3
Нечеткий поиск (fuzzy search)
Исходное слово Трансформеры
Перестановка Трансфромеры
Вставка Транссформеры
Удаление Тр_нсформеры
Замена Трансформиры
5
Способы тестирования
MacBook Air (13-inch, Mid 2012)1.8 GHz Intel Core i54 GB 1600 MHz DDR3SSD
На чем ищем:
Где ищем:700.000 фильмов±3.000.000 названий
6
«Обычное» сравнение
«Терминатор» == «Трансформеры»
• мало памяти О(n)
• только полное совпадение• медленный поиск О(n)
7
Hash based
hash ()00
Терминатор 01
Терминатор 2 02
Начало 03
Интерстеллар 04
Альф 05
06
Альф03 Терминатор …
8
Hash based
• быстрый поиск O(1) • мало памяти O(n)• простая реализация
П К
• поиск только по полному совпадению
9
Префиксное дерево (radix trie)
м
е
с
т
о
встречисына
ь в
илли
ампира
уду
яц в деревне
довый месяц
…медовый месяцмесяц в деревнеместь вампира
месть вудуместь виллиместо сынаместо встречи…
10
Префиксное дерево (radix trie)
• мало памяти O(log(n*m))• быстрый поиск O(k)
П К
• сложное решение• возможны проблемы с размером словаря• поиск только по началу строки
12
Владимир Иосифович Левенштейн
учёный-математик, доктор физико-математических наук.
функцию его имени можно найти в любом языке программирования.
htt
p://
ww
w.k
eldy
sh.ru
/dep
artm
ents
/dpt
_10/
lev.
htm
l
13
Метрика Жаро-Винклера
s – длина словаm – кол-во совпавших символов*t – половина транспозицийl – длина общего префиксаp – коэф. сглаживания
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 = 12m = 12t = 1l = 5p = 0.1
dj = 0.94dw = 0.98
16
Метрика Жаро-Винклера
• не требует дополнительной памяти• поиск опечаток в любой позиции
П К
• медленная работа O(n)
17
Поиск в глубину (DFS)
A
B C
DC 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
Поиск в глубину (DFS)
• быстрый поиск простых инвариантов• небольшое потребление памяти• управляемая производительность
П К
• возможен рост сложности по экспоненте• нужна сложная реализация
19
N-граммы
ало
начАЛО
русАЛОчка
волшебное зеркАЛО
ача
нАЧАло
удАЧА
нАЧАльники
нач
НАЧало
НАЧальники
геркулес НАЧало
чал
наЧАЛо
мгновения пеЧАЛи
наЧАЛьники
Начало (Inception), 2010 год
20
N-граммы
(4/4, 4/4) Начало: АЛО, АЧА, НАЧ, ЧАЛ
(4/4, 4/12) Геркулес начало: АЛО, АЧА, НАЧ, ЧАЛ
(3/4, 4/10) Начальники: АЧА, НАЧ, ЧАЛ
(1/4, 1/3) Удача: АЧА
(1/4, 1/7) Русалочка: АЛО
(1/4, 1/13) Мгновение печали: ЧАЛ
(1/4, 1/14) Волшебное зеркало: АЛО
21
N-граммы
• 2-граммы:– больше возможных исправлений опечаток– большой словарь и множество коллизий
• >3-граммы:– небольшой размер словаря– ограничение на минимальную длину слова
• 3-граммы:– наилучший баланс точности и объема словаря
22
N-граммы
• возможность искать любые* опечатки• простая реализация• достаточно быстрый поиск
П К
• много памяти O(n*k)
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
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
Template hashing
• быстрый поиск простых опечаток• маленький объем индекса
П К
• сокращает словарь всего до 20-25%%
26
Результаты
метод размер «индекса»
время поиска
поддержка опечаток
сложность реализации качество
Линейный поиск 30 MiB 500 ms ☐ ☐☐☐☐
Hash based 50 MiB 1 ms ☐ ☐☐☐☐
Префиксное дерево* 70 MiB 6 ms ☐☐☐
Расстояние редактирования 30 MiB 1500 ms ☐☐☐
Поиск в глубину 70 MiB 200 ms ☐
N-граммы 450 MiB 60 ms ☐☐ ☐
Template hashing 50 MiB 2 ms ☐ ☐☐ ☐☐
27
Получение баланса
n-gram + Jaro-Winkler metrics
template hashing + Levenshtein distance
DFS + complex heuristics
Recommended