Spaces:
Sleeping
Sleeping
Update README_Ru.md
Browse files- README_Ru.md +117 -0
README_Ru.md
CHANGED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Intro
|
| 2 |
+
В этом репозитории методы обработки естественного языка (NLP) используются для изучения стиля речи Рейчел из сериала "Друзья", проведения мультиязыкового анализа английского языка и обучения нейронной сети общению в стиле Рейчел.
|
| 3 |
+
Перенос стиля очень популярен в НЛП и сейчас используется в самых разных сферах, от образования до персонализации электронных помощников. А с развитием больших моделей-трансформеров, которые демонстрируют выдающиеся способности в понимании естественного языка и имитации самых разных стилей, передача стиля вышла на новый уровень. Сегодня большие языковые модели, такие как GPT3, благодаря своим объемам и миллиардам параметров способны идеально изучить все особенности обучающей выборки (т. е. обучить распределению) и сгенерировать реалистичный текст в определенном стиле.
|
| 4 |
+
В этом посте я исследую возможности языковых моделей для генерации текста в стиле Рейчел из знаменитого сериала "Друзья". Для этого используется корпус английских транскриптов сериала, который был собран для поиска чатбота и обучения двуязычных моделей для общения в стиле Рейчел Грин.
|
| 5 |
+
Кроме того, я провела анализ стиля, изучила особенности речи Рейчел.
|
| 6 |
+
Таким образом, проект можно условно разделить на 3 части:
|
| 7 |
+
* Cбор данных
|
| 8 |
+
* Стилистический анализ речи персонажей
|
| 9 |
+
* Фреймворк для обучения моделей, которые пишут текст в стиле Рейчел.
|
| 10 |
+
Весь код можно найти в этом репозитории HF.
|
| 11 |
+
|
| 12 |
+
# Данные
|
| 13 |
+
## Выбор персонажа
|
| 14 |
+
Я решил продолжить использовать сериал, на котором остановился в предыдущем проекте, ситком "Друзья", который шел с 1994 по 2004 год. Несмотря на свой возраст, он остается популярным и по сей день. Этот комедийный сериал рассказывает о жизни шести друзей (Росс, Фиби, Моника, Рейчел, Джоуи и Чендлер), которые живут в Нью-Йорке и постоянно попадают в какие-то неприятности и забавные ситуации. Почему мы выбрали именно этот сериал? По трем причинам:
|
| 15 |
+
|
| 16 |
+
1. Я нашел в открытом доступе расшифровки 236 эпизодов. Это очень много данных, которые я могу использовать для обучения языковой модели.
|
| 17 |
+
|
| 18 |
+
2. В сериале есть диалоги не одного, а целых шести персонажей, что открывает мне возможности для сравнительного анализа
|
| 19 |
+
|
| 20 |
+
3. Это популярный сериал, который многие из нас смотрели и хорошо знают. Это значит, что я могу сделать предположения о данных (например, Фиби говорит более простыми словами и т. д.) и оценить реалистичность стиля сгенерированного текста, основываясь на своем опыте просмотра.
|
| 21 |
+
|
| 22 |
+
## Сбор данных
|
| 23 |
+
Оригинальные транскрипты, которые я взял из Интернета, были на английском языке. Затем я выполнил следующую предварительную обработку текста:
|
| 24 |
+
|
| 25 |
+
1. Во-первых, я очистил данные от мелких графемных ошибок, характерных для транскриптов. Например, если персонаж говорил что-то длинное, его слова могли содержать повторы гласных для имитации длинного звука ("nooooooooooooooooooooooooooooooooooooooooooooooooo").
|
| 26 |
+
|
| 27 |
+
2. Во-вторых, я заметил, что некоторые слова содержат повторы одного и того же слова для комичности. Я также удалял такие повторы, оставляя только одну копию повторяющегося слова.
|
| 28 |
+
|
| 29 |
+
3. В-третьих, поскольку я хотел передать стиль, присущий каждому персонажу, я отбросил общие фразы, используемые всеми 6 главными героями ("Знаете что!", "О Боже!" и т. д.).
|
| 30 |
+
|
| 31 |
+
Таким образом, я собрал корпус диалогов для 6 персонажей, включающий около 8 тысяч предложений для каждого персонажа. Подробное распределение по количеству предложений для каждого персонажа вы можете увидеть в таблице ниже:
|
| 32 |
+

|
| 33 |
+
|
| 34 |
+
### Анализ данных
|
| 35 |
+
Количество реплик для всех сезонов показано ниже:
|
| 36 |
+

|
| 37 |
+
Как видно, среднее значение количества реплик за все сезоны составляет 6000 при стандартном отклонении около 400.
|
| 38 |
+
|
| 39 |
+
Количество реплик для всех эпизодов показано ниже:
|
| 40 |
+

|
| 41 |
+
Как видно, среднее значение количества реплик в эпизоде составляет 265. Стандартное отклонение составляет около 65 реплик.
|
| 42 |
+
|
| 43 |
+
Самые частые слова в наборе данных:
|
| 44 |
+

|
| 45 |
+
|
| 46 |
+
# Анализ стилей персонажей
|
| 47 |
+
Прежде чем обучать языковые шаблоны, я исследовал стилевые особенности Рэйчел. В частности, чтобы определить особенности речи, я сделал следующее:
|
| 48 |
+
|
| 49 |
+
* Подсчитал описательную статистику: количество слов, среднее количество слов в предложении, индекс читабельности, доля сложных слов и т. д.
|
| 50 |
+
|
| 51 |
+
* Наиболее частотные слова для персонажей;
|
| 52 |
+
|
| 53 |
+
* Доля положительных и отрицательных слов.
|
| 54 |
+
|
| 55 |
+
Исходя из приведенного сюжета, можно сделать предварительные выводы о специфике речи персонажей. Например, Росс и Рейчел самые разговорчивые, у них максимальное количество предложений.
|
| 56 |
+
|
| 57 |
+
После такого первичного анализа речи я более детально исследовала словарный запас и проанализировала его с точки зрения сложности слов, используемых персонажами. За "трудные" слова мы условно приняли длинные слова, состоящие более чем из 4 слогов. Долю сложных слов для каждого персонажа можно увидеть на графике ниже:
|
| 58 |
+
|
| 59 |
+
## Самые частые слова Рейчел
|
| 60 |
+
Я провел анализ наиболее частотных слов Рейчел, исключив стоп-слова из nltk.stopwords("english"). Результат этого анализа показан ниже.
|
| 61 |
+

|
| 62 |
+
Или эти данные можно представить в виде изображения
|
| 63 |
+

|
| 64 |
+
|
| 65 |
+
# Подготовка данных
|
| 66 |
+
Итак, мы собрали фразы Рейчел и разделили их на два набора данных: реплики и фразы. Для целей моделирования мы снабдили все реплики дополнительным набором лексем и тегов:
|
| 67 |
+
|
| 68 |
+
Специальные лексемы <s> и </s>, обозначающие начало и конец примера.
|
| 69 |
+
|
| 70 |
+
Имя персонажа пишется заглавными буквами.
|
| 71 |
+
|
| 72 |
+
Специальный псевдоним NOTFRIEND, который являлся маркером реплики другого говорящего в диалоговых парах "реплика НЕФРИЕНДА - ответ ГЕРОЯ". Мы использовали такой псевдоним, чтобы отделить чужие реплики от героя, чьему стилю мы хотим подражать.
|
| 73 |
+
|
| 74 |
+
Используя данные с дополнительными лексемами, я создал два набора данных для Рейчел на английском языке. Ниже приведено краткое описание каждого из них:
|
| 75 |
+
|
| 76 |
+
1. Сырые монологи - набор данных, содержащий отдельные реплики одного из персонажей. Этот набор данных позволяет модели получить максимум информации о стиле конкретного персонажа.
|
| 77 |
+
|
| 78 |
+

|
| 79 |
+
|
| 80 |
+
2. Необработанные диалоги - набор данных, содержащий пары "реплика НЕдруга - ответ ГЕРОя", разделенные символом переноса строки \n. Набор данных диалогов необходим, потому что мы хотим, чтобы наша модель могла поддерживать разговор с пользователем в стиле Friends, а не просто генерировать текст.
|
| 81 |
+
|
| 82 |
+

|
| 83 |
+
|
| 84 |
+
# Обучение
|
| 85 |
+
Для обучения модели передачи стиля Рейчел чатботу я использовал несколько моделей. Обучение моделей проходит в два этапа. На первом этапе модель пытается уловить личность Рейчел и изучает ее монологи. На втором этапе модель пытается узнать, как Рейчел ведет себя в диалогах, поэтому на этом этапе модель обучается на диалогах.
|
| 86 |
+
1. Первый этап - GPT2. Для наборов данных я использовал TextDataset от PyTorch и библиотеку трансформаторов от huggingface.
|
| 87 |
+
Результаты показаны на изображении ниже
|
| 88 |
+

|
| 89 |
+
|
| 90 |
+
2. Вторая модель - GPT2-medium. Результаты обучения на монологах показаны ниже
|
| 91 |
+

|
| 92 |
+
Обучение диалогам показано на следующем изображении
|
| 93 |
+

|
| 94 |
+
Результат обучения показан ниже
|
| 95 |
+

|
| 96 |
+
|
| 97 |
+
2. Последняя модель - GPT2-large. Обучение на монологах показано ниже
|
| 98 |
+

|
| 99 |
+
Обучение диалогам показано на следующем изображении
|
| 100 |
+

|
| 101 |
+
Результат обучения показан ниже
|
| 102 |
+

|
| 103 |
+
|
| 104 |
+
# Архитектура
|
| 105 |
+
|
| 106 |
+
- PrepareData.ipynb <- Парсер данных из Интернета, очистка, токенизация и подготовка к набору данных
|
| 107 |
+
- train_data <- папка datasets с монологами и диалогами
|
| 108 |
+
- Training_gpt2_medium.ipynb <- обучение gpt2-medium
|
| 109 |
+
- en_gpt2-medium_rachel_replics <- модель gpt2-medium
|
| 110 |
+
- Training_gpt2_large.ipynb <- тренировка gpt2-large
|
| 111 |
+
- en_gpt2-large_rachel_replics <- gpt2-large модель
|
| 112 |
+
- images <- изображения для README.md
|
| 113 |
+
- app.py <- основной файл
|
| 114 |
+
- requirements.txt <- необходимые библиотеки
|
| 115 |
+
# Заключение и планы на будущее
|
| 116 |
+
Итак, я использовал методы обработки естественного языка для изучения стиля речи Рейчел из известного сериала "Друзья", провел мультиязычный анализ для английского языка и обучил языковые модели на основе GPT говорить в стиле Рейчел.
|
| 117 |
+
В будущем я хочу поэкспериментировать с еще более крупными моделями. Например, с LLama, а также с методами генерации управляемого текста для них.
|