>>1.00<<>>1.00<<Видео проигрыватель загружается.Воспроизвести видеоВоспроизвестиБез звукаТекущее время 0:00/Продолжительность 2:06Загрузка: 0.00%0:00Тип потока ОНЛАЙНSeek to live, currently behind liveОНЛАЙНОставшееся время -2:06 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%Стиль края текстаНичегоПоднятыйПониженныйОдинаковыйТеньШрифтПропорциональный без засечекМоноширинный без засечекПропорциональный с засечкамиМоноширинный с засечкамиСлучайныйПисьменныйМалые прописныеСбросить сбросить все найстройки по умолчаниюГотовоЗакрыть модальное окноКонец диалогового окна.
Итак, создаём модуль "encoder". Он наследуется от "torch.nn.module" и энкодер принимает на вход следующие параметры. Это входная размерность данных — это размерности наших "one-hot" векторов, которая совпадает с размерностью словаря интентов; это размерность эмбеддингов, размерность слоя с эмбеддингами — например, можно сделать его равным 100 или 200, любому другому числу, которое кажется вам наиболее подходящим. Есть параметр, который называется "encoding hidden dimension" (вот он) — это размерность скрытого состояния; есть то же самое для декодера; и "dropout" — это количество дропаута, которое мы будем использовать. Здесь мы должны задать число от 0 до 1. Слой эмбеддингов создаётся с помощью "nn.embedding" (вот здесь). Дальше мы используем GRU-слой, вместо него можно с таким же успехом использовать LSTM. Дропаут будем добавлять между слоями нашей многослойной сети, то есть между скрытыми состояниями, которые идут на вход слою "2". Дальше — давайте рассмотрим метод "forward". В метод "forward" мы передаём входное предложение, которое превращено в dense-вектора с помощью эмбеддинг-слоя, и затем применяем дропаут (вот здесь). После того, как мы передали всю входную последовательность в RNN, она автоматически посчитает скрытое состояние по всей последовательности. Мы не передаём то, чем нужно инициализировать скрытое состояние. По дефолту тензоры инициализируются нулями, что нас вполне устраивает в этом примере. Сеть нам возвращает две вещи — это "outputs" и скрытый слой. Размерности каждого тензора прописаны в коде в виде комментариев, что упрощает процесс дебага и его осмысление. Ещё один параметр, который нужно упомянуть, называется "bidirectional". Он отвечает за то — двунаправленная или однонаправленная сеть используется нашем примере. Кроме того, в нашем примере мы используем attention. В этом модуле мы будем считать веса attention.

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