Рекомендуемое предварительное чтение:
Введение в низкоуровневые API в TensorFlow (я реализую это без Keras).
Краткий обзор модели Бенжио — чтобы дать вам представление об архитектуре и концепциях более высокого уровня.
Что такое проклятие размерности?
Что такое распределенные представления слов и почему они важны для реальных действий в машинном обучении?
Векторные представления — Читать это tutorial от TensorFlow, это действительно помогло мне понять концепции более высокого уровня, вытекающие из модели Бенджио, и то, как на самом деле реализовать их в низкоуровневом API.

В чем суть алгоритма?
Ограничение «проклятия размерности» за счет векторного представления слов, что позволяет модели изучать совместную функцию вероятности последовательностей слов в языке.

Почему так важна способность выучить совместную функцию вероятности последовательностей слов в языке?
Это связано с концепцией, называемой задачи ниже по течению, которые фактически являются источником дохода. аспекты обработки естественного языка. Модель Бенжио сильно устарела к моменту написания этой статьи (2019 г.), но обеспечивает фантастическую основу, с которой можно начать использовать TensorFlow для работы со статистическим языковым моделированием. Основополагающая работа Бенжио — Нейронно-вероятностная языковая модель — послужила основой, на которой была сделана большая часть достижений в обработке естественного языка и статистическом языковом моделировании. Нижестоящие задачи — это то, о чем вы слышите в новостях — чат-боты (то, чем я раньше зарабатывал на жизнь), распознавание именованных сущностей (то, чем я сейчас зарабатываю на жизнь), генерация текста, автозамена, Google Translate и т. д. Совместная вероятность Функция последовательностей слов в языке позволяет реализовать такие проекты (в некоторых случаях есть много новых, передовых способов сделать это).

Почему TensorFlow?
На создание этого поста меня вдохновил проект, который мне поручили во время учебы в аспирантуре по искусственному интеллекту. Модель Бенжио была опубликована в 2003 году, задолго до появления таких пакетов, как TensorFlow, и имела очень, очень запутанный метод распараллеливания вычислений всего, что позволяло процессору обрабатывать все происходящее. TensorFlow делает это до неприличия простым. Почему? Вы можете углубиться в историю TF здесь, но если это TL;DR, подумайте об этом как о подключении массивного высокопроизводительного двигателя к Toyota Sienna 2007 года вашей мамы и получении его. разогнаться до 150 миль в час (к вашему сведению — я не автомобильный человек, наверное, мне следует потратить больше времени на поиск лучших метафор). Все под капотом TF оптимизировано для выполнения сложных расчетов, которые требует модель Bengio, что делает ее быстрой :).

Я видел пару изображений TensorFlow, и они меня напугали — это выглядит очень сложно, и я хочу убежать. смысл в этом был.
Уважаемый читатель, это совершенно справедливо. TensorFlow и машинное обучение используют много линейной алгебры и множество других концепций, которые не очень хорошо объясняются в основных СМИ или профессорами. Большая часть научной литературы по этому вопросу написана экспертами, для экспертов. Честно говоря, я до сих пор не понимаю несколько концепций, несмотря на то, что получил степень магистра в области ИИ — в большинстве случаев это выглядит так:

Чтобы всем было проще, давайте разберемся: каковы шаги по внедрению нейронной сети Бенжио в TensorFlow?

ШАГ ПЕРВЫЙ: Создайте модель (не волнуйтесь, здесь много подшагов)
ШАГ ВТОРОЙ: Предварительная обработка данных
ШАГ ТРЕТИЙ: Помощник Функции
ШАГ ЧЕТВЕРТЫЙ. Запустите свое творение Франкенштейна

Итак, просто отказ от ответственности — мне потребовались месяцы, чтобы обновить себя в этих концепциях до такой степени, что я даже смог понять, чем занимались некоторые из моих одноклассников, когда они работали над этим материалом. В начале 2017 года я был начинающим программистом — я мог написать несколько крутых функций для Excel и вроде бы знал, что такое HTML и CSS. В конце 2018 года, после того как меня изрядно измотали (в совершенно безобидном, академическом смысле, когда меня заставили вручную инвертировать матрицу и написать код на языке, который мой профессор создал сам) на первом курсе Северо-Западного университета, но затем я понял большинство основных понятий, связанных с программированием, написанием алгоритмов и т. д. Летом 2019 года я довольно хорошо научился демонстрировать темную магию, связанную с машинным обучением, даже если я все еще не могу объяснить каждый аспект происходящего.

Чтобы даже работать над этой моделью, убедитесь, что у вас есть хорошие практические знания о том, что это такое:
1. Типы числовых данных — желательно с опытом использования NumPy (способ написания большинства руководств по NumPy дает учащемуся довольно приличную понимание того, как и почему типы данных имеют значение). Если вы не знаете, что такое типы данных — например, логические значения, строки, целые числа и т. д. — этот пост не для вас. Беги сейчас.
2. MatplotLib — не обязательна для обучения использованию TensorFlow, но упрощает жизнь, когда вы можете визуализировать то, что происходит в среде, отличной от чистого кода.
3. Код Python и команды терминала. Понимание того, как обеспечить взаимодействие вашего терминала с кодом Python, никогда не упоминалось, но является важным аспектом вашего пути как программиста. Вот почему все эти «README» GitHub настолько неприятны для фактического запуска, потому что все они написаны так, как будто вы автоматически понимаете, что делать после того, как каталог будет клонирован на ваш компьютер.
4. Суть линейной алгебры. Линейная алгебра предназначена для выражения изменений во времени. Это все уравнения, которые включают в себя какой-то процесс, и реализация этих моделей с нуля, просто читая технический документ, является неприятным AF, если вы не можете разобраться в происходящих уравнениях. Обычно я исполняю всю доску своими лучшими предположениями о том, что происходит, прежде чем я даже могу понять, что происходит.

Без дальнейших церемоний, давайте поговорим обо всех этих подшагах из первого шага. Medium кричит на меня, что моя статья почему-то слишком длинная, поэтому я продолжу это в следующем посте.

К вашему сведению — в ту минуту, когда что-то сбивает с толку, добавьте комментарий ниже, и я переделаю это, чтобы помочь. Весь смысл в том, чтобы облегчить следующему человеку понимание того, что здесь происходит. Вы следующий человек. Это сложная задача — независимо от того, что говорит вам гений математики из отдела робототехники. Мне понадобилась целая вечность, чтобы разобраться с этим материалом. Мне пришлось пройти незавершенный курс по статистическому языковому моделированию, потому что мне потребовалось так много времени, чтобы разобраться с этим (подлежит уточнению, если я получу его сейчас). Каждый учится в своем собственном темпе, и никому не помогает, когда эксперты забывают, что они тоже когда-то были в этом месте.