Рекомендательная система (семинар) — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
м (Удалена лишняя пустая строка...)
 
(не показано 47 промежуточных версии 4 участников)
Строка 1: Строка 1:
== Общая информация ==
+
Семинар проекта [[Рекомендательная система (проект)]], последние семинары
Семинар проходит в Яндексе (корпус ШАДа), по средам, с 17:00. Встречаемся у входа в БЦ Мамонтов. Опоздание минут на 10 приводит к тому, что проектом вы будете заниматься дома, так что лучше все-таки не опаздывать.
+
[http://wiki.cs.hse.ru/Рекомендательная_система_(семинар)#.D0.A1.D0.B5.D0.BC.D0.B8.D0.BD.D0.B0.D1.80.D1.8B здесь]
  
Ментор: [[Участник:Simagin.denis|Денис Симагин]]. Вопросы задавать можно и нужно, но не те, ответ на которые можно найти на первой странице поисковой выдачи.
+
==Правила игры ==
 +
* '''Ментор:''' [[Участник:Simagin.denis|Симагин Денис]].
 +
* '''Место:''' офис Яндекса ([https://maps.yandex.ru/213/moscow/?ll=37.590150%2C55.734065&z=18&l=stv%2Csta&panorama%5Bpoint%5D=37.589416%2C55.733747&panorama%5Bdirection%5D=40.412258%2C-11.910596&panorama%5Bspan%5D=130.000000%2C52.209677 место встречи])
 +
* '''Время:''' c 17:30, вторник.
  
Описание проекта: [[Рекомендательная система (проект)]].
+
Общение с ментором вне занятий семинара приветствуется. Можно задавать вопросы, в том числе философские, или советоваться. Но перед тем, как написать письмо, попробуйте спросить это у [https://ya.ru Яндекса]. Также не обижайтесь, если в ответ вам пришла ссылка на документацию, поверьте, порой сложно объяснить лучше, чем написано там.
 +
 
 +
===Ключевые точки===
 +
Сверху нам спущены ключевые точки выполнения проекта. Для нас они скорее явлются формальными, тем не менее мы должны их соблюдать.
 +
# '''1-6 февраля''' - первая неделя занятий со студентами.
 +
# '''22-28 февраля''' - 1 точка, вы определились с ресурсом, и приближайтесь к выполнению заданий на 4.
 +
# '''28 марта - 3 апреля''' - сессия у студентов.
 +
# '''25-30 апреля''' - 2 точка, часть на 4 выполнена и прошла ревью. Вы создали список заданий для повышения оценки и к нему приступили.
 +
# '''30 мая - 3 июня''' - окончание проектной работы, вы готовы, как пионеры.
 +
# '''начало июня''' - конкурс проектов.
 +
 +
===Репозиторий===
 +
Мы будем использовать [https://en.wikipedia.org/wiki/Git_(software) git] в качестве системы контроля версий.
 +
Удаленный репозиторий будет находиться на [https://bitbucket.org bitbucket]. Заведите там себе учетную запись и создайте репозиторий учебного проекта. Он должен быть приватным, доступ должен быть только у вас, [https://bitbucket.org/dasimagin/profile/repositories ментора] и [https://bitbucket.org/cs-hse-projects/ кураторов].
 +
 
 +
===Разработка===
 +
У вас должен быть план и описание проекта, которые выложены на wiki репозитория. Также вы должны вести дневник своей разработки. Указывать там трудности, с которыми столкнулись, причины принятия тех или иных решений, анализ результатов и экспериментов.
 +
 
 +
Ваш процесс разработки должен выглядеть следующим образом. Вы создаете себе issue, даете исчерпывающее описание. Создаете новую ветку и ведете в ней разработку. Какие-то проверенные куски кода нужно фиксировать в виде commit-ов и делать периодические push в удаленный репозиторий. Когда issue выполнено, вы вливайтесь в master-ветку с помощью merge --squash и делаете commit, название которого соответствует выполненному issue.
 +
 
 +
===Итоговый отчет===
 +
В своем отчете необходимо следующие вопросы. Будьте объективны.
 +
# Чего вы ожидали от проекта? Оправдались ли ваши ожидания?
 +
# Считаете ли вы этот опыт полезным?
 +
# С какими новыми технологиями познакомились? Получили ли новые знания?
 +
# Кратко опишите проделанную работу.
 +
# Сильные и слабые стороны вашего проекта.
 +
# Что бы хотели сделать, но не успели?
 +
# Оцените сами себя по 10-балльной шкале.
 +
# Как вы оцениваете работу ментора и общую организацию проекта? Укажите достоинства и недостатки.
 +
 
 +
В итоге необходимо прислать pdf и подготовить рассказ на 5-7 минут.
  
 
==Материалы==
 
==Материалы==
 +
 
===Python===
 
===Python===
* [https://brett.is/writing/about/my-python-web-crawler/ My Python Web Crawler - Brett.Is] How to write a very simplistic Web Crawler in Python for fun.
+
====Общая информация====
 +
# О языке [https://docs.python.org/3/tutorial/index.html Python],  и его стандартной [https://docs.python.org/3/library/index.html библиотеке].
 +
# Что такое [https://en.wikipedia.org/wiki/Global_interpreter_lock GIL]?
 +
 
 +
====Стандартная библиотека====
 +
# Обработка ключей программы - [https://docs.python.org/3/library/argparse.html argparse lib].
 +
#  Многопоточность в Python - [https://docs.python.org/3/library/threading.html threading].
 +
# Работе с сетью - [https://docs.python.org/3/library/urllib.html URL handling modules].
 +
# Регулярные выражения - [https://docs.python.org/3/library/re.html Regular expression operations].
 +
# Парсер HTML - [https://docs.python.org/3/library/markup.html markup tool].
 +
# Логирование - [https://docs.python.org/3/library/logging.html logging].
 +
# Инструмент для отладки - [https://docs.python.org/3/library/pdb.html pdb].
 +
 
 +
====Библиотеки====
 +
# Математика - [http://docs.scipy.org/doc/numpy/reference/ numpy] и [http://docs.scipy.org/doc/scipy/reference/ scipy]
 +
# Графики - [http://matplotlib.org plot]
 +
# Машинное обучение - [http://scikit-learn.org/stable/index.html SciKit learn].
 +
 
 +
====Инструменты====
 +
# Менеджер пакетов - [http://pip.readthedocs.org/en/stable/ pip]
 +
# Удобная среда для экспериментов - [http://ipython.org/notebook IPyhton].
 +
# Удобный редактор - [http://www.sublimetext.com Sublime Text 3].
 +
# Популярная IDE для ленивых - [http://www.jetbrains.com/pycharm/ PyCharm].
 +
 
 +
===Примеры===
 +
* Загрузка страницы семинара помощью библиотеки urllib [http://pastebin.com/qcqdQZLD [source]].
 +
* Простейший парсер HTML5 (извлекает заголовок страницы семинар) [http://pastebin.com/fCshurqB [source]].
 +
* Набор [https://github.com/dasimagin/Project2016/tree/master/tutorials туториалов] по машинному обучению.
 +
 
 
===Git===
 
===Git===
 +
* Кратко о контроле версий можно прочитать [http://git-scm.com/book/ru/v1/Введение-О-контроле-версий здесь].
 +
* Git, за или против? Можно посмотреть [https://ru.wikipedia.org/wiki/Git#.D0.9F.D1.80.D0.B5.D0.B8.D0.BC.D1.83.D1.89.D0.B5.D1.81.D1.82.D0.B2.D0.B0_.D0.B8_.D0.BD.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D1.82.D0.BA.D0.B8 здесь]
 +
* [https://code.google.com/p/support/wiki/DVCSAnalysis Git Vs Mercurial] и [https://code.google.com/p/support/wiki/ChoosingAVersionControlSystem Git Vs SVN]
 
* [https://try.github.io Code School - Try Git] интерактивная почти игра, которая учит основным командам Git.
 
* [https://try.github.io Code School - Try Git] интерактивная почти игра, которая учит основным командам Git.
 
* [http://git-scm.com/doc Git - Documentation] официальная документация Git.  
 
* [http://git-scm.com/doc Git - Documentation] официальная документация Git.  
* [http://git-scm.com/book/ru/v1 Git - Book] перевод довольно обширной обучающей книги о Git от Скотта Шакона.
+
* [https://www.atlassian.com/git/tutorials/ Atlassian git tutorial] стань git гуру
 +
 
 
===Книги===
 
===Книги===
===Туториалы===
+
* [http://learning-python.com/books/about-lp5e.html Learning Python, 5th,  Mark Lutz]
 +
* [http://git-scm.com/book/ru/v1 Pro Git, 1th, Scott Chacon and Ben Straub]
 +
 
 +
===Статьи===
 +
* [https://brett.is/writing/about/my-python-web-crawler/ My Python Web Crawler - Brett.Is] How to write a very simplistic Web Crawler in Python for fun.
 +
 
 
== Семинары ==
 
== Семинары ==
===S02.03===
 
Первая встреча. Обсуждали организационные моменты. Оговорили, кто какие ресурсы собирается взять для своей рекомендательной системы, но этот выбор еще можно поменять в течение недели. Указания к ресурсу: должно быть достаточно много статей, более-менее одной тематики.
 
  
Для хранения кода будет использоваться git, по крайней мере на первых порах. Соответственно, главное задание на эту неделю — разобраться с git'ом.  
+
===S05.31===
 +
Защита проектов. Итоговые оценки.
  
Также необходимо изучить выбранный ресурс и подумать, каким именно образом выкачивать оттуда статьи (например, бежать по ссылкам или использовать ленту).
+
{| class="wikitable"
 +
|-
 +
! Студент !! Оценка
 +
|-
 +
| Остяков Павел || 10
 +
|-
 +
| Иовлева Анастасия || 8
 +
|-
 +
| Артемьев Максимилиан || 8
 +
|-
 +
| Жилкина Ксения || 7
 +
|-
 +
| Глазкова Екатерина  || 7
 +
|-
 +
| Крутой Никита  || 7
 +
|-
 +
| Лазарев Владислав  || 6
 +
|-
 +
| Батурин Валера  || 6
 +
|}
  
Кто уже знает git, по желанию может уже начать писать crawler. Что для этого нужно:
+
===S04.19===
 +
Говорили о том, как делать первые шаги в обучение.
 +
Стоит почитать [http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html этот] мануал.
 +
Там все достаточно подробно описано.На что нужно обратить внимание:
 +
# Как из текста создать вектор признаков. Что такое  tf-idf.
 +
# Посмотреть, как обучается модель. Это очень просто.
 +
# Обратить внимание на тестирование полученного классификатора и настройку его внешних параметров.
 +
 
 +
Начать свое обучение советую с [http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier SGDClassifier].
 +
Если будут какие-то вопросы, то обращайтесь. И не отчаивайтесь, если качество классификатора низкое. Это нормально, так как у вас маленькая выборка для обучения.
 +
Попробуйте разметить хотя бы 120 статей. Тогда можно разделить выборку на 3 части, к примеру, так: 80 - обучение, 20 -- настройка внешних параметров, 20 -- тестирование.
 +
 
 +
===H04.16===
 +
Принципиально новый материал не был рассмотрен. Зато мы увидели, как [https://vk.com/zhuzhilkina Ксюша] ела бургер :)
 +
 
 +
===S04.12===
 +
Пообщались в Starbacks с теми, кто пришел.
 +
 
 +
# Как поднять демона.
 +
# Что такое [https://en.wikipedia.org/wiki/Cron cron].
 +
# Дал наводку на команду [https://en.wikipedia.org/wiki/Alias_(command) alias].
 +
 
 +
===S04.06===
 +
 
 +
''Занятие не состоялось!''
 +
 
 +
===S03.16===
 +
 
 +
# Говорили  о [https://en.wikipedia.org/wiki/Gradient_descent градиентном спуске].
 +
# Делали первые шаги в ipython и в машинном обучении на основе этого [https://github.com/dasimagin/Project2016/blob/master/tutorials/1.Linear%20regresion.ipynb туториала].
 +
 
 +
===S03.09===
 +
====Задача линейной классификации====
 +
# [https://en.wikipedia.org/wiki/Statistical_classification Задача классификации].
 +
# [https://en.wikipedia.org/wiki/Linear_separability Линейная разделимость].
 +
# [http://www.machinelearning.ru/wiki/index.php?title=Линейный_классификатор Линейный классификатор].
 +
# [http://www.machinelearning.ru/wiki/index.php?title=Метод_наименьших_квадратов Метод наименьших квадратов].
 +
# [http://www.machinelearning.ru/wiki/index.php?title=Логистическая_регрессия Логистическая регрессия].
 +
 
 +
Затронули тему создания признаков, а конкретно [https://en.wikipedia.org/wiki/Tf–idf tf-idf].
 +
 
 +
====Python====
 +
# Как работает [https://docs.python.org/3/reference/import.html импорт].
 +
# Немного о документации в Python, или [https://www.python.org/dev/peps/pep-0257/ PEP-257].
 +
 
 +
====Задание====
 +
# Подробно изучить [http://www.machinelearning.ru/wiki/index.php?title=Метод_градиентного_спуска метод градиентного спуска].
 +
# Ознакомиться с [http://www.machinelearning.ru/wiki/index.php?title=SVM SVM].
 +
 
 +
===H02.23===
 +
# Провели своеобразный хакатон. Мне он показался не самым плодотворным...
 +
# Поели пиццу с роллами и, надеюсь, еще больше сдружились.
 +
 
 +
====Задание====
 +
# В предстоящие выходные (27-28) проведем первый раунд ревью. Доведите до ума то, что успеете. После ревью вы получите представление о том, как должен выглядеть код.
 +
 
 +
====Материалы====
 +
# Пример [https://github.com/dasimagin/Project2016/tree/master/wiki-crawler crawler-а] для [https://simple.wikipedia.org simple wikipedia].
 +
 
 +
----
 +
 
 +
===S02.17===
 +
# Обсудили, у кого какие проблемы возникли за прошедшую неделю.
 +
# Договорились делать более подробные коммиты и таски.
 +
# Провели небольшое введение в машинное обучение.
 +
 
 +
====Задание====
 +
# Писать crawler
 +
# Подумать, как дообучать линейный классификатор, если в мешке слов появляются новые частые слова
 +
# Изучить команду [https://en.wikipedia.org/wiki/Less_(Unix) less]
 +
# Изучить - [https://docs.python.org/3.5/tutorial/interpreter.html это]
 +
# Добиться понимания, что такое [https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol http]
 +
 
 +
----
 +
 
 +
===S02.10===
 +
 
 +
====Как вести репозиторий====
 +
# Обязательно должна быть своя вики (та, которая на битбакете). В ней нужно вести подробный дневник разработки, так, чтобы можно было открыть и сразу понять, что происходит, как шла работа, зачем все и как устроено.
 +
# Проект разбивается на подзадачи. Для каждой из них нужен емкий issue, справка на вики и отдельная ветка. Перед тем, как сливать с основной веткой, написать ментору для ревью.
 +
# Для слияния веток использовать 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'а проходит примерно следующим образом:
 +
# Находит ссылки на все еще не скаченные статьи.
 +
# Скачивает их и сохраняет в качестве html-текста в отдельную директорию.
 +
# Чистит html от бесполезных тегов и прочего, оставляя только текст. Полученный результат сохраняется отдельно как txt-файл.
 +
Если хочется использовать базы данных для хранения файлов, то выбирать те, с которыми можно работать напрямую через Python.
 +
 
 +
Crawler должен быть реализован как консольная утилита (см. библиотеку argparse) и в нем должны присутствовать следующие команды со следующими ключами:
 +
#update. Только находит ссылки.
 +
#*--help. Инструкция к команде.
 +
#*--from. С какого числа искать статьи.
 +
#*--to. По какое число искать статьи.
 +
#*--print. Выписывает найденные ссылки.
 +
#download. Скачивает статьи.
 +
#*--help. Инструкция к команде.
 +
#*--all. Догружает все незагруженные статьи.
 +
#*[urls]. Загружает только определенные статьи.
 +
#*-t. Для потоков, если они есть.
 +
#clean. Чистит html статьи от мусора, оставляя только текст. Ключи аналогично download, кроме -t.
 +
Использовать библиотеки, отличные от тех, которые указаны на этой вики-странице (например, requests, bs4), нельзя.
 +
 
 +
Примеры:
 +
* Загрузка страницы семинара помощью библиотеки urllib [http://pastebin.com/qcqdQZLD [source]].
 +
* Простейший парсер HTML5 (извлекает заголовок страницы семинар) [http://pastebin.com/fCshurqB [source]].
 +
 
 +
====Задание====
 +
# К следующему семинару в вас должны быть наработки по crawler-у.
 +
# Изучите команды man, ls, cd, screen, echo, cat,  chmod.
 +
# Почитайте про [https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol http].
 +
 
 +
====Материалы====
 +
=====Про гит=====
 +
# Кратко о контроле версий можно прочитать [http://git-scm.com/book/ru/v1/Введение-О-контроле-версий здесь].
 +
# Git, за или против? Можно посмотреть [https://ru.wikipedia.org/wiki/Git#.D0.9F.D1.80.D0.B5.D0.B8.D0.BC.D1.83.D1.89.D0.B5.D1.81.D1.82.D0.B2.D0.B0_.D0.B8_.D0.BD.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D1.82.D0.BA.D0.B8 здесь]
 +
# [https://code.google.com/p/support/wiki/DVCSAnalysis Git Vs Mercurial] и [https://code.google.com/p/support/wiki/ChoosingAVersionControlSystem Git Vs SVN]
 +
 
 +
=====Про Python=====
 +
# Библиотека [https://docs.python.org/3/library/argparse.html argparse].
 +
# Что такое [https://en.wikipedia.org/wiki/Global_interpreter_lock GIL]?
 +
#  Многопоточность в Python - [https://docs.python.org/3/library/threading.html threading].
 +
 
 +
=====Man=====
 +
# Что такое [https://en.wikipedia.org/wiki/Man_page man]?
 +
# Что такое [https://en.wikipedia.org/wiki/GNU_Screen screen]?
 +
 
 +
----
 +
 
 +
===S02.03===
 +
# Обсудили организационные моменты.
 +
# Выяснили, кто какие ресурсы собирается взять (выбор можно изменить в течение недели).
 +
# Поговорили о git.
 +
# Дружно попили чай ;)
 +
 
 +
====Немного о crawler-e====
 +
Необходимые операции:
 
# Скачать всю статью в HTML.
 
# Скачать всю статью в HTML.
# Распарсить эту статью. Почистить от всякого мусора: картинок, ссылок, прочего, оставить только текст. Если есть опыт работы с базами, то можно использовать их, в противном случае лучше не тратить время на их изучение, достаточно хранить все в обычной директории. Распарсенные статьи хранятся отдельно, у них должны быть свои индексы и нужно уметь сопоставлять этот индекс с url статьи.
+
# Распарсить статью. Почистить от всякого мусора: картинок, ссылок, прочего, оставить только текст. Если есть опыт работы с базами, то можно использовать их, в противном случае лучше не тратить время на их изучение, достаточно хранить все в обычной директории. Распарсенные статьи хранятся отдельно, у них должны быть свои индексы и нужно уметь сопоставлять этот индекс с url статьи.
# Выкачать таким образом весь ресурс (mining).
+
# Добыть ссылки на все статьи.
# Уметь определять свежесть статьи.
+
# Определить свежесть статьи.
# Уметь получать новые статьи.
+
# Получить ссылки нановые статьи.
  
Потенциально полезные ссылки:
+
====Задание====
* [https://try.github.io Code School - Try Git] интерактивная почти игра, которая учит основным командам Git.
+
# Разобраться c гитом, подготовить вопросы.
 +
# Создать репозиторий проекта в bitbucket.
 +
# Оценить сложность написания crawler-а для своего ресурса, возможно, изменить его.
 +
# Кто уже знает git, по желанию может уже начать писать crawler.
 +
 
 +
====Материалы====
 +
* [https://try.github.io Code School - Try Git] интерактивная игра, которая учит основным командам Git.
 
* [http://git-scm.com/doc Git - Documentation] официальная документация Git.  
 
* [http://git-scm.com/doc Git - Documentation] официальная документация Git.  
 
* [http://git-scm.com/book/ru/v1 Git - Book] перевод довольно обширной обучающей книги о Git от Скотта Шакона.
 
* [http://git-scm.com/book/ru/v1 Git - Book] перевод довольно обширной обучающей книги о Git от Скотта Шакона.
 
* [https://github.com/andreiled/mipt-cs-4sem/wiki/%D0%9F%D0%BE%D1%88%D0%B0%D0%B3%D0%BE%D0%B2%D0%B0%D1%8F-%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F-%D0%BF%D0%BE-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5-%D1%81-git-%D0%B8-github-%D0%B4%D0%BB%D1%8F-%D1%81%D1%82%D1%83%D0%B4%D0%B5%D0%BD%D1%82%D0%BE%D0%B2 Пошаговая инструкция по работе с git и github для студентов] маленькая обзорная статья, с чего начать.
 
* [https://github.com/andreiled/mipt-cs-4sem/wiki/%D0%9F%D0%BE%D1%88%D0%B0%D0%B3%D0%BE%D0%B2%D0%B0%D1%8F-%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F-%D0%BF%D0%BE-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5-%D1%81-git-%D0%B8-github-%D0%B4%D0%BB%D1%8F-%D1%81%D1%82%D1%83%D0%B4%D0%B5%D0%BD%D1%82%D0%BE%D0%B2 Пошаговая инструкция по работе с git и github для студентов] маленькая обзорная статья, с чего начать.
 
* [https://brett.is/writing/about/my-python-web-crawler/ My Python Web Crawler - Brett.Is] How to write a very simplistic Web Crawler in Python for fun.
 
* [https://brett.is/writing/about/my-python-web-crawler/ My Python Web Crawler - Brett.Is] How to write a very simplistic Web Crawler in Python for fun.

Текущая версия на 14:05, 1 июня 2016

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

Правила игры

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

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

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

  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.

Материалы