-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdescription_2.html
More file actions
180 lines (173 loc) · 16.2 KB
/
description_2.html
File metadata and controls
180 lines (173 loc) · 16.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- Задание «Весна». 2015-16 учебный год -->
<html>
<head>
<meta http-equiv ="Content-Type" content="text/html; charset=windows-1251">
<title>Задание «Весна». 2015-16 учебный год</title>
<style type="TEXT/CSS" title="Основной стиль">
body {background-color: #F9FAFB;
margin-top: 0em;
margin-bottom: 0em;
margin-left: 0em;
margin-right: 0em}
a {font-family: Tahoma;
color: #003399;
text-decoration: none}
a.small {font-size: 8pt;
font-weight: bold}
a.section {font-size: 10pt;
font-weight: bold}
a:visited {color: #553399;}
p {text-indent: 0em;
margin-top: 0em;
margin-bottom: 0em;
margin-left: 1em;
margin-right: 1em;
font-family: Tahoma, Lucida Console;
color: #000000;
font-size: 11pt}
p.news { color: #CC3333;
text-align: left;
font-size: 10pt}
p.titlenews { color: #000000;
text-align: left;
font-weight: bold;
font-size: 10pt}
p.title { color: #000000;
margin-left: 0.8em;
font-size: 13pt}
p.memo { color: #6699CC;
margin-left: 1.4em;
font-size: 8pt;
font-weight: bold}
p.small { color: #000000;
margin-left: 0.4em;
font-size: 8pt}
p.boldsmall { color: #000000;
font-size: 8pt;
font-weight: bold}
</style>
<script language="JavaScript" src="/jscripts/mail.js"></script></head>
<body bgcolor="#FFFFFF" text="#000000">
<!-- Начало верней строки -->
<table cellspacing=0 cellpadding=0 border=0 width="100%" align="center">
<tr height="17">
<td height="17" bgcolor="#CAD9E6" valign="middle" colspan="1">
<p class="memo"><a href="/" class="small">Главная страница «</a> <a href="/info/" class="small">Информация «</a> <a href="/info/4/" class="small">4 курс «</a> <a href="/courses/scheme" class="small">курс ВвФП «</a>
</td>
</tr>
<tr height="20" bgcolor="#95C1EC">
<td height="20">
<p class="title">Задание «Весна». 2015-16 учебный год</p>
</td>
</tr>
<tr valign="top" bgcolor="white">
<td><br>
<p align="right">„Нет проблем! Мы можем покончить с этой ерундой за выходные!“<br>
Э. Йордон „Путь камикадзе“<br><br>
</td>
</tr>
<tr height="20" bgcolor="#95C1EC">
<td height="20">
<table cellspacing=0 cellpadding=0 border=0 height="20" width="100%">
<tr height="20" width="560">
<td height="20">
<p class="title"><a name="reqs"></a>Общие сведения о задании
</td>
<td height="20" align="right">
<p class="boldsmall"><!-- <a href="/courses/ooap/" class="small">ООАП</a> -->
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top" bgcolor="white"><a name="reqs"></a><br>
<p>Задание посвящено добавлению в «Доктор» новой стратегии построения ответов. Добавляемый способ состоит в генерации случайной последовательности слов. Чтобы оставалась видимость осмысленности текста, генератор будет использовать данные, накопленные после обработки текстов по психоаналитике. В ходе этой обработки выявляются пары идущих друг за другом слов. Логично предположить, что порядок слов в осмысленном тексте не случаен. Значит, генератор может при составлении ответной реплики после текущего слова ставить то, которое часто встречается в текстах следом за ним. Заметим, что понятие «слова» толкуется расширительно, так как знаки пунктуации тоже следует рассматривать как «слова». Например, это позволит генератору решать, уместно ли закончить предложение (уместно, если за текущим словом часто следуют точка, восклицательный знак или вопросительный знак). Также генератор сможет составлять предложения со знаками пунктуации внутри (запятыми, двоеточиями, тире). И наконец, генератор сможет начинать реплики с тех слов, которые в тексте часто следуют после точек, восклицательных знаков или вопросительных знаков.<br>
<br><p>При предварительной обработке текста -- обучении -- , фактически, формируется граф. Это ориентированный граф, вершинами которого являются слова, а дугами -- отношения следования, соединяющие слова, которые соседствуют в тексте. Дуги графа имеют веса. Более весомой будет дуга, соединяющая два слова, которые чаще всего следуют друг за другом.<br>
<br><p>Рассмотрим, как можно использовать построенный граф для генерации реплик. Первый способ, условно называемый прямым, состоит в следующем: На первом шаге ищутся в графе слова, следующие за концом предложения (точкой и др.). С учётом весов дуг случайно выбирается одно из таких слов. Оно будет начальным в реплике. Далее ищутся в графе слова, следующие за начальным. Случайно с учётом весов дуг выбирается один из кандидатов. И так далее, до тех пор пока на очередном шаге не будет выбрано слово, являющееся концом предложения (точка, восклицательный знак или др.). Если ответная реплика состоит из одного предложения, то на этом построение ответа прямым способом завершается. Второй способ -- обратный. Очевидно, что можно, стартуя от конца предложения, подбирать последнее слово -- частого предшественника точки, воклицательного или вопросительного знаков. Перед последним словом в ответ можно добавить предпоследнее, и так далее, пока не будет достигнуто начало предложения. Третий способ -- смешанный. При этом способе можно выбрать некоторое слово, которое будет находиться внутри предложения. Например, в качестве такого слова можно взять более-менее длинное слово из реплики пользователя, на которую генерируется ответ. От текущего слова реплика далее строится в обоих направлениях: прямом -- от середины к концу; и обратном -- от середины к началу. В простом случае реплика может состоять из одного предложения, но можно строить длинные реплики из нескольких предложений.<br>
<br><p>Заметим, что рассмотренные техники тривиальны. Реальные программы, генерирующие тексты, используют много больше сведений о словах, чем их порядок следования в тексте. Примером такой программы является MIT SCIgen, результаты работы которой удавалось публиковать на научных конференциях с низким контролем принимаемых докладов. Эта программа сгенерировала текст известной статьи, перевод которой на русский язык известен под названием «Корчеватель: Алгоритм типичной унификации точек доступа и избыточности».<br>
<br><p>Выполнение задания «Весна» разделено на три этапа. На первом этапе (подготовительном) следует усовершенствовать ввод и вывод «Доктора». Так, «Доктор», реализованный ранее, не способен нормально работать с фразами, внутри которых есть точки, вложенные круглые скобки и т. п.. Следует реализовать считывание реплики пользователя в строку (например, при помощи фунции Racket read-line), перевод строки во внутреннее представление, совместимое с реализованными ранее функциями построения ответных реплик. Допускается адаптировать эти функции для работы с новым внутренним представлением. Считывание в строку избавляет пользователя от необходимости писать свои фразы в скобках, отделять знаки пунктуации от предшествующих им слов пробелами и т. п.. Следует обратить внимание на то, что из-за нового ввода пользователь может давать реплики из нескольких предложений. Применяя старые версии построения ответов по qualifier и history (из упражнений 2 и 3), «Доктора» из-за этого будет выдавать чепуху. Поэтому «Доктора» следует переработать в этой части. Далее, перевод строки должен быть реализован так, чтобы лишние символы, не используемые в письменной речи, игнорировались. Также можно защититься от неверного использования прописных букв. Следует обеспечить новый вывод из внутреннего представления на экран (например, при помощи фунции Racket printf). При выводе не следует брать ответ «Доктора» в скобки. Вывод точек и других знаков пунктуации должен быть корректным, например точка не должна отделяться пробелом от предшествующего ей слова. Как часть подготовительного этапа следует составить обучающую выборку англоязычных текстов по психоаналитике. В выбоке должно быть от 3 до 7 текстов разных авторов. Объем каждого текста не менее 2000 знаков. Тексты из выборки должны быть подготовлены к дальнейшей обработке обучающей частью «Доктора» (переведены в нужную кодировку и/или формат и/или регистр, избавлены от спецсимволов и т. п.) Максимальная оценка за 1-й этап -- 10 баллов. Срок сдачи без штрафа: по 20 ноября включительно.<br>
<br><p>На втором этапе разрабатывается версия «Доктора», содержащая обучающую часть, которая анализирует тексты, и генератор, способный по результатам обучения строить фразы прямым и смешанным способами. Следует подобрать подходящую структуру для представления графа слов (например, Racket хэш-таблицу и/или Scheme ассоциированные списки). Следует сделать так, чтобы обучающая часть могла сохранять результаты своей работы в файле, считывать их из файла и пополнять при работе с новым текстом. Генератор должен иметь возможность считывать результаты обучения из файла. Генератор должен быть встроен в «Доктор», как одна из стратегий с большим весом/приоритетом. При выполнении второго этапа можно использовать мутируемые структуры и присваивание там, где это уместно. Демонстрацию работы программы второго этапа следует производить на разных обучающих выборках, чтобы показать влияние обучения на качество генерируемых фраз. Код программы должен быть правильно оформлен, структурирован, сопровождён комментариями. Максимальная оценка за 2-й этап -- 15 баллов. Срок сдачи без штрафа: по 11 декабря включительно. Для получения дополнительных баллов можно предложить и реализовать улучшения для генерирующей и/или обучающей части «Доктора».<br>
<br><p>На третьем этапе готовится отчет обо всех выполненных заданиях по «Доктору». Отчёт сдаётся по электронной почте в формате PDF. Требования к отчёту указаны ниже. Максимальная оценка за 3-й этап -- 5 баллов. Срок сдачи без штрафа: по 19 декабря включительно.<br>
<br><p>На всех этапах за каждую неделю просрочки сдачи этапа будет начисляться штраф в размере 1/4 от максимального балла. По прошествии 4-х недель этап можно сдать, но баллы начислены не будут. По окончании семестра (в период зачётных и экзаменационных сессий и каникул) скорость роста штрафов может возрасти. Студенты, не сдавшие задание, не смогут получить положительную оценку на экзамене.<br>
<br><p>Требования к отчёту<br>
<p>Отчёт пишется на русском языке. Текст отчёта должен быть разбит на следующие части:<ul>
<li><p><i>Титульный лист</i>, с «шапкой» – <i>«Московский государственный университет имени М. В. Ломоносова, факультет Вычислительной математики и кибернетики»</i>. Далее следует заголовок: <i>«Отчёт по "Доктору"»</i>, сведения об исполнителе (фамилия, имя и отчество полностью, номер группы). Внизу титульного листа указывается город и год. Нелишне обратить внимание на то, что точки после заголовков не ставятся.<br>
<li><p><i>Содержание</i> состоит из перечня названий глав и подглав, сопровождаемых указанием номеров страниц, с которых они начинаются. Нумеруются все страницы, за исключением титульного листа. Номер страницы с содержанием: 2.<br>
<li><p><i>Первая глава</i>, названная <i>«Упражнения 1-6»</i>, содержит пояснения Ваших решений. Для каждого упражнения следует указать идею, лежащую в основе решения, используемые структуры данных, сигнатуры и текстовые описания функций, реализованных/исправленных/усовершенствованных при выполнении упражнения. Описание должно соответствовать версии с улучшенным вводом/выводом, и содержать комментарии по его реализации. Каждую главу следует начинать с новой страницы.<br>
<li><p><i>Вторая глава</i>, названная <i>«Упражнение 7»</i>, содержит пояснение Вашего решения в этой части. Содержание строится стереотипно предыдущей главе. Если Вы не выполняли 7-е упражнение, то её текст тривиален: «Решение упражнения 7 отсутствует.»<br>
<li><p><i>Третья глава</i>, названная <i>«Весна. Обучение»</i>, содержит описание обучающей части генератора случайных фраз. Следует пояснить выбранную структуру данных, алгоритм обучения, формат файла для хранения результатов обучения. Также следует привести список текстов, выбранных для обучения, и обосновать свой выбор. Если тексты проходили предварительную подготовку с помощью программ, то следует дать пояснения по этой части.<br>
<li><p><i>Четвёртая глава</i>, названная <i>«Весна. Генерация»</i>, содержит описание генератора. Следует привести алгоритмы генерации для прямого и смешанного способов, пояснить основные функции в составе своей программы. Если Вы усовершенствовали способ генерации фраз, опишите предложенное Вам решение и его реализацию.<br>
<li><p><i>Пятая глава</i>, названная <i>«Результаты»</i>, содержит фрагменты протоколов работы доктора с комментариями. Выбор фрагментов должен быть таким, чтобы демонстрировались все стратегии построения ответов. Должны быть примеры как удачных, так и неудачных реплик «Доктора». В комментариях следует привести соображения о том, насколько удачно, на Ваш взгляд, Ваша реализация «Доктора» общается с пользователем. В пятой главе должно быть проанализировано влияние обучения на качество генерируемых реплик.<br>
<li><p><i>Заключение</i>, которое не нумеруется, но номер страницы ставится, где подводится общий итог работы, завершает отчёт. В заключении можно указать характеристики написанного кода и оценить объём проделанной Вами работы.<br>
<li><p><i>Список использованной литературы</i> приводится, если в ходе работы над заданием были использованы статьи и/или книги. Библиографические записи в списке следует оформлять по <a href=https://ru.wikipedia.org/wiki/%C1%E8%E1%EB%E8%EE%E3%F0%E0%F4%E8%F7%E5%F1%EA%E0%FF_%E7%E0%EF%E8%F1%FC>рекомендациям ГОСТ</a>. На каждую запись списка в тексте отчёта должна быть ссылка.<br>
<li><p><i>Приложение</i>, которое содержит Ваш код.</ul>
<p>На всякий случай, приведён вид страницы с содержанием (без указания номеров страниц для 2-й главы и последующих частей отчёта)<br>
<br>
<samp>Содержание<br>
1. Упражнения 1-6 .......................3<br>
2. Упражнение 7 ..........................<br>
3. Весна. Обучение .......................<br>
4. Весна. Генерация ......................<br>
5. Результаты ............................<br>
Заключение ...............................<br>
Список литературы ........................<br>
Приложение. Код программы.................<br>
</samp>
<p><br>
</td>
</tr>
<tr height="20" bgcolor="#95C1EC">
<td height="20">
<table cellspacing=0 cellpadding=0 border=0 height="20" width="100%">
<tr height="20" width="560">
<td height="20">
<p class="title">Предупреждение
</td>
<td height="20" align="right">
<p class="boldsmall"><!-- <a href="/courses/prak5/200708/" class="small">Архив 2007</a> | <a href="program.zip" class="small">Программа курса (Zip, WinWord, 10Кб)</a> -->
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top" bgcolor="white"><br>
<p>Размещение на других ресурсах, а также коммерческое использование материалов, опубликованных в данном разделе, возможно только с разрешения авторов. По всем вопросам пишите: <a href="javascript:gotoEmail('victor[at]sp[dot]cs[dot]msu[dot]ru')"> <script language="JavaScript"><!--//
document.write(replaceMail("victor[at]sp[dot]cs[dot]msu[dot]ru"))
//--></script> </a><br><br>
</td>
</tr>
<!-- Конец блока -->
<tr height="18">
<td>
<table cellspacing=0 cellpadding=0 border=0 height="20" width="100%" bgcolor="#E3E9EC">
<tr height="18">
<td height="18" width="200"><p class="small"><a href="javascript:gotoEmail('webmaster[at]sp[dot]cs[dot]msu[dot]ru')"> <script language="JavaScript"><!--//
document.write(replaceMail("webmaster[at]sp[dot]cs[dot]msu[dot]ru"))
//--></script> </A></p></td>
<td height="18" valign="middle">
<p class="memo">© Кафедра системного программирования ВМК МГУ.</p>
</td>
<td align="right">
<p class="memo">Обновлено: 13.11.2015
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Google Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-4772600-6']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>