Видео проигрыватель загружается.Воспроизвести видеоВоспроизвестиБез звукаТекущее время 0:00/Продолжительность 3:10Загрузка: 0.00%0:00Тип потока ОНЛАЙНSeek to live, currently behind liveОНЛАЙНОставшееся время -3:10 1xСкорость воспроизведения2x1.75x1.5x1.25x1x, выбрано0.75x0.5xГлавыГлавыОписанияОтключить описания, выбраноСубтитрынастройки субтитров, откроется диалог настройки субтитровСубтитры выкл., выбраноЗвуковая дорожкаPicture-in-PictureПолноэкранный режимThis is a modal window.Начало диалоговго окна. Кнопка Escape закроет или отменит окноТекстColorБелыйЧерныйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачностьПолупрозрачныйФонColorЧерныйБелыйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачностьПолупрозрачныйПрозрачныйОкноColorЧерныйБелыйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачныйПолупрозрачныйПрозрачностьРазмер шрифта50%75%100%125%150%175%200%300%400%Стиль края текстаНичегоПоднятыйПониженныйОдинаковыйТеньШрифтПропорциональный без засечекМоноширинный без засечекПропорциональный с засечкамиМоноширинный с засечкамиСлучайныйПисьменныйМалые прописныеСбросить сбросить все найстройки по умолчаниюГотовоЗакрыть модальное окноКонец диалогового окна.
После того, как мы обучим нашу нейронную сеть, мы сможем генерировать имена, которые соответствуют некоторым условиям — например, имена, которые начинаются на букву "a" или на буквы "abc", или какие-либо другие условия. Если же мы захотим генерировать любые имена, начинающиеся с любой буквы, мы просто передадим нашей функции пробел в качестве первого символа. Таким образом, сможем сгенерировать имена, начинающиеся на любую букву. Отлично! С этой небольшой хитростью в коде разобрались. Давайте теперь посмотрим на распределение длин имён в нашем датасете. Как вы видите, распределение длин имён описывается нормальным распределением и, в целом, большинство имён имеет длину от 6 до, скажем, 12 символов, что довольно логично и соответствует действительности. При этом, есть имена, которые содержат всего три буквы или содержат аж 18 букв. Отлично, теперь нам нужно немного предобработать данные перед тем, как подавать их в нашу нейронную сеть. Нам нужно составить список уникальных символов, которые встречаются в нашем датасете. Это мы можем сделать с помощью такой строки кода. И посмотрим, сколько уникальных символов есть в нашем датасете: их всего 52. Теперь нужно создать словарь соответствия буквы некоторому численному ID. Мы не можем подавать в нейросеть буквенный input, нам нужно преобразовать его в некоторое численное представление, поэтому создадим словарь, который будет мапить (map) букву в её численный ID. Отлично! С помощью этой строки кода создаём словарь, который мы назовём "token_to_id". Отлично! И теперь мы хотим преобразовать наши входные данные, а именно — наши 9 с небольшим хвостиком тысяч имён в некоторое численное представление, то есть вместо имени мы хотим получить численный вектор. Сделать это мы можем с помощью функций "to_matrix", которая будет преобразовывать наше имя из буквенного, человеко-читаемого формата в формат "вектор с числами". Давайте посмотрим на такую матрицу, как она будет выглядеть. Берём 5 имён и смотрим на то, как будет выглядеть матрица для этих 5 имён. Как вы можете видеть, все векторы — одинаковой длины, и при этом все векторы начинаются с одного и того же числа: 29. Это вполне логично, поскольку в начале каждого имени мы ставили пробел, "29" — это ID пробела. Отлично! При этом, как вы можете заметить, в конце некоторых строк также присутствуют символы "29", один или какое-то большее количество раз. Почему так происходит? Так происходит потому, что наша функция "to matrix" умеет дополнять слова, которые оказались короче самого длинного слова в коллекции — пробелами в конце, для того, чтобы все слова были одинаковой длины и векторы в нашей матрице имели одинаковую длину. Поэтому в конце некоторых слов вы можете увидеть числа "29", которые соответствуют дополнительным пробелам в конце слов, которые оказались короче самого длинного слова. На этом заканчивается часть про препроцессинг наших данных, она очень простая. Теперь давайте перейдём к более сложным и более интересным вещам, а именно — написанию рекуррентной нейронной сети своими руками.

К сожалению, у нас пока нет статистики ответов на данный вопрос, но мы работаем над этим.