matching theory

Post on 21-Mar-2017

382 Views

Category:

Engineering

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

MatchingTheory

© Pavel Alexeev,2016

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

2

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

Matching

Matching

Search

3

Виды

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

4

ВидыВидео

5

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

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

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

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

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

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
Какое время и подробность нужны?Стоит описывать??:* Имплементации? Доступные реализации?* Сложности и особенности алгоритмов?* Хеширование, Индексы?* Очистка, канонизация, структуризация?

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

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

8

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

9

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

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

10

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

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

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

11

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

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

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

12

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

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

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

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

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

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

13

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

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

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

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

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

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

14

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

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

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

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

15

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

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

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

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

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

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

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

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

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

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

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

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

16

17

Machine learning

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

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

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

18

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

19

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

20

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

21

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

22

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

23

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

24

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

25

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

26

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

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

27

Machine learning

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

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

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

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

>>> 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. Векторизация

29

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

30

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

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

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

31

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

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

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

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

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

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

32

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

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

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

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

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

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

33

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

34

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

35

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

36

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

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

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

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

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

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

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

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

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
+ruslan.trachuk@taskdata.ru , мне кажется стоит как минимум взглянуть на эти. Питоновская библиотека так вообще выглядит очень интересной.В особенности что питон может напрямую работать на Spark кластере.

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

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

top related