>>1.00<<>>1.00<<Видео проигрыватель загружается.Воспроизвести видеоВоспроизвестиБез звукаТекущее время 0:00/Продолжительность 4:23Загрузка: 0.00%0:00Тип потока ОНЛАЙНSeek to live, currently behind liveОНЛАЙНОставшееся время -4:23 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%Стиль края текстаНичегоПоднятыйПониженныйОдинаковыйТеньШрифтПропорциональный без засечекМоноширинный без засечекПропорциональный с засечкамиМоноширинный с засечкамиСлучайныйПисьменныйМалые прописныеСбросить сбросить все найстройки по умолчаниюГотовоЗакрыть модальное окноКонец диалогового окна.
Напомню, что наша сегодняшняя задача заключается в том, чтобы построить алгоритм, который сможет автоматически определять аспекты, о которых оставлен отзыв — например, управляемость автомобиля, комфорт, стоимость, внешний вид, и так далее. Для того, чтобы обучить нашу нейросеть, мы предварительно поработаем с нашими данными. Мы разобьём все большие отзывы на предложения, а предложение на слова. Например, в этом предложении "набирает скорость" — это последовательность, которая идёт под тэгом "driveability" (b для begin/начала, i для продолжения). Например, рассмотрим следующее предложение. У нас есть три сущности, связанные с управляемостью — три последовательности, например: "устойчива на трассе" — это последовательность из трёх слов "устойчива, на, трассе" (опять же, b — beginning, i — inside, i — inside). Наша разметка верна. Мы подготовили наши данные для обучения нейросети. Это снова будет нейросеть LSTM, как и в прошлом семинаре но мы её немного модифицируем. Загрузим тренировочные и тестовые данные. Составим словарь всех слов и всех тэгов, которые встречаются в нашем датасете. И применим уже знакомый вам по прошлому семинару конвертер для индексации. Из примера на экране мы видим то, что в индексации нету ошибок, конвертер правильно индексирует наш текст и правильно восстанавливает из индекса его же. А теперь перейдём к нейросетевому алгоритму. На этот раз мы воспользуемся векторами слов из датасета RusVectores с одноимённого сайта, подготовленного с помощью алгоритма FastText. В предобученной модели FastText, наверное, присутствуют следующие слова: "тачка", "двигатель" и "Audi". Посмотрим, какие векторы являются ближайшими к векторам этих слов. Например, к слову "двигатель" ближайшие векторы — "двигатели" (во множественном числе), "гипердвигатель", "электродвигатель", "мотор", "электромотор", и так далее. Предобученные векторы из модели FastText мы будем использовать в качестве основы для обучения нашей нейросети LSTM. Из всего множества векторов FastText мы возьмём только 11 333 вектора, соответствующие всем словам в нашем датасете, и поместим их в embedding матрицу. Далее мы определим нейросети LSTM, которая будет использовать эти векторы. Предобученные векторы мы передаём отдельным аргументом в метод init и — обратите внимание — говорим, что, во время обучения нейросети LSTM, она не должна дообучать наши пребодученные векторы. Это позволит нейросети сконцентрироваться на обучении собственных компонент. Вторая деталь, на которую я бы хотел обратить внимание — то, что теперь мы используем двунаправленную нейросеть и она будет работать следующим образом. Как всегда, слова попадают в объект "конвертер" и для них происходит замена индекса. В матрице эмбеддингов алгоритм находит векторы этих слов. Они, в свою очередь, попадают в LSTM. Но теперь это двунаправленная модель, и она также будет двигаться по предложению в обратном направлении. Вот — наши промежуточные векторы при прямом проходе, и вот — наши промежуточные векторы при обратном проходе. Двунаправленная LSTM просто конкатенирует их, и, затем, эти конкатенированные промежуточные векторы попадают на вход к модулю, ответственному за предсказания правильного тэга (линейный слой, за которым следует softmax). Обратите внимание на двойку в его размерности и на размер того, что он должен нам вернуть (а вот и софтмакс).
К сожалению, у нас пока нет статистики ответов на данный вопрос,
но мы работаем над этим.