предыдущие сообщения: 01 02 03

Скоро 4 недели — я наконец закрепился в процессе разработки. На прошлой неделе я просматривал исходный код и документацию TensorBoard и TensorFlow, пытаясь создать основу для разработки плагинов.

Известные ресурсы:

Завершенные этапы:

  1. Поймите структуру плагина TensorBoard, в частности, как должна выглядеть архитектура плагина Attention.
  2. Разработайте и напишите слой выборки данных.

Плагин Архитектура

В TensorFlow данные итераций обучения/оценки хранятся в виде набора сводок. Они могут принимать форму любого тензора, включая текст, изображение, скаляры или временные ряды. Они записываются на диск по мере выполнения графа вычислений. Каждая сводка представляет собой буфер протокола сводки, который содержит, помимо хранимых данных, важную идентифицирующую информацию (теги и метаданные). Затем плагин может считывать сводки, связанные с определенными тегами и сеансами, с диска, чтобы передавать их на внешний интерфейс TensorBoard через серверную часть плагина, где визуализируется визуализация.

Следуя Разработке подключаемого модуля TensorBoard, подключаемый модуль Attention состоит из трех основных компонентов:

  1. Уровень API данных. Это то, что позволяет пользователям получать соответствующие сводки из своих моделей.
  2. Бэкэнд плагина, который обслуживает указанные сводки.
  3. Интерфейс, где отображаются визуализации.

В отличие от широко используемых плагинов, таких как плагины скаляр и гистограмма, плагин Внимание использует 3 различных значения: входной текст, декодированный выходной текст и матрицу внимания, которая соотносит их. Сначала я попытался сохранить все это в одном протобуфе Summary, где первые две строки инкапсулирующей матрицы содержали бы текст, а остальные — веса внимания. Это приводит к смешению строковых и плавающих типов в одном тензоре, что недопустимо (насколько мне известно) в TensorFlow. Затем я понял, что могу хранить их отдельно, каждый в своей сводке, и извлекать их с помощью идентифицирующего имени. Полученная архитектура показана на диаграмме ниже.

Я решил сделать выходной текст необязательной сводкой, так как моделям не обязательно декодировать (через Viterbi, Beam Search или иным образом) выходную последовательность во время обучения. Введенный текст и матрица внимания по-прежнему ценны, поскольку сводная статистика (например, охват, важные слова и т. д.) может быть видна без декодированного текста.

Уровень API данных

Как предполагают авторы TensorBoard, уровень API данных, определенный в attention_summary.py, предоставляет два метода для создания Summary protobuf, которые затем можно записать на диск через FileWriter. Первый — через операцию TensorFlow, которую можно рассматривать как узел в графе вычислений, который создает Summary при выполнении графа. Второй — путем непосредственного создания protobuf, который позволяет сохранять данные вне выполнения сеанса TensorFlow. Я реализовал оба из них. Существует отдельный метод для каждого из трех данных, используемых плагином (текст ввода, текст вывода, матрица внимания), и каждый из трех сводных данных помечен по-разному (например, name/attention_input_summary, name/attention_output_summary), чтобы обеспечить различимый поиск позже. .

Пример использования обоих методов можно найти в attention_demo.py.

Следующие шаги

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

  1. Измените мой разветвленный репозиторий модели суммирования, созданный See et al. (оригинал найден здесь) для создания и сохранения соответствующих сводок для плагина Внимание. Я уже начал изучать это и ожидаю, что мне придется возиться со схемой обучения/оценки, чтобы получить соответствующий объем данных.
  2. Реализуйте бэкенд плагина Attention.
  3. Начните создавать прототипы визуализаций (ручка и бумага) и получите предварительные отзывы.

До скорого.