Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://sp.cs.msu.ru/courses/scheme/vesna.html
Дата изменения: Fri Nov 13 20:11:34 2015 Дата индексирования: Sun Apr 10 00:08:50 2016 Кодировка: Windows-1251 |
Задание «Весна». 2015-16 учебный год |
|||
Нет проблем! Мы можем покончить с этой ерундой за выходные! |
|||
|
|||
Задание посвящено добавлению в «Доктор» новой стратегии построения ответов. Добавляемый способ состоит в генерации случайной последовательности слов. Чтобы оставалась видимость осмысленности текста, генератор будет использовать данные, накопленные после обработки текстов по психоаналитике. В ходе этой обработки выявляются пары идущих друг за другом слов. Логично предположить, что порядок слов в осмысленном тексте не случаен. Значит, генератор может при составлении ответной реплики после текущего слова ставить то, которое часто встречается в текстах следом за ним. Заметим, что понятие «слова» толкуется расширительно, так как знаки пунктуации тоже следует рассматривать как «слова». Например, это позволит генератору решать, уместно ли закончить предложение (уместно, если за текущим словом часто следуют точка, восклицательный знак или вопросительный знак). Также генератор сможет составлять предложения со знаками пунктуации внутри (запятыми, двоеточиями, тире). И наконец, генератор сможет начинать реплики с тех слов, которые в тексте часто следуют после точек, восклицательных знаков или вопросительных знаков. При предварительной обработке текста -- обучении -- , фактически, формируется граф. Это ориентированный граф, вершинами которого являются слова, а дугами -- отношения следования, соединяющие слова, которые соседствуют в тексте. Дуги графа имеют веса. Более весомой будет дуга, соединяющая два слова, которые чаще всего следуют друг за другом. Рассмотрим, как можно использовать построенный граф для генерации реплик. Первый способ, условно называемый прямым, состоит в следующем: На первом шаге ищутся в графе слова, следующие за концом предложения (точкой и др.). С учетом весов дуг случайно выбирается одно из таких слов. Оно будет начальным в реплике. Далее ищутся в графе слова, следующие за начальным. Случайно с учетом весов дуг выбирается один из кандидатов. И так далее, до тех пор пока на очередном шаге не будет выбрано слово, являющееся концом предложения (точка, восклицательный знак или др.). Если ответная реплика состоит из одного предложения, то на этом построение ответа прямым способом завершается. Второй способ -- обратный. Очевидно, что можно, стартуя от конца предложения, подбирать последнее слово -- частого предшественника точки, воклицательного или вопросительного знаков. Перед последним словом в ответ можно добавить предпоследнее, и так далее, пока не будет достигнуто начало предложения. Третий способ -- смешанный. При этом способе можно выбрать некоторое слово, которое будет находиться внутри предложения. Например, в качестве такого слова можно взять более-менее длинное слово из реплики пользователя, на которую генерируется ответ. От текущего слова реплика далее строится в обоих направлениях: прямом -- от середины к концу; и обратном -- от середины к началу. В простом случае реплика может состоять из одного предложения, но можно строить длинные реплики из нескольких предложений. Заметим, что рассмотренные техники тривиальны. Реальные программы, генерирующие тексты, используют много больше сведений о словах, чем их порядок следования в тексте. Примером такой программы является MIT SCIgen, результаты работы которой удавалось публиковать на научных конференциях с низким контролем принимаемых докладов. Эта программа сгенерировала текст известной статьи, перевод которой на русский язык известен под названием «Корчеватель: Алгоритм типичной унификации точек доступа и избыточности». Выполнение задания «Весна» разделено на три этапа. На первом этапе (подготовительном) следует усовершенствовать ввод и вывод «Доктора». Так, «Доктор», реализованный ранее, не способен нормально работать с фразами, внутри которых есть точки, вложенные круглые скобки и т. п.. Следует реализовать считывание реплики пользователя в строку (например, при помощи фунции Racket read-line), перевод строки во внутреннее представление, совместимое с реализованными ранее функциями построения ответных реплик. Допускается адаптировать эти функции для работы с новым внутренним представлением. Считывание в строку избавляет пользователя от необходимости писать свои фразы в скобках, отделять знаки пунктуации от предшествующих им слов пробелами и т. п.. Следует обратить внимание на то, что из-за нового ввода пользователь может давать реплики из нескольких предложений. Применяя старые версии построения ответов по qualifier и history (из упражнений 2 и 3), «Доктора» из-за этого будет выдавать чепуху. Поэтому «Доктора» следует переработать в этой части. Далее, перевод строки должен быть реализован так, чтобы лишние символы, не используемые в письменной речи, игнорировались. Также можно защититься от неверного использования прописных букв. Следует обеспечить новый вывод из внутреннего представления на экран (например, при помощи фунции Racket printf). При выводе не следует брать ответ «Доктора» в скобки. Вывод точек и других знаков пунктуации должен быть корректным, например точка не должна отделяться пробелом от предшествующего ей слова. Как часть подготовительного этапа следует составить обучающую выборку англоязычных текстов по психоаналитике. В выбоке должно быть от 3 до 7 текстов разных авторов. Объем каждого текста не менее 2000 знаков. Тексты из выборки должны быть подготовлены к дальнейшей обработке обучающей частью «Доктора» (переведены в нужную кодировку и/или формат и/или регистр, избавлены от спецсимволов и т. п.) Максимальная оценка за 1-й этап -- 10 баллов. Срок сдачи без штрафа: по 20 ноября включительно. На втором этапе разрабатывается версия «Доктора», содержащая обучающую часть, которая анализирует тексты, и генератор, способный по результатам обучения строить фразы прямым и смешанным способами. Следует подобрать подходящую структуру для представления графа слов (например, Racket хэш-таблицу и/или Scheme ассоциированные списки). Следует сделать так, чтобы обучающая часть могла сохранять результаты своей работы в файле, считывать их из файла и пополнять при работе с новым текстом. Генератор должен иметь возможность считывать результаты обучения из файла. Генератор должен быть встроен в «Доктор», как одна из стратегий с большим весом/приоритетом. При выполнении второго этапа можно использовать мутируемые структуры и присваивание там, где это уместно. Демонстрацию работы программы второго этапа следует производить на разных обучающих выборках, чтобы показать влияние обучения на качество генерируемых фраз. Код программы должен быть правильно оформлен, структурирован, сопровожден комментариями. Максимальная оценка за 2-й этап -- 15 баллов. Срок сдачи без штрафа: по 11 декабря включительно. Для получения дополнительных баллов можно предложить и реализовать улучшения для генерирующей и/или обучающей части «Доктора». На третьем этапе готовится отчет обо всех выполненных заданиях по «Доктору». Отчет сдается по электронной почте в формате PDF. Требования к отчету указаны ниже. Максимальная оценка за 3-й этап -- 5 баллов. Срок сдачи без штрафа: по 19 декабря включительно. На всех этапах за каждую неделю просрочки сдачи этапа будет начисляться штраф в размере 1/4 от максимального балла. По прошествии 4-х недель этап можно сдать, но баллы начислены не будут. По окончании семестра (в период зачетных и экзаменационных сессий и каникул) скорость роста штрафов может возрасти. Студенты, не сдавшие задание, не смогут получить положительную оценку на экзамене. Требования к отчету Отчет пишется на русском языке. Текст отчета должен быть разбит на следующие части:
На всякий случай, приведен вид страницы с содержанием (без указания номеров страниц для 2-й главы и последующих частей отчета)
|
|||
|
|||
Размещение на других ресурсах, а также коммерческое использование материалов, опубликованных в данном разделе, возможно только с разрешения авторов. По всем вопросам пишите: |
|||
|