38
Matching Theory © Pavel Alexeev, 2016

Matching theory

Embed Size (px)

Citation preview

Page 1: Matching theory

MatchingTheory

© Pavel Alexeev,2016

Pavel Alekseev
Будем описывать бенчмарки и объёмы?Можно приводить примеры из статей, но не очень понятно как они вписываются в реальные.
Page 2: Matching theory

2

Что такое Matching?— Алё. Петя, поищи в нашей базе Адольфа Швардсенеггера— Шворцинегира? Нет такого!

Matching

Matching

Search

Page 3: Matching theory

3

Виды

Изображения Голос

Page 4: Matching theory

4

ВидыВидео

Page 5: Matching theory

5

Текст matching. Постановка

● “Вася” == “Вася”● “Вася” =? “Василий”● “Наталья” =? “Наталия”● “Вася Уткин” =? “Уткин Вася”● {“name”: “Вася”, “family”: “Уткин”} == {“name”: “Вася”, “family”:

“Уткин”}● {“name”: “Вася”, “family”: “Уткин”} =? {“name”: “Василий”, “family”:

“Уткин”}● “Вася Уткин, проживающий по адресу г. Санкт-Петербург...” ??

“гражданин Уткин В., регион СПб...”

Page 6: Matching theory

6

● Equality. RegExp● Фонетические алгоритмы

○ Soundex, Daitch-Mokotoff Soundex, NYSIIS○ Metaphone, Double Metaphone, русский Metaphone,

Caverphone…● Редакторские расстояния

○ Расстояние Левенштейна, Дамерау-Левенштейна○ Алгоритм Bitap с модификациями от Wu и Manber○ Расширение выборки, метод N-грамм, хеширование по

сигнатуре○ BK-деревья (Burkhard-Keller), Gap penalties, affine gap penalties...

● Нечёткий поиск○ TF, TF-IDF, TF-RIDF○ Алгоритм шинглов (супершинглов, мегашинглов)

● Machine learning○ Support Vector Machine, SVM), SVC, Логистическая регрессия○ Градиентный бустинг над деревьями, случайный лес (begging)○ Нейронные сети, глубокие нейронные сети○ Кластеризация, иерархическая кластеризация, обучение без

учителя)

Pavel Alekseev
Какое время и подробность нужны?Стоит описывать??:* Имплементации? Доступные реализации?* Сложности и особенности алгоритмов?* Хеширование, Индексы?* Очистка, канонизация, структуризация?
Page 7: Matching theory

7

Алгоритмы. RegExp

http://emailregex.com/General Email Regex (RFC 5322 Official Standard)(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Javascript/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i

Page 8: Matching theory

Оригинальный Soundex:D341 → Дедловский, Дедловских, Дидилев, Дителев, Дудалев, Дудолев, Дутлов, Дыдалев, Дятлов, Дятлович.N251 → Нагимов, Нагмбетов, Назимов, Насимов, Нассонов, Нежнов, Незнаев, Несмеев, Нижневский, Никонов, Никонович, Нисенблат, Нисенбаум, Ниссенбаум, Ногинов, Ножнов.Улучшенный Soundex:N8030802 → Насимов, Нассонов, Никонов.N80308108 → Нисенбаум, Ниссенбаум.N8040802 → Нагимов, Нагонов, Неганов, Ногинов.N804810602 → Нагмбетов.N8050802 → Назимов, Нежнов, Ножнов.

8

Фонетические алгоритмы

Page 9: Matching theory

9

Фонетические алгоритмы

Daitch-Mokotoffdm('Майкл Джордан') == dm('Michael Jordan') == 658000 493600dm('Арнольд Шварцнеггер') == dm('Arnold Schwarzenegger') == 096830 479465dm('Орнольд Шворцнегир') == dm('Arnold Schwarzenegger') == 096830 479465

Page 10: Matching theory

10

Фонетические алгоритмы

● Давно известны. Легко реализуются● Специфичны для областей созвучности (имена, названия)● Базируются на разборе правил языка, последовательности

гласных, согласных, порядке и значимости для звучания● Хорошо индексируются● Требуют нормализации, разбора и порядка● Специфичны для языка и локали● Практически не расширяются на объёмный текст

Page 11: Matching theory

11

Алгоритмы. Редакторские расстояния

“найти все слова, совпадающие с искомым с учетом k-возможных различий”

Например, при запросе «Машина» с учетом двух возможных ошибок, найти слова «Машинка», «Махина», «Малина», «Калина» и так далее.Алгоритмы нечеткого поиска характеризуются метрикой — функцией расстояния между двумя словами, позволяющей оценить степень их сходства в данном контексте. Строгое математическое определение метрики включает в себя необходимость соответствия условию неравенства треугольника (X — множество слов, p — метрика):

Page 12: Matching theory

12

Расстояние Левенштейна

● Наиболее популярного алгоритма расчета — метода Вагнера-Фишера.

● Исходный вариант имеет временную сложность O(mn) и потребляет O(mn) памяти, где m и n — длины сравниваемых строк. Оптимизации до O(k min(m, n)).

● Цены операций могут зависеть от вида операции

● Расстояние Дамерау — Левенштейна - модификация с добавлением операции транспозиции (перестановки) символов.

● Модификации Bitap (Bitshift, Shift-Or или Baeza-Yates-Gonnet, и его модификация от Wu-Manber)

Page 13: Matching theory

13

Алгоритм расширения выборки

● Если набор слов не велик (spellchecker), cоставим заранее возможные ошибки

● Время работы сильно зависит от числа k ошибок и от размера алфавита A, и в случае использования бинарного поиска по словарю составляет:

● Зато возможно частичное индексирование

● Индексы достаточно объёмны● Из простых улучшений -

вероятностные генерации ошибок

Page 14: Matching theory

14

Метод N-грамм, Хеширование по сигнатуре

«Если слово А совпадает со словом Б с учетом нескольких ошибок, то с большой долей вероятности у них

будет хотя бы одна общая подстрока длины N»

ВОТКА → ВОТ, ОТК, ТКА

Page 15: Matching theory

15

Нечёткий поиск. TF-IDF

TF (term frequency — частота слова) — отношение числа вхождения некоторого слова к общему количеству слов документа (оценка важности слова ti в пределах отдельного документа):

где ni есть число вхождений слова в документ, а в знаменателе — общее число слов в данном документе.

IDF (inverse document frequency — обратная частота документа) — инверсия частоты, с которой некоторое слово встречается в документах коллекции.

Page 16: Matching theory

Текст. Алгоритм шингловканонизация текстов (очистка)разбиение текста на шинглы ((англ) — чешуйки, выделенные из статьи

подпоследовательности слов)нахождение контрольных сумм (CRC, SHA256, MD5...)поиск одинаковых подпоследовательностей

«Разум дан человеку для того, чтобы он разумно жил, а не для того только, чтобы он понимал, что он неразумно живет.» © В. Г. Белинский

Исходный текст:

разум дан человеку того чтобы разумно жил того только чтобы понимал неразумно живет

После очистки:

Sh1 = разум дан человеку того чтобы разумно жил того только чтобыSh2 = дан человеку того чтобы разумно жил того только чтобы понималSh3 = человеку того чтобы разумно жил того только чтобы понимал неразумноSh4 = того чтобы разумно жил того только чтобы понимал неразумно живет

Шинглы будут выглядеть следующим образом:

16

Page 17: Matching theory

17

Machine learning

● Метод опорных векторов: Опорные объекты (Support Vector Machine, SVM)

● C-Support Vector Classification (SVC))● Логистическая регрессия (AUC ROC)● Градиентный бустинг над решающими деревьями● Случайный лес (Begging)● Нейронные сети (метод обратного распространения ошибки), глубокие

нейронные сети● Кластеризация (иерархическая кластеризация, обучение без учителя)● +Нелинейные методы понижения размерности● +Частичное обучение

Page 18: Matching theory

18

Machine learning. Постановка задачи

Page 19: Matching theory

19

Machine learning. Постановка задачи

Page 20: Matching theory

20

Machine learning. Как задаются ответы. Типы задач

Page 21: Matching theory

21

Machine learning. Моделирование

Page 22: Matching theory

22

Machine learning. Моделирование

Page 23: Matching theory

23

Machine learning. Моделирование

Page 24: Matching theory

24

Machine learningЭтапы обучения и применения модели

Page 25: Matching theory

25

Machine learning. Функционал качестваПереобучение

Page 26: Matching theory

26

Machine learning. Функционал качества

ROC-кривая (receiver operating characteristic, рабочая характеристика приёмника) — график, позволяющий оценить качество бинарной классификации,

Page 27: Matching theory

27

Machine learning

Логистическая регрессия или логит-регрессия (англ. logit model) — это статистическая модель, используемая для предсказания вероятности возникновения некоторого события путём подгонки данных к логистической кривой.Применяется для предсказания вероятности возникновения некоторого события по значениям множества признаков.

● Мультиколлинеарность сильно ухудшает качество (вводится компонент регуляризации l1 или l2)

● Чувствительно к скалированию.● Не переваривает категориальные признаки● Для многоклассовой классификации

используется Softmax-регрессия, Множественная логит-регрессия

Page 28: Matching theory

>>> measurements = [... {'city': 'Dubai', 'temperature': 33.},... {'city': 'London', 'temperature': 12.},... {'city': 'San Fransisco', 'temperature': 18.},... ]

>>> from sklearn.feature_extraction import DictVectorizer>>> vec = DictVectorizer()

>>> vec.fit_transform(measurements).toarray()array([[ 1., 0., 0., 33.], [ 0., 1., 0., 12.], [ 0., 0., 1., 18.]])

>>> vec.get_feature_names()['city=Dubai', 'city=London', 'city=San Fransisco', 'temperature']

>>> text = [... 'Алё. Петя, поищи в нашей базе Адольфа Швардсенеггера',... 'Вася Уткин, проживающий по адресу г. Санкт-Петербург...',... 'гражданин Уткин В., регион СПб...',... 'Разум дан человеку для того, чтобы он разумно жил, а не ... для того только, чтобы он понимал, что он неразумно живет.'... ]>>> from sklearn.feature_extraction.text import TfidfVectorizervectorizer = TfidfVectorizer(min_df=1)>>> array = vectorizer.fit_transform(text)>>> array.toarray()

array([[ 0.37796447, 0. , 0.37796447, 0.37796447, 0. , 0. , 0. , 0. , 0. , 0. , 0.37796447, 0. , 0. , 0. , 0. , 0.37796447, 0. , 0.37796447, 0. , 0. , 0. , 0. , 0. , 0. , 0. ,... 28

Machine learning. Векторизация

Page 29: Matching theory

29

Machine learning. Кластеризация

Page 30: Matching theory

30

Machine learning. Кластеризация. K-means

● Обучение без учителя● Но важным является

выбор числа кластеров!

Page 31: Matching theory

31

Machine learning. Иерархическая кластеризация

● Обучение без учителя● Заранее не известно

количество кластеров (дублей, групп)! Например как схожесть видов в биологии

● Вместо числа кластеров строим - иерархическую кластеризацию!Типы алгоритмов:

● агломеративные - объединяют в более крупные кластеры

● либо дивизимные - наоборот, дробят на более мелкие

Page 32: Matching theory

32

Machine learning. Иерархическая кластеризация

● Обучение без учителя● Заранее не известно

количество кластеров (дублей, групп)! Например как схожесть видов в биологии

● Вместо числа кластеров строим - иерархическую кластеризацию!Типы алгоритмов:

● агломеративные - объединяют в более крупные кластеры

● либо дивизимные - наоборот, дробят на более мелкие

Page 33: Matching theory

33

Machine learning. Иерархическая кластеризацияФормула Ланса-Уильямса

Page 34: Matching theory

34

Machine learning. Частные случаи формулы Ланса-Уильямса

Page 35: Matching theory

35

Machine learning. Визуализация кластеризации

Page 36: Matching theory

36

Нужны метаалгоритмы. Правила

Нормализовали что могли, разобрали по полям:1. “Вася Уткин, проживающий по адресу: г. Санкт-Петербург, ул. Красного

Курсанта 25Ж”2. “гражданин Уткин В., регион СПб, адрес Красного Курсанта улитса”

Как? Это отдельный вопрос

1. {name: “Вася”, family: “Уткин”, region: “г. Санкт-Петербург”, street: “ул. Красного Курсанта”, build: “25Ж”}

2. {name: “В”, family: “Уткин”, region: “СПб”, street: “Красного Курсанта”, build: “”}

● “В” это Василий, Виктор или Володя? Сравнивать?● “Красного Курсанта” - “ул.” Имеет значение? А если нет улицы?● Веса признаков?● Категории? Справочники?● ООО “Ромашка” =? ОАО Ромашка =? “Ромашка”

Pavel Alekseev
Переходный слайд где я предлагаю сказать что рассмотренная теория хороша, но без движка под разные типы данных, локали, настройки правил и т.п - никуда. И передам слово Руслану.
Page 37: Matching theory

Open source solutions1. https://github.com/larsga/Duke - Duke is a fast and flexible

deduplication engine written in Java (based on Lucene)

2. http://dedupe.readthedocs.org/en/latest/ - dedupe is a library that uses machine learning to perform de-duplication and entity resolution quickly on structured data. Python.

3. https://www.tensorflow.org/ TensorFlowis an open source software library for numerical computation using data flow graphs. By Google.

4. http://de.slideshare.net/teofili/text-categorization-with-lucene-and-solr Lucene + Solr. Duplications.

5. https://github.com/YannBrrd/elasticsearch-entity-resolution - This project is an interactive entity resolution plugin for Elasticsearch based on Duke. Basically, it uses Bayesian probabilities to compute probability. You can pretty much use it as an interactive deduplication engine

37

Pavel Alekseev
[email protected] , мне кажется стоит как минимум взглянуть на эти. Питоновская библиотека так вообще выглядит очень интересной.В особенности что питон может напрямую работать на Spark кластере.
Page 38: Matching theory

Использованные материалы

1. https://habrahabr.ru/post/114947/ - Фонетические алгоритмы. Никита Сметанин.

2. https://habrahabr.ru/post/114997/ - Нечёткий поиск в тексте и словаре.

3. https://habrahabr.ru/post/28752/ - Фонетический поиск.

4. https://habrahabr.ru/post/116824/ - Отслеживание объектов на видео. Анатолий Ализар.

5. https://www.youtube.com/watch?v=1GhNXHCQGsM - Predator: Camera That Learns. Zdenek Kalal.

6. https://yandex.ru/support/images/loaded-image.xml Поиск по картинке.

7. https://habrahabr.ru/post/65944/ - Поиск нечетких дубликатов. Алгоритм шинглов для веб-документов. Виталий Родненко.

8. http://www.codeisart.ru/blog/python-shingles-algorithm/ - Python: Алгоритм Шинглов — поиск нечетких дубликатов текста. VitaliyRodnenko, 19.01.2009.

9. https://ru.wikipedia.org/wiki/TF-IDF

10. https://ru.wikipedia.org/wiki/Неравенство_треугольника

11. https://ru.wikipedia.org/wiki/Расстояние_Левенштейна

12. https://ru.wikipedia.org/wiki/Расстояние_Дамерау_—_Левенштейна

13. https://www.coursera.org/learn/vvedenie-mashinnoe-obuchenie Coursera курс “Введение в машинное обучение”. Школа анализа данных Яндекса (ШАД), Высшая школа экономики.

14. https://ru.wikipedia.org/wiki/ROC-кривая

15. https://ru.wikipedia.org/wiki/Логистическая_регрессия

16. http://scikit-learn.org/stable/modules/feature_extraction.html#loading-features-from-dicts

38