Рекомендательная система (семинар)

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Семинар проекта Рекомендательная система (проект), последние семинары здесь

Правила игры

Общение с ментором вне занятий семинара приветствуется. Можно задавать вопросы, в том числе философские, или советоваться. Но перед тем, как написать письмо, попробуйте спросить это у Яндекса. Также не обижайтесь, если в ответ вам пришла ссылка на документацию, поверьте, порой сложно объяснить лучше, чем написано там.

Ключевые точки

Сверху нам спущены ключевые точки выполнения проекта. Для нас они скорее явлются формальными, тем не менее мы должны их соблюдать.

  1. 1-6 февраля - первая неделя занятий со студентами.
  2. 22-28 февраля - 1 точка, вы определились с ресурсом, и приближайтесь к выполнению заданий на 4.
  3. 28 марта - 3 апреля - сессия у студентов.
  4. 25-30 апреля - 2 точка, часть на 4 выполнена и прошла ревью. Вы создали список заданий для повышения оценки и к нему приступили.
  5. 30 мая - 3 июня - окончание проектной работы, вы готовы, как пионеры.
  6. начало июня - конкурс проектов.

Репозиторий

Мы будем использовать git в качестве системы контроля версий. Удаленный репозиторий будет находиться на bitbucket. Заведите там себе учетную запись и создайте репозиторий учебного проекта. Он должен быть приватным, доступ должен быть только у вас, ментора и кураторов.

Разработка

У вас должен быть план и описание проекта, которые выложены на wiki репозитория. Также вы должны вести дневник своей разработки. Указывать там трудности, с которыми столкнулись, причины принятия тех или иных решений, анализ результатов и экспериментов.

Ваш процесс разработки должен выглядеть следующим образом. Вы создаете себе issue, даете исчерпывающее описание. Создаете новую ветку и ведете в ней разработку. Какие-то проверенные куски кода нужно фиксировать в виде commit-ов и делать периодические push в удаленный репозиторий. Когда issue выполнено, вы вливайтесь в master-ветку с помощью merge --squash и делаете commit, название которого соответствует выполненному issue.

Итоговый отчет

В своем отчете необходимо следующие вопросы. Будьте объективны.

  1. Чего вы ожидали от проекта? Оправдались ли ваши ожидания?
  2. Считаете ли вы этот опыт полезным?
  3. С какими новыми технологиями познакомились? Получили ли новые знания?
  4. Кратко опишите проделанную работу.
  5. Сильные и слабые стороны вашего проекта.
  6. Что бы хотели сделать, но не успели?
  7. Оцените сами себя по 10-балльной шкале.
  8. Как вы оцениваете работу ментора и общую организацию проекта? Укажите достоинства и недостатки.

В итоге необходимо прислать pdf и подготовить рассказ на 5-7 минут.

Материалы

Python

Общая информация

  1. О языке Python, и его стандартной библиотеке.
  2. Что такое GIL?

Стандартная библиотека

  1. Обработка ключей программы - argparse lib.
  2. Многопоточность в Python - threading.
  3. Работе с сетью - URL handling modules.
  4. Регулярные выражения - Regular expression operations.
  5. Парсер HTML - markup tool.
  6. Логирование - logging.
  7. Инструмент для отладки - pdb.

Библиотеки

  1. Математика - numpy и scipy
  2. Графики - plot
  3. Машинное обучение - SciKit learn.

Инструменты

  1. Менеджер пакетов - pip
  2. Удобная среда для экспериментов - IPyhton.
  3. Удобный редактор - Sublime Text 3.
  4. Популярная IDE для ленивых - PyCharm.

Примеры

  • Загрузка страницы семинара помощью библиотеки urllib [source].
  • Простейший парсер HTML5 (извлекает заголовок страницы семинар) [source].
  • Набор туториалов по машинному обучению.

Git

Книги

Статьи

Семинары

S05.31

Защита проектов. Итоговые оценки.

Студент Оценка
Остяков Павел 10
Иовлева Анастасия 8
Артемьев Максимилиан 8
Жилкина Ксения 7
Глазкова Екатерина 7
Крутой Никита 7
Лазарев Владислав 6
Батурин Валера 6

S04.19

Говорили о том, как делать первые шаги в обучение. Стоит почитать этот мануал. Там все достаточно подробно описано.На что нужно обратить внимание:

  1. Как из текста создать вектор признаков. Что такое tf-idf.
  2. Посмотреть, как обучается модель. Это очень просто.
  3. Обратить внимание на тестирование полученного классификатора и настройку его внешних параметров.

Начать свое обучение советую с SGDClassifier. Если будут какие-то вопросы, то обращайтесь. И не отчаивайтесь, если качество классификатора низкое. Это нормально, так как у вас маленькая выборка для обучения. Попробуйте разметить хотя бы 120 статей. Тогда можно разделить выборку на 3 части, к примеру, так: 80 - обучение, 20 -- настройка внешних параметров, 20 -- тестирование.

H04.16

Принципиально новый материал не был рассмотрен. Зато мы увидели, как Ксюша ела бургер :)

S04.12

Пообщались в Starbacks с теми, кто пришел.

  1. Как поднять демона.
  2. Что такое cron.
  3. Дал наводку на команду alias.

S04.06

Занятие не состоялось!

S03.16

  1. Говорили о градиентном спуске.
  2. Делали первые шаги в ipython и в машинном обучении на основе этого туториала.

S03.09

Задача линейной классификации

  1. Задача классификации.
  2. Линейная разделимость.
  3. Линейный классификатор.
  4. Метод наименьших квадратов.
  5. Логистическая регрессия.

Затронули тему создания признаков, а конкретно tf-idf.

Python

  1. Как работает импорт.
  2. Немного о документации в Python, или PEP-257.

Задание

  1. Подробно изучить метод градиентного спуска.
  2. Ознакомиться с SVM.

H02.23

  1. Провели своеобразный хакатон. Мне он показался не самым плодотворным...
  2. Поели пиццу с роллами и, надеюсь, еще больше сдружились.

Задание

  1. В предстоящие выходные (27-28) проведем первый раунд ревью. Доведите до ума то, что успеете. После ревью вы получите представление о том, как должен выглядеть код.

Материалы

  1. Пример crawler-а для simple wikipedia.

S02.17

  1. Обсудили, у кого какие проблемы возникли за прошедшую неделю.
  2. Договорились делать более подробные коммиты и таски.
  3. Провели небольшое введение в машинное обучение.

Задание

  1. Писать crawler
  2. Подумать, как дообучать линейный классификатор, если в мешке слов появляются новые частые слова
  3. Изучить команду less
  4. Изучить - это
  5. Добиться понимания, что такое http

S02.10

Как вести репозиторий

  1. Обязательно должна быть своя вики (та, которая на битбакете). В ней нужно вести подробный дневник разработки, так, чтобы можно было открыть и сразу понять, что происходит, как шла работа, зачем все и как устроено.
  2. Проект разбивается на подзадачи. Для каждой из них нужен емкий issue, справка на вики и отдельная ветка. Перед тем, как сливать с основной веткой, написать ментору для ревью.
  3. Для слияния веток использовать merge только с ключом --squash.

Ревью будет протекать по почте, в виде комментариев к diff'у между текущей версией и последней проверенной.

Git

Обсуждали, как в целом устроен git. Commited, stage, work, где что находится. Рассказали, как работает .gitignore в зависимости от расположения. Упомянули некоторые команды:

  • git add -i добавляет в stage не целый файл, а отдельные строчки;
  • git reset может удалять из stage;
  • git add -u добавляет только те файлы, которые раньше уже когда-то добавлялись;
  • git commit --amend позволяет поменять название последнего коммита;
  • git log показывает историю коммитов;
  • git status показывает статус (отслеживаемость) файлов;
  • git <comand> --help всегда подробно расскажет, как устроена команда и какие у нее есть интересные ключи.

Сrawler

Работа crawler'а проходит примерно следующим образом:

  1. Находит ссылки на все еще не скаченные статьи.
  2. Скачивает их и сохраняет в качестве html-текста в отдельную директорию.
  3. Чистит html от бесполезных тегов и прочего, оставляя только текст. Полученный результат сохраняется отдельно как txt-файл.

Если хочется использовать базы данных для хранения файлов, то выбирать те, с которыми можно работать напрямую через Python.

Crawler должен быть реализован как консольная утилита (см. библиотеку argparse) и в нем должны присутствовать следующие команды со следующими ключами:

  1. update. Только находит ссылки.
    • --help. Инструкция к команде.
    • --from. С какого числа искать статьи.
    • --to. По какое число искать статьи.
    • --print. Выписывает найденные ссылки.
  2. download. Скачивает статьи.
    • --help. Инструкция к команде.
    • --all. Догружает все незагруженные статьи.
    • [urls]. Загружает только определенные статьи.
    • -t. Для потоков, если они есть.
  3. clean. Чистит html статьи от мусора, оставляя только текст. Ключи аналогично download, кроме -t.

Использовать библиотеки, отличные от тех, которые указаны на этой вики-странице (например, requests, bs4), нельзя.

Примеры:

  • Загрузка страницы семинара помощью библиотеки urllib [source].
  • Простейший парсер HTML5 (извлекает заголовок страницы семинар) [source].

Задание

  1. К следующему семинару в вас должны быть наработки по crawler-у.
  2. Изучите команды man, ls, cd, screen, echo, cat, chmod.
  3. Почитайте про http.

Материалы

Про гит
  1. Кратко о контроле версий можно прочитать здесь.
  2. Git, за или против? Можно посмотреть здесь
  3. Git Vs Mercurial и Git Vs SVN
Про Python
  1. Библиотека argparse.
  2. Что такое GIL?
  3. Многопоточность в Python - threading.
Man
  1. Что такое man?
  2. Что такое screen?

S02.03

  1. Обсудили организационные моменты.
  2. Выяснили, кто какие ресурсы собирается взять (выбор можно изменить в течение недели).
  3. Поговорили о git.
  4. Дружно попили чай ;)

Немного о crawler-e

Необходимые операции:

  1. Скачать всю статью в HTML.
  2. Распарсить статью. Почистить от всякого мусора: картинок, ссылок, прочего, оставить только текст. Если есть опыт работы с базами, то можно использовать их, в противном случае лучше не тратить время на их изучение, достаточно хранить все в обычной директории. Распарсенные статьи хранятся отдельно, у них должны быть свои индексы и нужно уметь сопоставлять этот индекс с url статьи.
  3. Добыть ссылки на все статьи.
  4. Определить свежесть статьи.
  5. Получить ссылки нановые статьи.

Задание

  1. Разобраться c гитом, подготовить вопросы.
  2. Создать репозиторий проекта в bitbucket.
  3. Оценить сложность написания crawler-а для своего ресурса, возможно, изменить его.
  4. Кто уже знает git, по желанию может уже начать писать crawler.

Материалы