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

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
Строка 11: Строка 11:
  
 
=== Что это за проект? ===
 
=== Что это за проект? ===
Создание [https://en.wikipedia.org/wiki/Recommender_system рекомендательной системы], которая собирает статьи каких-то интернет ресурсов,
+
Создание [https://en.wikipedia.org/wiki/Recommender_system рекомендательной системы], которая собирает статьи c некоторого интернет-ресурса, обучается на основе оценок пользователя и предлагает ему для прочтения наиболее интересные. Это может быть рекомендательная система новостей, постов на хабре, твитов и т.п. (можно предложить свой вариант). В ходе взаимодействия пользователь (а им будет сам студент ;) ), ставит отметку предложенной статье (нравится или не нравится) . Эта информация агрегируется, и на основе ее обучается [https://en.wikipedia.org/wiki/Linear_classifier линейный классификатор] поверх модели [https://en.wikipedia.org/wiki/Bag-of-words_model мешка слов].
а затем в ходе обучения пытается предложить пользователю наиболее интересные из них. Это может быть рекомендательная система новостей, постов на хабре, твитов и т.п. (можно предложить свой вариант). В ходе обучения пользователь (а им будет сам студент ;) ), будет ставить отметку нравится ли ему предложенная системой статья или нет. Эта информация будет учитываться, а с помощью нее обучаться [https://en.wikipedia.org/wiki/Linear_classifier линейный классификатор] поверх модели [https://en.wikipedia.org/wiki/Bag-of-words_model мешка слов].
+
  
 
Проект состоит из двух обязательных частей, которые нужно выполнить для оценки 4 (зачет):
 
Проект состоит из двух обязательных частей, которые нужно выполнить для оценки 4 (зачет):
# Реализация [https://en.wikipedia.org/wiki/Web_crawler crawler-а], собирающего статьи
+
# Реализация [https://en.wikipedia.org/wiki/Web_crawler crawler-а], собирающего статьи;
# Реализация линейнего классификатора и консольной утилиты, позволяющая читать пользователю статьи и оценивать их.
+
# Реализация линейнего классификатора и консольной утилиты, позволяющей читать и оценивать статьи.
  
 
Также есть части на выбор:
 
Также есть части на выбор:
# Реализация web-интерфейса на основе библиотеки Django (4 балла)
+
# Реализация web-интерфейса на основе библиотеки Django (4 балла);
# Поиск похожих документов по коллекции, удаление дубликатов (2 балла)
+
# Поиск похожих документов по коллекции, удаление дубликатов (2 балла);
# Выделение семантического ядра языка (1 балл)
+
# Выделение семантического ядра языка (1 балл);
# Реализация распределенного crawler-а (master + workers +  queue) (3 балла )
+
# Реализация распределенного crawler-а (master + workers +  queue) (3 балла );
# Реализация линейнего классификатора в виде C/C++ модуля для Python3 (3 балла)
+
# Реализация линейнего классификатора в виде C/C++ модуля для Python3 (3 балла);
# Предложить алгоритм учета свежести статьи  в процессе рекомендации (2 балла)
+
# Предложить алгоритм учета свежести статьи  в процессе рекомендации (2 балла);
# Применить подход однорукого бандита для выбора следующей статья для показа/обучения (3 балла)
+
# Применить подход однорукого бандита для выбора следующей статьи для показа/обучения (3 балла);
# Предложить и реализовать улучшение базового классификатора (до 6 баллов)
+
# Предложить и реализовать улучшение базового классификатора (до 6 баллов).
  
 
=== Чему вы научитесь? ===
 
=== Чему вы научитесь? ===
Вы точно пройдете все круги ада, начиная от прототипирования интерфейсов и заканчивая тестированием ;)
+
Вы точно пройдете все круги ада, от прототипирования интерфейсов до тестирования.
  
 
'''В зависимости от выбранных заданий вы можете:'''
 
'''В зависимости от выбранных заданий вы можете:'''
# Получить опыт написания кода на Python, создать собственный модуль для языка.
+
# Получить опыт написания кода на Python, создать собственный модуль для языка;
# Научиться работать с Unix-подобной системой.
+
# Научиться работать с UNIX-подобной системой;
# Изучить одну из популярных баз данных.
+
# Изучить одну из популярных баз данных;
# Узнать что такое машинное обучение.
+
# Узнать, что такое машинное обучение.
  
=== Какие начальные требования? ===
+
===Какие начальные требования?===
# Наличие машины с unix-подобной ОС
+
# Наличие машины с UNIX-подобной ОС;
# Базовые знания Python или желание интенсивно изучать этот язык
+
# Базовые знания Python или желание интенсивно изучать этот язык.
  
=== Какие будут использоваться технологии? ===
+
===Какие будут использоваться технологии?===
 
'''Вы точно будете использовать:'''
 
'''Вы точно будете использовать:'''
# Unix подобную ОС + вашу любимую командную оболочку
+
# UNIX-подобную ОС + вашу любимую командную оболочку;
# Python3
+
# Python3;
# Git
+
# Git.
  
 
'''В зависимости от выбранных заданий вы можете изучить:'''
 
'''В зависимости от выбранных заданий вы можете изучить:'''
# Библиотеку Django
+
# Библиотеку Django;
# Одну из популярных баз данных
+
# Одну из популярных баз данных;
# Библиотеку boost::python
+
# Библиотеку boost::python.
  
=== Темы вводных занятий ===
+
===Темы вводных занятий===
# Обсуждение общих организационных вопросов
+
# Обсуждение общих организационных вопросов;
# Введение в Git
+
# Введение в Git;
 
# Введение в машинное обучение. Линейный классификатор.
 
# Введение в машинное обучение. Линейный классификатор.
  
 
При необходимости можно провести несколько занятий по Python3.
 
При необходимости можно провести несколько занятий по Python3.
  
=== Направления развития ===
+
===Направления развития===
# Cоздание красивого web-интерфейса
+
# Cоздание красивого web-интерфейса;
# Улучшение качества классификации
+
# Улучшение качества классификации;
# Масштабирование
+
# Масштабирование.
  
=== Критерии оценки ===
+
===Критерии оценки===
 
Оценка складывается из общей суммы заданий, которые успешно выполнены. Однако для получения 10 необходимо хорошее выступление на защите проекта, иначе оценка будет не выше 9.
 
Оценка складывается из общей суммы заданий, которые успешно выполнены. Однако для получения 10 необходимо хорошее выступление на защите проекта, иначе оценка будет не выше 9.
  
=== Ориентировочное расписание занятий ===
+
===Ориентировочное расписание занятий===
# ПН 18:00-20:00
+
# ПН 18:00-20:00;
# ВТ 8:00-10:00 либо 18:00-20:00
+
# ВТ 8:00-10:00 либо 18:00-20:00;
# CР Недоступен
+
# CР Недоступен;
# ЧТ 8:00-10:00 либо 18:00-20:00
+
# ЧТ 8:00-10:00 либо 18:00-20:00;
# ПТ Недоступен
+
# ПТ Недоступен;
# СБ 8:00 - 20:00
+
# СБ 8:00 - 20:00.

Версия 00:21, 22 ноября 2015

Ментор Симагин Денис
Учебный семестр Весна 2016
Учебный курс 1-й курс
Проект можно развивать на летней практике
Максимальное количество студентов, выбравших проект: 8



Что это за проект?

Создание рекомендательной системы, которая собирает статьи c некоторого интернет-ресурса, обучается на основе оценок пользователя и предлагает ему для прочтения наиболее интересные. Это может быть рекомендательная система новостей, постов на хабре, твитов и т.п. (можно предложить свой вариант). В ходе взаимодействия пользователь (а им будет сам студент ;) ), ставит отметку предложенной статье (нравится или не нравится) . Эта информация агрегируется, и на основе ее обучается линейный классификатор поверх модели мешка слов.

Проект состоит из двух обязательных частей, которые нужно выполнить для оценки 4 (зачет):

  1. Реализация crawler-а, собирающего статьи;
  2. Реализация линейнего классификатора и консольной утилиты, позволяющей читать и оценивать статьи.

Также есть части на выбор:

  1. Реализация web-интерфейса на основе библиотеки Django (4 балла);
  2. Поиск похожих документов по коллекции, удаление дубликатов (2 балла);
  3. Выделение семантического ядра языка (1 балл);
  4. Реализация распределенного crawler-а (master + workers + queue) (3 балла );
  5. Реализация линейнего классификатора в виде C/C++ модуля для Python3 (3 балла);
  6. Предложить алгоритм учета свежести статьи в процессе рекомендации (2 балла);
  7. Применить подход однорукого бандита для выбора следующей статьи для показа/обучения (3 балла);
  8. Предложить и реализовать улучшение базового классификатора (до 6 баллов).

Чему вы научитесь?

Вы точно пройдете все круги ада, от прототипирования интерфейсов до тестирования.

В зависимости от выбранных заданий вы можете:

  1. Получить опыт написания кода на Python, создать собственный модуль для языка;
  2. Научиться работать с UNIX-подобной системой;
  3. Изучить одну из популярных баз данных;
  4. Узнать, что такое машинное обучение.

Какие начальные требования?

  1. Наличие машины с UNIX-подобной ОС;
  2. Базовые знания Python или желание интенсивно изучать этот язык.

Какие будут использоваться технологии?

Вы точно будете использовать:

  1. UNIX-подобную ОС + вашу любимую командную оболочку;
  2. Python3;
  3. Git.

В зависимости от выбранных заданий вы можете изучить:

  1. Библиотеку Django;
  2. Одну из популярных баз данных;
  3. Библиотеку boost::python.

Темы вводных занятий

  1. Обсуждение общих организационных вопросов;
  2. Введение в Git;
  3. Введение в машинное обучение. Линейный классификатор.

При необходимости можно провести несколько занятий по Python3.

Направления развития

  1. Cоздание красивого web-интерфейса;
  2. Улучшение качества классификации;
  3. Масштабирование.

Критерии оценки

Оценка складывается из общей суммы заданий, которые успешно выполнены. Однако для получения 10 необходимо хорошее выступление на защите проекта, иначе оценка будет не выше 9.

Ориентировочное расписание занятий

  1. ПН 18:00-20:00;
  2. ВТ 8:00-10:00 либо 18:00-20:00;
  3. CР Недоступен;
  4. ЧТ 8:00-10:00 либо 18:00-20:00;
  5. ПТ Недоступен;
  6. СБ 8:00 - 20:00.