Видео проигрыватель загружается.Воспроизвести видеоВоспроизвестиБез звукаТекущее время 0:00/Продолжительность 3:48Загрузка: 0.00%0:00Тип потока ОНЛАЙНSeek to live, currently behind liveОНЛАЙНОставшееся время -3:48 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%Стиль края текстаНичегоПоднятыйПониженныйОдинаковыйТеньШрифтПропорциональный без засечекМоноширинный без засечекПропорциональный с засечкамиМоноширинный с засечкамиСлучайныйПисьменныйМалые прописныеСбросить сбросить все найстройки по умолчаниюГотовоЗакрыть модальное окноКонец диалогового окна.
Давайте попробуем обучить эту нейросеть и посмотрим, как хорошо мы можем определять часть речи слова, не используя информацию о его контексте. Сначала мы создаём экземпляр описанного нами нейросетевого модуля, передаём ему в конструктор количество уникальных символов в датасете, количество меток, рабочий размер модели, то есть каждый символ мы будем представлять вектором из 64 элементов, дальше мы указываем количество свёрточных блоков, то есть глубину нашей нейросети (мы будем использовать глубину равную трём), размер ядра свёртки, а также вероятность дропаута. Вероятность равная 0.3 означает, что на каждом проходе по нейросети в режиме обучения будет, случайным образом, зануляться примерно треть активации. Как мы видим, наша нейросеть достаточно маленькая, в ней меньше пятидесяти тысяч элементов (по современным меркам, это очень маленькая нейросеть). Как вы думаете, сможет ли она вообще хоть что-то выучить? Далее мы используем нашу стандартную функцию для тренировки нейросетей, которая описана в нашей библиотеке специально для этого курса, передаём туда модель, датасеты, а также указываем функцию потерь — мы будем использовать кросс-энтропию, эта функция потерь используется в многоклассовых задачах. Ну что ж, поехали! Обучение нейросети требует определённого времени, и в предыдущих семинарах нейросеть обучалась достаточно быстро даже на обычном процессоре. Здесь нам уже требуется видеокарта. То есть, она будет учиться и на обычном процессоре, но это потребует большего времени. Полное обучение описанной нейросети до сходимости на этом корпусе требует примерно одного часа работы видеокарты. Мы не будем ждать всё это время — мы просто загрузим модельку, которую я обучил заранее и оценим её качество. Для того, чтобы оценить качество, мы используем обученную нейросеть, чтобы получить предсказание для обучающей выборки, а дальше используем функцию "classification_report" из библиотеки scikit-learn. Эта функция выдаёт самые стандартные метрики качества классификации (а именно, точность, полнота и f-мера) для каждого класса. А также, для каждого класса выдаётся количество примеров. Как мы видим, в этом случае датасет имеет сильно скошенное распределение классов, другими словами у нас есть очень частые классы и таких классов мало, а есть очень редкие классы. В таком случае нам вообще нет смысла использовать "accuracy", то есть долю верно угаданных ответов — она абсолютно неинформативна. Как вы видите, на обучающей выборке она равна единице, хотя есть классы, которые не очень хорошо определяются, на самом деле. В случае сильно скошенного распределения классов, самое правильное — это считать сразу несколько метрик, устойчивых к распределению классов (в данном случае, это — точность, полнота и f-мера) и смотреть на них всех. Часто бывает удобно получить не большую пачку цифр, а всего лишь одно число, по которому мы сможем понять, насколько хорошо модель работает. В данном случае лучше всего нам подходит "macro-среднее". Что значит "macro-среднее"? Это значит, что сначала мы считаем каждую метрику по каждому классу, а потом усредняем. Macro-среднее более устойчиво к скошенным распределениям классов.
К сожалению, у нас пока нет статистики ответов на данный вопрос,
но мы работаем над этим.