<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%28%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%29</id>
	<title>Рекомендательная система (проект) - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%28%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%29"/>
	<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;action=history"/>
	<updated>2026-06-06T17:12:19Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wikicshse.ru/index.php?title=%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=2435&amp;oldid=prev</id>
		<title>imported&gt;GalinaKaleeva: Migrated current public revision from wiki.cs.hse.ru</title>
		<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=2435&amp;oldid=prev"/>
		<updated>2017-07-28T13:17:39Z</updated>

		<summary type="html">&lt;p&gt;Migrated current public revision from wiki.cs.hse.ru&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Рекомендательная система&lt;br /&gt;
|mentor=Симагин Денис&lt;br /&gt;
|mentor_login={{URLENCODE:Simagin.denis|WIKI}}&lt;br /&gt;
|semester=Весна 2016&lt;br /&gt;
|course=1&lt;br /&gt;
|summer=on&lt;br /&gt;
|number_of_students=8&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Семинар проекта можно найти [http://wiki.cs.hse.ru/Рекомендательная_система_(семинар) здесь].&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Создание [https://en.wikipedia.org/wiki/Recommender_system рекомендательной системы] статей. Предметная область может варьироваться: новости, посты на хабре, твиты и т.п. (можно предложить свой вариант). Предполагается создание самодостаточной системы, которая делает следующее:&lt;br /&gt;
# Обходит ресурс и скачивает его статьи&lt;br /&gt;
# Предоставляет интерфейс прочтения статьи и ее оценивания&lt;br /&gt;
# Предлагает пользователю наиболее интересные статьи на основе его оценок&lt;br /&gt;
В качестве примера можно взять сервис [https://zen.yandex.ru Яндекс Zen].&lt;br /&gt;
&lt;br /&gt;
Проект состоит из двух частей. Первая является обязательной и необходима для получения оценки 4 (зачет):&lt;br /&gt;
# Реализация [https://en.wikipedia.org/wiki/Web_crawler crawler-а], собирающего статьи;&lt;br /&gt;
# Создание некоторой консольной утилиты, позволяющей: ставить оценки, обучать модель и смотреть рекомендации. Обучение проводится  с помощью [https://en.wikipedia.org/wiki/Linear_classifier линейного классификатора] на основе модели [https://en.wikipedia.org/wiki/Bag-of-words_model мешка слов]. Для обучения предполагается использовать готовую библиотеку [http://scikit-learn.org/ Scikit learn].&lt;br /&gt;
&lt;br /&gt;
Хочется, чтобы проект был интересен как можно большему количеству человек. Поэтому следующая часть является вариативной. Она состоит из заданий на выбор, при этом выполнение каждого стоит какое-то количество баллов:&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Линейный классификатор на Python (2 + 1).&amp;#039;&amp;#039;&amp;#039; На основе библиотеки  [http://www.scipy.org SciPy] необходимо написать собственный линейный классификатор. В качестве образца интерфейса можно взять реализацию из Scikit learn (2 балла). Дополнительные баллы можно получить, если реализован [https://en.wikipedia.org/wiki/Feature_hashing hashing trick] (1 балл).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Линейный классификатор на С++ и обертка для Python (3 + 1).&amp;#039;&amp;#039;&amp;#039; Необходимо реализовать линейный классификатор на С++. Для задач линейной алгебры можно использовать сторонние библиотеки, к примеру [http://www.boost.org/doc/libs/1_59_0/libs/numeric/ublas/doc/index.html boost::uBLAS]. Для полученного класса необходимо сделать Python обертку. В этом вам может помочь библиотека [http://www.boost.org/doc/libs/1_59_0/libs/python/doc/index.html boot::python] (3 балла). Дополнительные баллы можно получить, если реализован [https://en.wikipedia.org/wiki/Feature_hashing hashing trick] (1 балл).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Семантическое ядро языка (1 + 1).&amp;#039;&amp;#039;&amp;#039; Необходимо выделить [https://ru.wikipedia.org/wiki/Семантическое_ядро семантическое ядро] вашего ресурса и заново обучить модель, качество предсказание должно улучшиться (1 балл).  За проведенный анализ различных подходов или анализ параметров применяемого подхода можно получить дополнительный баллы (1 балл).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Свежесть статьи (2).&amp;#039;&amp;#039;&amp;#039; Статьи имеют такое свойство, как устаревать. Нет смысла, к примеру, показывать новости годичной давности. Студенту предоставляется возможность предложить свой способ учета свежести в процессе рекомендации.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Удаление дубликатов (2).&amp;#039;&amp;#039;&amp;#039; Порой статьи того или иного ресурса дублируют себя, к примеру, много твитов может быть посвящено выходу нового эпизода &amp;quot;Звездных войн&amp;quot;. Нет смысла показывать их все, даже если они очень интересны пользователю. Такие дубликаты необходимо объединять в группы и показывать только одного представителя. Алгоритмы поиска дубликатов есть разные, необходимо выбрать какой-то из них и реализовать.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Exploitation + exploration (4).&amp;#039;&amp;#039;&amp;#039; Предполагается, что пользователь просматривает статьи последовательно. Система должна соблюдать баланс между тем, чтобы предлагать пользователю наиболее интересные стать и тем, чтобы как можно лучше изучить его предпочтения. Для этого студенту предоставляется возможность разобраться в теме [https://en.wikipedia.org/wiki/Reinforcement_learning reinforcement learning] и преложить свое решение.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Распределенный crawler (4).&amp;#039;&amp;#039;&amp;#039; Реализация распределенной версии crawler-а, которая предполагает наличие мастера, нескольких работающих блоков и очереди с заданиями.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Простой web-сервер на  Django (4).&amp;#039;&amp;#039;&amp;#039; Необходимо реализовать простейший wеb-сервер на основе библиотеки [https://www.djangoproject.com Django]. Сервис должен предоставлять собой одну страницу, на которой показана статья. Пользователь может оценить статью (нравится/не нравится) и попросить систему предложить ему новую. Загрузку статьи и постановку оценки необходимо реализовать через [https://en.wikipedia.org/wiki/Ajax_(programming) AJAX].&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Улучшение качества классификатора (6).&amp;#039;&amp;#039;&amp;#039; Если у студента есть какие-то предложения по улучшению качества классификатора, то он может предложить и реализовать их. При этом качество должно значимо улучшиться (до 6 баллов).&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
Вы точно пройдете все круги ада, от прототипирования интерфейсов до тестирования. А если серьезно, то вы точно:&lt;br /&gt;
* Будете работать с UNIX-подобной системой&lt;br /&gt;
* Пройдете систему ревью, тестирования, научитесь работать с Git&lt;br /&gt;
* Поработаете с сетью, получите опыт работы с большим объемом текстовых данных&lt;br /&gt;
* Получите базовые навыки по машинному обучению, познакомитесь с популярной библиотекой Scikit learn&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;В зависимости от выбранных заданий вы можете:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Познакомиться с базами данных&lt;br /&gt;
* Узнаете интересные вещи о обработке текстов и машинном обучении&lt;br /&gt;
* Создадите самый настоящий web-сервис&lt;br /&gt;
* Научитесь делать обертку для Python&lt;br /&gt;
&lt;br /&gt;
===Какие начальные требования?===&lt;br /&gt;
* Наличие машины с UNIX-подобной ОС.&lt;br /&gt;
* Базовые знания Python и желание интенсивно изучать этот язык.&lt;br /&gt;
&lt;br /&gt;
===Какие будут использоваться технологии?===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Вы точно будете использовать:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* UNIX-подобную ОС + вашу любимую командную оболочку&lt;br /&gt;
* Python 3 + познакомиться с Scikit learn и SciPy.&lt;br /&gt;
* Поработаете с Git.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;В зависимости от выбранных заданий вы можете изучить:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Библиотеку Django + HTML + AJAX&lt;br /&gt;
* Одну из популярных баз данных&lt;br /&gt;
* Библиотеку boost::python&lt;br /&gt;
* Библиотеку boost::uBlas&lt;br /&gt;
&lt;br /&gt;
===Темы вводных занятий===&lt;br /&gt;
* Обсуждение общих организационных вопросов&lt;br /&gt;
* Введение в Git&lt;br /&gt;
* Введение в машинное обучение. Линейный классификатор&lt;br /&gt;
* При необходимости можно провести несколько занятий по Python 3&lt;br /&gt;
&lt;br /&gt;
В зависимости от состава группы и выбранных частей могут быть проведены дополнительные занятия, посвященный той или иной тематике.&lt;br /&gt;
&lt;br /&gt;
===Направления развития===&lt;br /&gt;
* Развитие серверной части. Улучшение web-интерфейса и развитие функциональности ресурса. Ровняться можно опять же на Яндекс Zen.&lt;br /&gt;
* Улучшение качества рекомендаций. Тут работа просто безгранична. Можно применять новые модели, развивать систему, когда с ней работает несколько пользователей и т.д.&lt;br /&gt;
* Масштабирование. Можно работать в инженерном плане. Увеличивать отказоустойчивость системы, ускорять ее работу, устойчивость к нагрузкам.&lt;br /&gt;
&lt;br /&gt;
===Критерии оценки===&lt;br /&gt;
Итог складывается из общей суммы заданий, которые выполнены успешно. Я твердый сторонник идеи, что кроме технических навыков человек должен обладать хорошими умениями общения и коммуникации, в том числе и искусством презентовать свою работу. Поэтому для получения&lt;br /&gt;
10 баллов необходимо хорошее выступление на защите проекта, иначе оценка будет не выше 9.&lt;br /&gt;
&lt;br /&gt;
===Ориентировочное расписание занятий===&lt;br /&gt;
&lt;br /&gt;
Если группа студентов согласиться проводить занятия в Яндексе то это будет любое удобное для них время во вторник, среду или четверг. В Вышке занятия я могу проводить только по средам. О времени договоримся.&lt;/div&gt;</summary>
		<author><name>imported&gt;GalinaKaleeva</name></author>
	</entry>
</feed>