В этом году  предлагается решить задачу автоматического определения авторства текста.
Решения проверяются автоматически. Для этого надо прислать на адрес nlp.lectures@gmail.com письмо в формате text/plain с использованием только латинских символов, которое будет содержать

  • в названии только слово submission
  • первой строчкой письма название системы
  • второй строчкой фамилия и имя автора и номер группы
  • и файл с программой, запакованный архиватором zip

Архив должен обязательно содержать

  • классификатор в файле Solution.py. В файле должен содержаться класс Solution, в конструкторе класса должна подгружаться обученная модель классификации. Кроме того в классе должен присутствовать метод  classify(self,doc), который получает на вход документ и возвращает имя автора.
  • модель классификатора
  • описание применяемых алгоритмов в файле description.txt
  • все используемые внешние библиотеки, кроме библиотек пакета NLTK (они доступны автоматически)
В ответ на это письмо вы получите результат автоматического тестирования.

Для обучения классификаторов можно использовать тренировочное множество, доступное по ссылке (trainingSet.zip 19.7Mb).
Для допуска к экзамену необходимо сделать систему, работающую лучше системы Baseline (нижней границы). Код этой системы доступен по ссылке (baseline.zip).  F1 мера нижней границы на проверочном корпусе равна 57.83%.
Для возможности получения оценки отлично надо сделать классификатор, работающий лучше ExcellentBaseline ( F1 мера 77.11%). Код этого классификатора будет выложен после окончания соревнования.
Результаты всех классификаторов можно посмотреть в таблице.  Сейчас плохо поддерживается русский язык, так что пока пишите имена на английском.
Для проверки классификатора на собственном компьютере, рекомендуется использовать метод перекрестной проверки на тренировочном множестве. Пример реализации такой проверки можно найти в файле CrossValidation.zip.
Все вопросы относительно проверки заданий просьба присылать на sbartunov@gmail.com

Для тестирования классификаторов использовалось тестовое множество документов: testingSet.zip

ЧАВО

В: Я послал письмо, а ответа не дождался. В чем дело?
О: Проверочная система неидеальна, иногда она падает, хотя мы работаем над её стабильностью. Напишите кому-нибудь письмо, мы её поднимем и проверим ваше решение.

 

В: В ответном письме мне сообщили, что мое решение упало с кодом ошибки 1. Как же так, у меня все работает!
О: Есть топ самых распространных ошибок, которые мы наблюдаем при проверке решения.
1.
/....../zipa501ad26-1cc2-11e1-8ead-52540071c41b/Solution.py:42:
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode -
interpreting them as being unequal
  intersection = set(v1.keys()).intersection(set(v2.keys()))
2.
Traceback (most recent call last):
  File "main.py", line 50, in <module>
    run.test(solution)
  File "main.py", line 30, in test
    docClass = classifier.classify(documentAndClass[0])
  File "/....../zip1278108e-1cc3-11e1-8ead-52540071c41b/Solution.py", line 118, in classify
    matrix = self.getMatrix(doc)
  File "/...../zip1278108e-1cc3-11e1-8ead-52540071c41b/Solution.py", line 29, in getMatrix
    doc = doc.decode('cp1251')
  File "/usr/lib/python2.7/encodings/cp1251.py", line 15, in decode
    return codecs.charmap_decode(input,errors,decoding_table)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)
Если у вас возникает данная ошибка, то возможно вам следует учесть, что входные данные поступают в ваше решение, будучи прочитанными при помощи codecs.open с указанием нужной кодировки, то есть никаких дополнительных преобразований выполнять не нужно.

 

В: А можно мне узнать, почему именно упала моя программа?
О: Можно. Напишите нам, мы специально прогоним ваше решение и отправим вам stdout и stderr вашего решения, если, конечно, там все честно.

 

В: А к чему вообще такая конспирация? Почему бы вам не отправлять в ответном письме stdout и stderr моего решения? Ну или хотя бы stderr.
О: Мы, к сожалению, не знаем, как определить, содержится ли в stderr только информация об исключении, так неудачно помешавшем занять первое место, или попытка "засветить" тестовую выборку. Если вы знаете, как можно было бы это понять, то расскажите.

 

В: А можно моему решению открывать сетевые соединения или файлы на запись?
О: Нет, нельзя.

 

В: Мое решение слишком большое и не принимается почтовым сервисом gmail. Что делать?
О: На данный момент предполагается, что это разумное и естесственное ограничение размера модели, так как у участников получается в него укладываться и при этом показывать хорошие результаты. В будущем мы, возможно, что-нибудь придумаем.

 

В: Мое решение показывает очень хорошие результаты на кросс-валидации, но на ваших данных результаты ниже. Почему так?
О: Тестовая выборка не идентична обучаемой, а кросс-валидация это кросс-валидация.