SlideShare une entreprise Scribd logo
1  sur  28
Алексей Токарь
руководитель группы разработки в
направлении медиасервисов
Найти «иглоку»
в стоге сена
2
Виды поиска
• Поиск по атрибутам
• Поиск по изображениям
• Полнотекстовый поиск
– нечеткий поиск в словаре
3
Нечеткий поиск (fuzzy search)
Исходное слово Трансформеры
Перестановка Трансфромеры
Вставка Транссформеры
Удаление Тр_нсформеры
Замена Трансформиры
4
Основная дилемма
производительность
vs
качество
П К
5
Способы тестирования
MacBook Air (13-inch, Mid 2012)
1.8 GHz Intel Core i5
4 GB 1600 MHz DDR3
SSD
На чем ищем:
Где ищем:
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
Владимир Иосифович Левенштейн
учёный-математик, доктор
физико-математических наук.
функцию его имени можно
найти в любом языке
программирования.
http://www.keldysh.ru/departments/dpt_10/lev.html
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 – коэф. сглаживания
14
Метрика Жаро-Винклера
ПРОБКА
КОРОБКА
d = 0.78
ЗВЕЗДА
ЗВЕЗДНЫЙ
d = 0.89
ХОРОШО
ШОРОХ
d = 0.7
m = 5
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
Метрика Жаро-Винклера
• не требует дополнительной памяти
• поиск опечаток в любой позиции
П К
• медленная работа O(n)
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
Поиск в глубину (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
Алексей Токарь
руководитель группы
azazeltap@yandex-team.ru
Спасибо :)

Contenu connexe

Tendances

Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Badoo Development
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Ontico
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Pavel Egorov
 
Денис Чистяков: Паттерны проектирования
Денис Чистяков: Паттерны проектированияДенис Чистяков: Паттерны проектирования
Денис Чистяков: Паттерны проектированияYandex
 
Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...
Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...
Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...Ontico
 
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...yaevents
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolAlexandre Kalendarev
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанкуNikolay Sivko
 
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Nikolay Grebenshikov
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Ontico
 

Tendances (10)

Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1
 
Денис Чистяков: Паттерны проектирования
Денис Чистяков: Паттерны проектированияДенис Чистяков: Паттерны проектирования
Денис Чистяков: Паттерны проектирования
 
Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...
Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...
Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...
 
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере Tarantool
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
 

Plus de Alexey Tokar

Graph theory basics
Graph theory basicsGraph theory basics
Graph theory basicsAlexey Tokar
 
Fantastic caches and where to find them
Fantastic caches and where to find themFantastic caches and where to find them
Fantastic caches and where to find themAlexey Tokar
 
Conway's transformation
Conway's transformationConway's transformation
Conway's transformationAlexey Tokar
 
Bug prediction + sdlc automation
Bug prediction + sdlc automationBug prediction + sdlc automation
Bug prediction + sdlc automationAlexey Tokar
 
Bots on guard of sdlc
Bots on guard of sdlcBots on guard of sdlc
Bots on guard of sdlcAlexey Tokar
 
Bug prediction based on your code history
Bug prediction based on your code historyBug prediction based on your code history
Bug prediction based on your code historyAlexey Tokar
 
Extend your REST API
Extend your REST APIExtend your REST API
Extend your REST APIAlexey Tokar
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?Alexey Tokar
 
когда тексты не только слова
когда тексты не только словакогда тексты не только слова
когда тексты не только словаAlexey Tokar
 

Plus de Alexey Tokar (9)

Graph theory basics
Graph theory basicsGraph theory basics
Graph theory basics
 
Fantastic caches and where to find them
Fantastic caches and where to find themFantastic caches and where to find them
Fantastic caches and where to find them
 
Conway's transformation
Conway's transformationConway's transformation
Conway's transformation
 
Bug prediction + sdlc automation
Bug prediction + sdlc automationBug prediction + sdlc automation
Bug prediction + sdlc automation
 
Bots on guard of sdlc
Bots on guard of sdlcBots on guard of sdlc
Bots on guard of sdlc
 
Bug prediction based on your code history
Bug prediction based on your code historyBug prediction based on your code history
Bug prediction based on your code history
 
Extend your REST API
Extend your REST APIExtend your REST API
Extend your REST API
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
 
когда тексты не только слова
когда тексты не только словакогда тексты не только слова
когда тексты не только слова
 

Найти иглоку в стоге сена

Notes de l'éditeur

  1. производительность – как быстро мы можем найти приемлемые результаты качество – какой объем выборки нам нужно переранжировать
  2. можно улучшить до O(logN) используя бинарный поиск
  3. Хеширование— преобразование по определённому алгоритму входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем Хеш-табли́ца — это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу.
  4. 1ms поиск 74MiB словарь
  5. PATRICIA
  6. 60MiB словарь 9ms поиск
  7. Расстояние Левенштейна - мера разницы двух последовательностей символов (строк) относительно минимального количества операций вставки, удаления и замены, необходимых для перевода одной последовательности в другую.
  8. транспозиция – символ в слове есть, но далее чем De суть метрики?
  9. описать кейсы похожестей на примере с транспозициями
  10. 1500мс поиск по всему словарю
  11. Depth-first search
  12. управляемая производительность: можно искать пока есть на это время можно искать, пока не исследовано достаточное кол-во опечаток можно искать, пока не найдется необходимое кол-во предлагаемых вариантов
  13. N-грамма — последовательность из n элементов. Последовательность из двух последовательных элементов часто называют биграмма, последовательность из трех элементов называется триграмма. Не менее четырех и выше элементов обозначаются как N-грамма, N заменяется на количество последовательных элементов. Инвертированный индекс (англ. inverted index) — структура данных, в которой для каждого слова коллекции документов в соответствующем списке перечислены все документы в коллекции, в которых оно встретилось. Инвертированный индекс используется для поиска по текстам.
  14. описать как считаем улчшие вариант. Считаем кол-во вхождений слов в н-граммы строим инвертированный индекс ранжируем документы с этой задачей хорошо справляется map-reduce
  15. - если опечатка на стыке н-граммы, то найти ее будет невозможно. Либо, если опечатка попала во все наборы нграмм 140мс – поиск по словарю 496MiB размер словаря
  16. Хеширование по шаблону
  17. основная идея – совместить алгоритмы и структуры данных так, чтобы за минимальное время максимально сократить словарь, а затем тонко отранжировать результаты