SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
Поиск фраз в документах
РСЯ
Дмитрий Агафонов



Я.Субботник, Москва, 18 апреля 2009 года
Яндекс – много разных поисков.
Для пользователей.
А ещё есть внутренние поиски.
Их тоже много.


Сегодня – про один из них.
Подробно!


  2
Наш план
●   О чём речь
●   Кому это интересно
●   Много букв (картинки будут)
●   Ваши вопросы
●   Мои ответы



    3
О чём
Контекстная реклама: клиенты и площадки.
Клиенты дают рекламу.
Площадки дают место.


От клиентов – рекламные материалы. Много.
От площадок – документы в Интернете. Очень много.
Надо связать их эффективно. И быстро.




  4
О чём
Процесс привязки большой и сложный.
Одна из задач – найти фразу в документе и определить
её релевантность.


Несколько миллионов фраз. Надо найти все!
Время на размышление для одного документа: 20ms.


Как это сделать?


  5
О чём
У нас это решение нашей конкретной задачи.


Общие применения алгоритма:
●   Поиск коллекции наборов объектов во множестве
    объектов
●   Определение      релевантности   данных   заданным
    признакам
●   Классификация
●   Обратный поиск

    6
Кому интересно
●   Разработчикам
●   Менеджерам
●   Алгоритмистам
●   И мне тоже


Тем, кто решал подобную задачу или будет решать.




    7
Поехали!




8
Что в пути
●   Задача
●   Решение
        –   Собрать индекс из фраз
        –   Обработать документы




    9
Задача




10
Вроде всё просто
●   Есть много фраз
●   Есть один документ


Найти фразы в документе.
Посчитать их релевантность.




    11
На входе ⇐
Коллекция фраз. Фраза это:
       –   Множество слов
       –   Дополнительные условия


Документ это:
       –   Большое множество слов
                ●   Позиция слова
                ●   Вес слова
       –   Дополнительные условия



  12
На выходе ⇒
Найденные фразы + релевантность каждой фразы.
Фраза найдена если:
       –   Документ содержит все слова фразы
       –   Слова фразы находятся недалеко друг от друга
       –   Дополнительные условия фраз и документа
             соответствуют
Порядок слов не важен.




  13
Пример на буквах
Это две фразы:
●   ach
●   dfpu


Это документ: a b c d e f g h i j k l m n o p q r s t u v w x y z


Нашли.
Но фраза d f p u слишком размазана по документу.


    14
Решение




15
Две части решения
●   Собрать фразы в индекс
●   Обработать документ


А сначала пара особенностей.




    16
«Людям» = «человеку»
Посимвольно «людям» ≠ «человеку».
Есть леммер!
                 У слова несколько форм
                 Основная – Лемма
                 Иногда не одна
                               неизвестный японский автор


«людям»      (люди, человек)
«человеку»   (человек)

Набор лемм слова – каноническая форма слова.
Или далее просто «слово».

   17
Два приёма
●   Сделать всё числами
         –   Слова
         –   Леммы
         –   Фразы
         –   Всё остальное
●   Все числа упорядочить




    18
Сборка индекса




19
На входе ⇐
Коллекция фраз. Фраза это:
       –   Множество слов




Документ это:
       –   Большое множество слов
                ●   Позиция слова
                ●   Вес слова




  20
Этапы сборки индекса
●   Подготовить фразы
●   Построить индекс


Всего 11 простых действий :-)




    21
Фразы
●   Берём слова фраз




         «c a b»
         «b a»
         «a c»
         «b e d»




    22
Фразы
●   Берём слова фраз
●   Считаем частоты слов



         «c a b»           a–3
         «b a»             b–3
         «a c»             c–2
         «b e d»           d–1
                           e–1



    23
Фразы
●   Берём слова фраз
●   Считаем частоты слов
●   Переставляем слова во фразах по убыванию частоты

         «c a b»           a–3         «a b c»
         «b a»             b–3          «a b»
         «a c»             c–2          «a c»
         «b e d»           d–1         «b d e»
                           e–1



    24
Индекс
Строим дерево фраз
                              b   c

      «a b c»             a
      «a b»
      «a c»                   c

      «b d e»
                          b


                              d   e




 25
Индекс
Находим терминальные
узлы                          b
                                  ii
                                        c
                                            i


 i. «a b c»               a
 ii. «a b»
                                  iii
 iii. «a c»                   c

 iv. «b d e»
                          b

                                            iv
                              d         e




 26
Индекс
Красим узлы по типам
                                            ii          i
                                        b           c

 i. «a b c»                         a
 ii. «a b»
                                            iii
 iii. «a c»                             c

 iv. «b d e»
                                    b

                                                        iv
                                        d           e



          корневой   терминальный       остальные

 27
Индекс
Проводим вертикальные
уровни                                  b
                                            ii
                                                     c
                                                         i


 i. «a b c»                         a
 ii. «a b»
                                            ii
 iii. «a c»                             c

 iv. «b d e»
                                    b            i

                                                         iv
                                        d            e



          корневой   терминальный       остальные

 28
Индекс
Нумеруем узлы слева
направо и сверху вниз                3 b
                                           ii    6
                                                     c
                                                         i


 i. «a b c»                    1 a
 ii. «a b»
                                           iii
 iii. «a c»             0            4 c

 iv. «b d e»
                               2 b

                                                 7       iv
                                     5 d             e



          корневой   терминальный     остальные

 29
Индекс
Запоминаем диапазоны
номеров дочерних узлов                3   ii      6       i
                                      6 b             c

                               1
 i. «a b c»
                              3-4 a
 ii. «a b»
                                            iii
                      0               4 c
 iii. «a c»          1-2
 iv. «b d e»
                               2 b
                               5
                                                  7       iv
                                      5 d             e
                                      7


          корневой   терминальный      остальные

 30
Индекс
Делаем таблицу
Слово → Узлы дерева                    3   ii      6       i
                                       6 b             c

                                1
 i. «a b c»
                               3-4 a
 ii. «a b»
                                             iii
                       0               4 c
 iii. «a c»           1-2
 iv. «b d e»
                                2 b
 a        1                     5
 b        2, 3                                     7       iv
 c        4, 6                         5 d             e
 d        5                            7
 e        7

          корневой    терминальный      остальные

 31
Индекс
Делаем таблицу
Лемма → Слова                                            3   ii         6       i
                                                         6 b                c

                                              1
 i. «a b c»
                                             3-4 a
 ii. «a b»
                                                                  iii
                                     0                   4 c
 iii. «a c»                         1-2
 iv. «b d e»
                                               2 b
 a        1      α           a, b              5
 b        2, 3   β           e                                          7       iv
 c        4, 6   γ           c, d                        5 d                e
 d        5      δ           b                           7
 e        7      ε           a, c

     «людям»     (люди, человек)          люди → (люди,человек)

                                          человек → (человек), (люди,человек)
 32 «человеку»   (человек)
Индекс готов!




33
Теперь документ




34
Что делать с документом
●   Подготовить документ
●   Найти терминальные узлы в индексе
●   Проверить расстояния между словами фраз
●   Посчитать релевантность




    35
Есть кто живой? :-)




36
Что делать с документом
●   Подготовить документ
●   Найти терминальные узлы в индексе
●   Проверить расстояния между словами фраз
●   Посчитать релевантность




    37
Готовим документ




38
На входе ⇐
Коллекция фраз. Фраза это:
       –   Множество слов




Документ это:
       –   Большое множество слов
                ●   Позиция слова
                ●   Вес слова




  39
Готовим вообще
«людям»        (люди, человек)
«человеку»     (человек)

Надо чтобы «людям» из документа = «человеку» в
индексе. Поэтому не подходит поиск в индексе по
словам из документа. Надо искать через леммы.


Преобразуем документ в таблицу:
             Лемма → Список словопозиций с весами
Оригинал документа больше не нужен.

   40
Готовим для индекса
                                             лемма   слова
В узлах индекса слова, а не леммы.           α       a, b
                                             β       e
                                             γ       c, d
                                             δ       b
Преобразуем документ в другую таблицу:       ε       a, c

         Слово в индексе → Словопозиции и веса
Мы перевели документ в пространство слов индекса.
Теперь всё найдём!


Первая таблица Лемма → Список словопозиций с весами может
понадобиться для другого индекса.

  41
Ищем в индексе
     (особая поисковая магия)




42
Поиск
    Это – разреженный
                                                   3   ii      6       i
    интервал поиска™
                                                   6 b             c

0    1   2   3    4   5   6    7            1
                                           3-4 a

                                                         iii
                                     0             4 c
                                    1-2
         Это документ
                                            2 b
     a           1:5 2:7 9:4                5
     b           3:9 8:4
                                                               7       iv
     c           5:6                               5 d             e
     e           4:3 7:1                           7

     слова, позиции и веса


43
Поиск
Берём таблицу слова →
    узлы индекса                               3   ii        6       i
                                               6 b               c
         a      1
         b      2, 3                1
         c      4, 6               3-4 a
         d      5
                                                       iii
         e      7            0                 4 c
                            1-2

 Делаем из документа                2 b
 список узлов индекса               5
                                                             7       iv
     a       1:5 2:7 9:4                       5 d               e
     b       3:9 8:4                           7
     c       5:6
     e       4:3 7:1
                                   1   2   3   4   6    7

44
Поиск
1. Начинаем в корне, с пустым
   интервалом поиска.                                      3   ii        6       i
                                                           6 b               c
2. В каждом узле:
                                                1
      Обрезаем интервал от начала и до
                                               3-4 a
  ●

      номера текущего узла
      включительно.
                                                                   iii
                                          0                4 c
  ●   Если есть диапазон номеров
      дочерних узлов, добавляем его в
                                         1-2
      интервал.
                                                2 b
  ●   Если узел терминальный,                   5
      добавляем его фразы в список
      найденных.                                                         7       iv
                                                           5 d               e
3. Находим нижнюю границу                                  7
   пересечения интервала с
   документом. Это следующий
   узел.                                       1   2   3   4   6    7

      45
Пример
Пришли в узел 0
                                                     3   ii        6       i
Добавляем в пустой интервал                          6 b               c
диапазон 1-2
                                          1
                                         3-4 a

                                                             iii
                                    0                4 c
                                   1-2
0   1    2   3   4   5   6   7
                                          2 b
                                          5
                                                                   7       iv
                                                     5 d               e
                                                     7


                                         1   2   3   4   6    7

    46
Пример
Пришли в узел 1
                                                      3   ii        6       i
Удаляем из интервала 1                                6 b               c

Добавляем диапазон 3-4                     1
                                          3-4 a

                                                              iii
                                     0                4 c
                                    1-2
 0   1    2   3   4   5   6   7
                                           2 b
                                           5
                                                                    7       iv
                                                      5 d               e
                                                      7


                                          1   2   3   4   6    7

     47
Пример
Пришли в узел 2
                                                      3   ii        6       i
Удаляем из интервала 2                                6 b               c

Добавляем 5                                1
                                          3-4 a

                                                              iii
                                     0                4 c
                                    1-2
 0   1    2   3   4   5   6   7
                                           2 b
                                           5
                                                                    7       iv
                                                      5 d               e
                                                      7


                                          1   2   3   4   6    7

     48
Пример
Пришли в узел 3
                                                      3   ii        6       i
Удаляем из интервала 3                                6 b               c

Добавляем 6                                1
Нашли фразу «a b»!                        3-4 a

                                                              iii
                                     0                4 c
                                    1-2
 0   1    2   3   4   5   6   7
                                           2 b
                                           5
i. «a b c»                                                          7       iv
                                                      5 d               e
ii. «a b»                                             7

iii. «a c»
iv. «b d e»                               1   2   3   4   6    7

     49
Пример
Пришли в узел 4
                                                      3   ii        6       i
Удаляем из интервала 4                                6 b               c

Добавлять нечего                           1
Нашли фразу «a c»!                        3-4 a

                                                              iii
                                     0                4 c
                                    1-2
 0   1    2   3   4   5   6   7
                                           2 b
                                           5
i. «a b c»                                                          7       iv
                                                      5 d               e
ii. «a b»                                             7

iii. «a c»
iv. «b d e»                               1   2   3   4   6    7

     50
Пример
Пришли в узел 6
                                                                      3   ii        6       i
Удаляем из интервала 5-6                                              6 b               c

Добавлять снова нечего                                     1
Нашли фразу «a b c»!                                      3-4 a

Всё!                                                                          iii
                                                     0                4 c
                                                    1-2
 0     1    2   3   4   5   6       7
                                                           2 b
                                                           5
i. «a b c»                                                                          7       iv
                                                                      5 d               e
ii. «a b»                                                             7

iii. «a c»
iv. «b d e»                     a       b   c   e         1   2   3   4   6    7

       51
Заметки к поиску
●   Двигаемся по двум упорядоченным спискам чисел –
    высокая скорость поиска.
    0    1   2   3   4   5   6   7   1   2   3   4   6   7



●   В узлах можно проверять соответствие
    дополнительных условий фраз, «проходящих» через
    узел, и условий документа – можно не заходить в
    лишние ветки.
●   Для более сложных индексов и документов интервал
    поиска действительно становится разреженным, т. е.
    зелёные и серые участки вперемешку.
    52
Наш план
●   О чём речь
●   Кому это интересно
●   Много букв (картинки будут)
●   Ваши вопросы
●   Мои ответы



    53
Осталось чуть-чуть
●   Проверить расстояния между словами
    найденных фраз
●   Посчитать релевантность




    54
Пример на буквах
Это две фразы:
●   ach
●   dfpu


Это документ: a b c d e f g h i j k l m n o p q r s t u v w x y z


Нашли.
Но фраза d f p u слишком размазана по документу.


    55
Проверка расстояний
Мы знаем слова найденных фраз и их позиции в
документе.
         i. «a b c»
                              a         1:5 2:7 9:4
         ii. «a b»            b         3:9 8:4
                              c         5:6
         iii. «a c»           e         4:3 7:1
         iv. «b d e»
                                слова, позиции и веса

Делаем список словопозиций.
Привязываем позиции к фразам.
Проверяем за один проход.

  56
Релевантность
У слов найденных фраз есть веса в документе.
         i. «a b c»
                              a       1:5 2:7 9:4
         ii. «a b»            b       3:9 8:4
                              c       5:6
         iii. «a c»           e       4:3 7:1
         iv. «b d e»
                              слова, позиции и веса

Вычислить релевантность фраз можно, например, по TF-
IDF. Или другим методом.




  57
Вопросы?




58
Дмитрий Агафонов
Старший разработчик

111033, Россия, Москва,
ул. Самокатная, д. 1, стр. 21.

+7 (495) 739-00-00
+7 (495) 739-70-70 — факс

daga@yandex-team.ru

Weitere ähnliche Inhalte

Mehr von Yandex

Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 
Эталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатовЭталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатовYandex
 
Поиск списков в неструктурированных данных
Поиск списков в неструктурированных данныхПоиск списков в неструктурированных данных
Поиск списков в неструктурированных данныхYandex
 
Производительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыПроизводительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыYandex
 
Beminar js
Beminar jsBeminar js
Beminar jsYandex
 
Дмитрий Ветров. Математика больших данных: тензоры, нейросети, байесовский вы...
Дмитрий Ветров. Математика больших данных: тензоры, нейросети, байесовский вы...Дмитрий Ветров. Математика больших данных: тензоры, нейросети, байесовский вы...
Дмитрий Ветров. Математика больших данных: тензоры, нейросети, байесовский вы...Yandex
 
Анализ изображений и видео. Обнаружение текста на изображенияхслайды последней
Анализ изображений и видео. Обнаружение текста на изображенияхслайды последнейАнализ изображений и видео. Обнаружение текста на изображенияхслайды последней
Анализ изображений и видео. Обнаружение текста на изображенияхслайды последнейYandex
 
Вебинар по БЭМ: сборка и оптимизация проекта
Вебинар по БЭМ: сборка и оптимизация проектаВебинар по БЭМ: сборка и оптимизация проекта
Вебинар по БЭМ: сборка и оптимизация проектаYandex
 

Mehr von Yandex (20)

Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 
Эталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатовЭталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатов
 
Поиск списков в неструктурированных данных
Поиск списков в неструктурированных данныхПоиск списков в неструктурированных данных
Поиск списков в неструктурированных данных
 
Производительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыПроизводительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформы
 
Beminar js
Beminar jsBeminar js
Beminar js
 
Дмитрий Ветров. Математика больших данных: тензоры, нейросети, байесовский вы...
Дмитрий Ветров. Математика больших данных: тензоры, нейросети, байесовский вы...Дмитрий Ветров. Математика больших данных: тензоры, нейросети, байесовский вы...
Дмитрий Ветров. Математика больших данных: тензоры, нейросети, байесовский вы...
 
Анализ изображений и видео. Обнаружение текста на изображенияхслайды последней
Анализ изображений и видео. Обнаружение текста на изображенияхслайды последнейАнализ изображений и видео. Обнаружение текста на изображенияхслайды последней
Анализ изображений и видео. Обнаружение текста на изображенияхслайды последней
 
Вебинар по БЭМ: сборка и оптимизация проекта
Вебинар по БЭМ: сборка и оптимизация проектаВебинар по БЭМ: сборка и оптимизация проекта
Вебинар по БЭМ: сборка и оптимизация проекта
 

Дмитрий Агафонов "Поиск фраз в документах Рекламной Сети Яндекса"

  • 1. Поиск фраз в документах РСЯ Дмитрий Агафонов Я.Субботник, Москва, 18 апреля 2009 года
  • 2. Яндекс – много разных поисков. Для пользователей. А ещё есть внутренние поиски. Их тоже много. Сегодня – про один из них. Подробно! 2
  • 3. Наш план ● О чём речь ● Кому это интересно ● Много букв (картинки будут) ● Ваши вопросы ● Мои ответы 3
  • 4. О чём Контекстная реклама: клиенты и площадки. Клиенты дают рекламу. Площадки дают место. От клиентов – рекламные материалы. Много. От площадок – документы в Интернете. Очень много. Надо связать их эффективно. И быстро. 4
  • 5. О чём Процесс привязки большой и сложный. Одна из задач – найти фразу в документе и определить её релевантность. Несколько миллионов фраз. Надо найти все! Время на размышление для одного документа: 20ms. Как это сделать? 5
  • 6. О чём У нас это решение нашей конкретной задачи. Общие применения алгоритма: ● Поиск коллекции наборов объектов во множестве объектов ● Определение релевантности данных заданным признакам ● Классификация ● Обратный поиск 6
  • 7. Кому интересно ● Разработчикам ● Менеджерам ● Алгоритмистам ● И мне тоже Тем, кто решал подобную задачу или будет решать. 7
  • 9. Что в пути ● Задача ● Решение – Собрать индекс из фраз – Обработать документы 9
  • 11. Вроде всё просто ● Есть много фраз ● Есть один документ Найти фразы в документе. Посчитать их релевантность. 11
  • 12. На входе ⇐ Коллекция фраз. Фраза это: – Множество слов – Дополнительные условия Документ это: – Большое множество слов ● Позиция слова ● Вес слова – Дополнительные условия 12
  • 13. На выходе ⇒ Найденные фразы + релевантность каждой фразы. Фраза найдена если: – Документ содержит все слова фразы – Слова фразы находятся недалеко друг от друга – Дополнительные условия фраз и документа соответствуют Порядок слов не важен. 13
  • 14. Пример на буквах Это две фразы: ● ach ● dfpu Это документ: a b c d e f g h i j k l m n o p q r s t u v w x y z Нашли. Но фраза d f p u слишком размазана по документу. 14
  • 16. Две части решения ● Собрать фразы в индекс ● Обработать документ А сначала пара особенностей. 16
  • 17. «Людям» = «человеку» Посимвольно «людям» ≠ «человеку». Есть леммер! У слова несколько форм Основная – Лемма Иногда не одна неизвестный японский автор «людям» (люди, человек) «человеку» (человек) Набор лемм слова – каноническая форма слова. Или далее просто «слово». 17
  • 18. Два приёма ● Сделать всё числами – Слова – Леммы – Фразы – Всё остальное ● Все числа упорядочить 18
  • 20. На входе ⇐ Коллекция фраз. Фраза это: – Множество слов Документ это: – Большое множество слов ● Позиция слова ● Вес слова 20
  • 21. Этапы сборки индекса ● Подготовить фразы ● Построить индекс Всего 11 простых действий :-) 21
  • 22. Фразы ● Берём слова фраз «c a b» «b a» «a c» «b e d» 22
  • 23. Фразы ● Берём слова фраз ● Считаем частоты слов «c a b» a–3 «b a» b–3 «a c» c–2 «b e d» d–1 e–1 23
  • 24. Фразы ● Берём слова фраз ● Считаем частоты слов ● Переставляем слова во фразах по убыванию частоты «c a b» a–3 «a b c» «b a» b–3 «a b» «a c» c–2 «a c» «b e d» d–1 «b d e» e–1 24
  • 25. Индекс Строим дерево фраз b c «a b c» a «a b» «a c» c «b d e» b d e 25
  • 26. Индекс Находим терминальные узлы b ii c i i. «a b c» a ii. «a b» iii iii. «a c» c iv. «b d e» b iv d e 26
  • 27. Индекс Красим узлы по типам ii i b c i. «a b c» a ii. «a b» iii iii. «a c» c iv. «b d e» b iv d e корневой терминальный остальные 27
  • 28. Индекс Проводим вертикальные уровни b ii c i i. «a b c» a ii. «a b» ii iii. «a c» c iv. «b d e» b i iv d e корневой терминальный остальные 28
  • 29. Индекс Нумеруем узлы слева направо и сверху вниз 3 b ii 6 c i i. «a b c» 1 a ii. «a b» iii iii. «a c» 0 4 c iv. «b d e» 2 b 7 iv 5 d e корневой терминальный остальные 29
  • 30. Индекс Запоминаем диапазоны номеров дочерних узлов 3 ii 6 i 6 b c 1 i. «a b c» 3-4 a ii. «a b» iii 0 4 c iii. «a c» 1-2 iv. «b d e» 2 b 5 7 iv 5 d e 7 корневой терминальный остальные 30
  • 31. Индекс Делаем таблицу Слово → Узлы дерева 3 ii 6 i 6 b c 1 i. «a b c» 3-4 a ii. «a b» iii 0 4 c iii. «a c» 1-2 iv. «b d e» 2 b a 1 5 b 2, 3 7 iv c 4, 6 5 d e d 5 7 e 7 корневой терминальный остальные 31
  • 32. Индекс Делаем таблицу Лемма → Слова 3 ii 6 i 6 b c 1 i. «a b c» 3-4 a ii. «a b» iii 0 4 c iii. «a c» 1-2 iv. «b d e» 2 b a 1 α a, b 5 b 2, 3 β e 7 iv c 4, 6 γ c, d 5 d e d 5 δ b 7 e 7 ε a, c «людям» (люди, человек) люди → (люди,человек) человек → (человек), (люди,человек) 32 «человеку» (человек)
  • 35. Что делать с документом ● Подготовить документ ● Найти терминальные узлы в индексе ● Проверить расстояния между словами фраз ● Посчитать релевантность 35
  • 37. Что делать с документом ● Подготовить документ ● Найти терминальные узлы в индексе ● Проверить расстояния между словами фраз ● Посчитать релевантность 37
  • 39. На входе ⇐ Коллекция фраз. Фраза это: – Множество слов Документ это: – Большое множество слов ● Позиция слова ● Вес слова 39
  • 40. Готовим вообще «людям» (люди, человек) «человеку» (человек) Надо чтобы «людям» из документа = «человеку» в индексе. Поэтому не подходит поиск в индексе по словам из документа. Надо искать через леммы. Преобразуем документ в таблицу: Лемма → Список словопозиций с весами Оригинал документа больше не нужен. 40
  • 41. Готовим для индекса лемма слова В узлах индекса слова, а не леммы. α a, b β e γ c, d δ b Преобразуем документ в другую таблицу: ε a, c Слово в индексе → Словопозиции и веса Мы перевели документ в пространство слов индекса. Теперь всё найдём! Первая таблица Лемма → Список словопозиций с весами может понадобиться для другого индекса. 41
  • 42. Ищем в индексе (особая поисковая магия) 42
  • 43. Поиск Это – разреженный 3 ii 6 i интервал поиска™ 6 b c 0 1 2 3 4 5 6 7 1 3-4 a iii 0 4 c 1-2 Это документ 2 b a 1:5 2:7 9:4 5 b 3:9 8:4 7 iv c 5:6 5 d e e 4:3 7:1 7 слова, позиции и веса 43
  • 44. Поиск Берём таблицу слова → узлы индекса 3 ii 6 i 6 b c a 1 b 2, 3 1 c 4, 6 3-4 a d 5 iii e 7 0 4 c 1-2 Делаем из документа 2 b список узлов индекса 5 7 iv a 1:5 2:7 9:4 5 d e b 3:9 8:4 7 c 5:6 e 4:3 7:1 1 2 3 4 6 7 44
  • 45. Поиск 1. Начинаем в корне, с пустым интервалом поиска. 3 ii 6 i 6 b c 2. В каждом узле: 1 Обрезаем интервал от начала и до 3-4 a ● номера текущего узла включительно. iii 0 4 c ● Если есть диапазон номеров дочерних узлов, добавляем его в 1-2 интервал. 2 b ● Если узел терминальный, 5 добавляем его фразы в список найденных. 7 iv 5 d e 3. Находим нижнюю границу 7 пересечения интервала с документом. Это следующий узел. 1 2 3 4 6 7 45
  • 46. Пример Пришли в узел 0 3 ii 6 i Добавляем в пустой интервал 6 b c диапазон 1-2 1 3-4 a iii 0 4 c 1-2 0 1 2 3 4 5 6 7 2 b 5 7 iv 5 d e 7 1 2 3 4 6 7 46
  • 47. Пример Пришли в узел 1 3 ii 6 i Удаляем из интервала 1 6 b c Добавляем диапазон 3-4 1 3-4 a iii 0 4 c 1-2 0 1 2 3 4 5 6 7 2 b 5 7 iv 5 d e 7 1 2 3 4 6 7 47
  • 48. Пример Пришли в узел 2 3 ii 6 i Удаляем из интервала 2 6 b c Добавляем 5 1 3-4 a iii 0 4 c 1-2 0 1 2 3 4 5 6 7 2 b 5 7 iv 5 d e 7 1 2 3 4 6 7 48
  • 49. Пример Пришли в узел 3 3 ii 6 i Удаляем из интервала 3 6 b c Добавляем 6 1 Нашли фразу «a b»! 3-4 a iii 0 4 c 1-2 0 1 2 3 4 5 6 7 2 b 5 i. «a b c» 7 iv 5 d e ii. «a b» 7 iii. «a c» iv. «b d e» 1 2 3 4 6 7 49
  • 50. Пример Пришли в узел 4 3 ii 6 i Удаляем из интервала 4 6 b c Добавлять нечего 1 Нашли фразу «a c»! 3-4 a iii 0 4 c 1-2 0 1 2 3 4 5 6 7 2 b 5 i. «a b c» 7 iv 5 d e ii. «a b» 7 iii. «a c» iv. «b d e» 1 2 3 4 6 7 50
  • 51. Пример Пришли в узел 6 3 ii 6 i Удаляем из интервала 5-6 6 b c Добавлять снова нечего 1 Нашли фразу «a b c»! 3-4 a Всё! iii 0 4 c 1-2 0 1 2 3 4 5 6 7 2 b 5 i. «a b c» 7 iv 5 d e ii. «a b» 7 iii. «a c» iv. «b d e» a b c e 1 2 3 4 6 7 51
  • 52. Заметки к поиску ● Двигаемся по двум упорядоченным спискам чисел – высокая скорость поиска. 0 1 2 3 4 5 6 7 1 2 3 4 6 7 ● В узлах можно проверять соответствие дополнительных условий фраз, «проходящих» через узел, и условий документа – можно не заходить в лишние ветки. ● Для более сложных индексов и документов интервал поиска действительно становится разреженным, т. е. зелёные и серые участки вперемешку. 52
  • 53. Наш план ● О чём речь ● Кому это интересно ● Много букв (картинки будут) ● Ваши вопросы ● Мои ответы 53
  • 54. Осталось чуть-чуть ● Проверить расстояния между словами найденных фраз ● Посчитать релевантность 54
  • 55. Пример на буквах Это две фразы: ● ach ● dfpu Это документ: a b c d e f g h i j k l m n o p q r s t u v w x y z Нашли. Но фраза d f p u слишком размазана по документу. 55
  • 56. Проверка расстояний Мы знаем слова найденных фраз и их позиции в документе. i. «a b c» a 1:5 2:7 9:4 ii. «a b» b 3:9 8:4 c 5:6 iii. «a c» e 4:3 7:1 iv. «b d e» слова, позиции и веса Делаем список словопозиций. Привязываем позиции к фразам. Проверяем за один проход. 56
  • 57. Релевантность У слов найденных фраз есть веса в документе. i. «a b c» a 1:5 2:7 9:4 ii. «a b» b 3:9 8:4 c 5:6 iii. «a c» e 4:3 7:1 iv. «b d e» слова, позиции и веса Вычислить релевантность фраз можно, например, по TF- IDF. Или другим методом. 57
  • 59. Дмитрий Агафонов Старший разработчик 111033, Россия, Москва, ул. Самокатная, д. 1, стр. 21. +7 (495) 739-00-00 +7 (495) 739-70-70 — факс daga@yandex-team.ru