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

Материал из 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.

Материалы

Python

  1. Обработке ключей программы - argparse lib.
  2. Работе с сетью - URL handling modules.
  3. Регулярным выражениям - Regular expression operations.
  4. Парсеру HTML - markup tool.
  • Хорошие библиотеки для математики numpy и scipy, а также plot для графиков.
  • Библиотеки для машинного обучения - SciKit learn.
  • Удобная среда для экспериментов - IPyhton.

Примеры

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

Git

Man man

  • Что такое man?
  • Что такое screen?

Книги

Статьи

Семинары

S02.17

Обсудили, у кого какие проблемы возникли за прошедшую неделю. Договорились делать более подробные коммиты и таски: не просто "пишу crawler", а "пишу update, с помощью такой-то библиотеки, с такими-то ключами..." и так далее.

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

Задание

  1. Писать crawler.
  2. Подумать, как дообучать линейный классификатор, если в мешке слов появляются новые частые слова.

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.

Материалы