15. Обход сайта:
обычно - правила
• Переходить по ссылкам /contact, /about и т.д. (в
зависимости от задачи);
• переходить по ссылкам, ведущим на тот же домен;
• ограничения на глубину переходов;
• ограничения на общее количество переходов;
• ...
• паджинация?
• формы поиска?
16. Извлечение информации
• Правила / регекспы работают неплохо для
телефонов, факсов и т.д.
• Правила работают хуже для более сложных
задач: имена людей, названия организаций и т.д.
• В науке задача известна как Named Entity
Recognition (NER).
17. Named Entity Recognition
Для английского языка часто решается с помощью
машинного обучения
1. Определяем, что именно хотим найти.
2. Размечаем веб-страницы вручную.
3. Тренируем модель на размеченных данных.
4. Извлекаем информацию из новых веб-страниц.
18. Named Entity Recognition
Для английского языка часто решается с помощью
машинного обучения
1. Определяем, что именно хотим найти.1
2. Размечаем веб-страницы вручную.
3. Тренируем модель на размеченных данных.
4. Извлекаем информацию из новых веб-страниц.
19. 1. Примеры именованных
сущностей
• название организации
• имя человека
• должность человека
• адрес (дом, улица и т.д.)
• город
• штат, провинция, область
• страна
• телефон
• факс
• время работы
20. 1. Примеры именованных
сущностей
• название организации - ORG
• имя человека - PER
• должность человека - FUNC
• адрес (дом, улица и т.д.) - STREET
• город - CITY
• штат, провинция, область - STATE
• страна - COUNTRY
• телефон - TEL
• факс - FAX
• время работы - HOURS
21. Named Entity Recognition
Для английского языка часто решается с помощью
машинного обучения
1. Определяем, что именно хотим найти.
2. Размечаем веб-страницы вручную.1
3. Тренируем модель на размеченных данных.
4. Извлекаем информацию из новых веб-страниц.
24. Named Entity Recognition
Для английского языка часто решается с помощью
машинного обучения
1. Определяем, что именно хотим найти.
2. Размечаем веб-страницы вручную.
3. Тренируем модель на размеченных данных.1
4. Извлекаем информацию из новых веб-страниц.
25. 3. Приводим задачу к виду,
удобному для машинного обучения
• Веб-страница => последовательность токенов;
• для каждого токена сохраняем информацию о
том, где он расположен в HTML;
• каждому токену присваиваем метку.
Инструмент:
https://github.com/scrapinghub/webstruct
28. Свели задачу к "стандартной"
задаче классификации
• Входные данные - информация о токене (фичи)
• Предсказание - метка, закодированная IOB
• ... + одна тонкость - чтоб улучшить качество
предсказания, используют классификаторы,
учитывающие последовательность меток (обычно
это Conditional Random Fields)
30. Собираем все вместе
(один из вариантов)
• Размечаем веб-странички с помощью WebAnnotator
• Используем WebStruct, чтобы загрузить
тренировочные данные, закодировать сущности в IOB
• Пишем функции извлечения фич (и/или используем
готовые из WebStruct)
• Тренируем CRF-модель с помощью python-crfsuite
• С помощью WebStruct соединяем все вместе
31. Недостатки
• Нужно достаточно много тренировочных данных
(хорошо бы несколько сотен страниц)
• 100% точности достичь невозможно
• Если фичи извлекаются питоньими функциями, и
их много, то это не очень быстро (5-20 страниц в
секунду)
32. Достоинства
• Работает;
• понятно, как улучшать;
• понятно, как адаптировать к новой предметной
области;
• часть работы (разметка тренировочных данных)
может быть выполнена непрограммистом.
33. Советы
• Понимать, что происходит внутри;
• не действовать "вслепую", не воспринимать все
как черный ящик
• пройти курсы на Coursera / ...
• почитать книжки.