28
Алексей Токарь руководитель группы разработки в направлении медиасервисов Найти «иглоку» в стоге сена

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

Embed Size (px)

Citation preview

Алексей Токарьруководитель группы разработки в направлении медиасервисов

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

2

Виды поиска

• Поиск по атрибутам

• Поиск по изображениям

• Полнотекстовый поиск– нечеткий поиск в словаре

3

Нечеткий поиск (fuzzy search)

Исходное слово Трансформеры

Перестановка Трансфромеры

Вставка Транссформеры

Удаление Тр_нсформеры

Замена Трансформиры

4

Основная дилемма

производительность vs

качество

П К

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 – коэф. сглаживания

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 = 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

Алексей Токарь

руководитель группы

[email protected]

Спасибо :)