А. Фирсов "Найти за одну секунду - 2", dump-2014

27
Найти за одну секунду -2 Антон Фирсов Knoema

Upload: it-people

Post on 26-Jan-2015

219 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Найти за одну секунду - 2

Антон Фирсов

Knoema

Page 2: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Что такое Нома?

Knoema.com – это веб-сайт, где можно найтиоткрытые данные на любую тему длялюбой страны мира из кучи разныхисточников

У нас собран самый большой репозиторийстатистических данных в мире и контента,

сделанного на их основе

2

Page 3: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Несколько метрик

Количество наборов данных – 3500+

Количество временных рядов – 250M+

Размер базы – 130Gb+

И все это растет десятками процентов вмесяц

3

Page 4: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Проблема

Навигация, рубрикатор, теги, темы – это всезамечательно, но ведь никто сейчас непользуется каталогами, а идут сразу на Google

и Yandex. Не так ли?

Нам нужен поиск!

4

Page 5: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Демо

5

Page 6: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Демо

6

Page 7: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Причины реализации собственного движка

Специфические данные:

структурированные, мало текста и многоцифр.

Необходимость собственного, сильноспецифического алгоритма ранжирования

– Алгоритм ранжирования в поиске – это одно изнаших ключевых ноу-хау

Специальные возможности

Работа на ограниченных ресурсах железа

Эффективное использование ресурсов

7

Page 8: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Хранение данных

Mexico – Oranges – Production Quantity

Mexico – Oranges – Area Harvested

Mexico – Oranges – Yield

Mexico – Apples – Production Quantity

Mexico – Apples – Area Harvested

Mexico – Apples – Yield

Portugal – Oranges – Production Quantity

Egypt – Oranges – Production Quantity

8

Страна С/X культуры Показатель

Egypt Apples Yield

Mexico Bananas Area harvested

Portugal Oranges Production quantity

United States of America Olives

Potatoes

Категория Категория

Терм

Ряд

Page 9: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Демо

9

Page 10: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Ключевые требования

СКОРОСТЬ, СКОРОСТЬ, СКОРОСТЬ

Учет различных словоформ

Исправление ошибок, возникающих принаборе

Эффективное использование ресурсов

10

Page 11: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Архитектура

11

Сервер приложений

База данных

Данные

Запрос Ответ

Поисковый сервер

Индекс

Снимоксостояния

Сервер приложений

Page 12: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Этапы выполнения поискового запроса

Разбивка на слова

Коррекция ошибок

Учет различных словоформ

Учет синонимов

Ранжирование результатов

12

Page 13: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Коррекция ошибок. Расстояние Левенштейна

Пример

13

В С С В С С

N O M A

K N O E M A

З З З З

Х Л Е Б

П И В О

Решение «в лоб»: перебрать все слова, имеющиеся вБД, выбрать то, рассояние от которого до слова иззапроса минимально.

Ассимптотическая сложность: k * n * m

k – количество слов в словаре

n – средняя длинна слова в словаре

m – длинна слова из запроса

C С С У С С

П Е Р Ь M Ь

П Е Р M Ь

Page 14: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Коррекция ошибок. Оптимизация

14

П

Й

Я

К Р А Й

ОГ

ИЬ К

.

ОСМ

Р

ЕУМ

. : 1.0ПЕРНЬ

Page 15: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Коррекция ошибок. Оптимизация

15

П

Й

Я

К Р А Й

ОГ

ИЬ К

.

ОСМ

Р

ЕУМ

П : 1.0ПЕРНЬ

К : 0.8ПЕРНЬ

Page 16: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Коррекция ошибок. Оптимизация

16

П

Й

Я

К Р А Й

ОГ

ИЬ К

.

ОСМ

Р

ЕУМ

ПЕ : 1.0ПЕРНЬ

К : 0.8ПЕРНЬ

Page 17: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Коррекция ошибок. Оптимизация

17

П

Й

Я

К Р А Й

ОГ

ИЬ К

.

ОСМ

Р

ЕУМ

ПЕР : 1.0ПЕРНЬ

К : 0.8ПЕРНЬ

Page 18: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Коррекция ошибок. Оптимизация

18

П

Й

Я

К Р А Й

ОГ

ИЬ К

.

ОСМ

Р

ЕУМ

ПЕРМ : 0.8ПЕРНЬ

К : 0.8ПЕРНЬ

Page 19: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Коррекция ошибок. Оптимизация

19

П

Й

Я

К Р А Й

ОГ

ИЬ К

.

ОСМ

Р

ЕУМ

ПЕРМ : 0.8ПЕРНЬ

КР : 0.6ПЕРНЬ

Page 20: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Коррекция ошибок. Оптимизация

20

П

Й

Я

К Р А Й

ОГ

ИЬ К

.

ОСМ

Р

ЕУМ

ПЕРМЬ : 0.8ПЕРНЬ

КР : 0.6ПЕРНЬ

Page 21: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Учет различных словоформ

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

Считать все слова с достаточно длиннымсовпадающим префиксом словоформамиодного и того же слова

Словоформы – как частный случай ошибокв написании слов

Аналогично п.3, но меньше снижатьрелевантность, если основа слова иокончание используются в других словах

21

Page 22: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Учет различных словоформ

Пермский край

Пермского края

Пермскому краю

Пермском крае

.....

Алтайский край

Алтайского края

Алтайскому краю

Алтайском крае

.....

Валовой внутренний продукт

Валового внутреннего продукта

Валовому внутреннему продукту

Валовом внутреннем продукте

22

Префикс Кол. Окончание Кол. Вес

П 8 ЕРМСКИЙ 1 8

ПЕ 4 РМСКИЙ 1 4

ПЕР 4 МСКИЙ 1 4

ПЕРМ 4 СКИЙ 2 8

ПЕРМС 4 КИЙ 2 8

ПЕРМСК 4 ИЙ 3 12

ПЕРМСКИ 1 Й 5 5

Page 23: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Получение результатов

23

Mexico

Egypt

States

United

Mexico

Egypt

United States

United States

of America

USA

Слова Термы

Harvested

Area

Oranges

Area harvested

Oranges

Mexico – Oranges – Area harvested

USA – Oranges – Area harvested

Результаты

United States of America

United States - GDP

Page 24: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Как эффективно использовать память в .net

Проблемы:

Минимизировать потребляемую память

Минимизировать время, затрачиваемое насборку мусора

Решение:

Использовать массивы из структур вместоколлекций из классов

Объединять массивы с малым количествомэлементов в большие массивы

24

Page 25: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Как эффективно использовать память в .net

25

8 байтsyncblock

8 байтТип

8 байтРазмер массива

8 байтСсылка на элемент массива

8 байтСсылка на элемент массива

8 байтСсылка на элемент массива

8 байтСсылка на элемент массива

8 байтsyncblock

8 байтТип

Данные

8 байтsyncblock

8 байтТип

элементов

8 байтРазмер массива

Элемент данных Элемент данных

Массив из структур

Массив объектов класса

Page 26: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Результаты

Реализован относительно быстрый поиск(~1-2 сек.) на слабом оборудовании,

потребляющий 13Гб памяти ипозволяющий исправлять ошибки внаписании слов и учитывать различныесловоформы в разных языках.

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

26

Page 27: А. Фирсов "Найти за одну секунду - 2", DUMP-2014

Спасибо за внимание!

Вопросики?

http://knoema.com

27