Инструменты глубокого обучения: модели TensorFlow и NLP

TensorFlow NLP
Инструменты глубокого обучения: модели TensorFlow и NLP
Автор | У Вэй
Произведено AI Frontier| ID: ai-front

предисловие

Обработка естественного языка (сокращенно НЛП) — это технология, изучающая компьютерную обработку человеческого языка.Технология НЛП позволяет компьютерам анализировать и понимать человеческое общение на основе набора технологий и теорий. Традиционный метод обработки естественного языка включает в себя обширные знания самой лингвистики, а глубокое обучение — это метод репрезентативного обучения, который широко используется в машинном переводе, автоматических ответах на вопросы, классификации текстов, анализе настроений, извлечении информации, маркировке последовательностей, грамматике. синтаксический анализ и другие области имеют широкий спектр приложений.

Инструмент word2vec, выпущенный Google в конце 2013 года, представляет слово как вектор слов, оцифровывает текст и эффективно применяет его для анализа текста. В 2016 году Google открыл исходный код модели автоматического суммирования текста и связанного с ней кода TensorFlow. В 2016/2017 году Google выпустила/обновила фреймворк обработки языков SyntaxNet, который повысил скорость распознавания на 25% и принес функции сегментации текста и морфологического анализа на 40 языков. В 2017 году Google официально открыл исходный код tf-seq2seq, общей платформы кодировщика/декодера для автоматического перевода. В этой статье в основном сочетается платформа TensorFlow для объяснения модели генерации векторов слов TensorFlow (векторные представления слов), использование моделей RNN и LSTM для предсказания языка и модель автоматического перевода TensorFlow.

Введение в математические принципы Word2Vec

Мы передаем естественный язык машинному обучению, но машины не могут напрямую понимать человеческий язык. Затем первое, что нужно сделать, — это математизировать язык.Хинтон предложил метод распределенного представления в 1986 году, который отображает каждое слово в языке в вектор фиксированной длины посредством обучения. Все эти векторы образуют векторное пространство слов, и каждый вектор можно рассматривать как точку в пространстве, так что о сходстве между словами можно судить по расстоянию между ними, а его применение можно распространить на предложения, документы и китайский язык. Причастие.

В Word2Vec используются две модели: модель CBOW (модель непрерывного набора слов) и модель Skip-gram (модель непрерывного Skip-gram). Ниже приведен пример модели, которая представляет собой трехуровневую модель нейронной сети, включающую входной слой, проекционный слой и выходной слой.


Среди них score(wt, h) представляет оценку вероятности результата прогнозирования в контексте . Приведенная выше целевая функция, которую можно преобразовать в функцию максимального правдоподобия, выглядит следующим образом:


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


Однако при использовании метода word2vec для изучения признаков нет необходимости вычислять модель полной вероятности. В модели CBOW и модели skip-gram использовались прогнозы, сделанные методом бинарной классификации логистической регрессии. Как показано в следующей модели CBOW, для повышения скорости обучения модели и качества вектора слов обычно используется метод случайной отрицательной выборки (Negative Sampling), а выборки шума w1, w2, w3, wk ... выбраны отрицательные образцы.


Модель синонимов TensorFlow

В этой главе объясняется, как использовать модель TensorFlow word2vec для поиска синонимов.Входные данные — большая статья на английском языке, а выходные данные — синонимы соответствующих слов. Например, изучая артикли, можно получить слова, близкие по значению к пяти: четыре, три, семь, восемь, шесть, два, ноль, девять. Благодаря обучению большого количества статей на английском языке, когда нейронная сеть обучена до 100 000 итераций, а значение потери сети уменьшено примерно до 4,6, полученные связанные приближения показаны на следующем рисунке:


Ниже приведены инструкции по использованию TensorFlow word2vec API:

Создайте векторные переменные слова, word_size — размер словаря, embedding_size — размер вектора слова.

embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))

Определение весов и смещений для логистической регрессии в отрицательной выборке

nce_weights = tf.Variable(tf.truncated_normal
([vocabulary_size, embedding_size], stddev=1.0 / math.sqrt(embedding_size)))
nce_biases = tf.Variable(tf.zeros([vocabulary_size]))

Определить доступ к обучающим данным

train_inputs = tf.placeholder(tf.int32, shape=[batch_size])
train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])

Определите ввод в соответствии с обучающими данными и найдите соответствующий вектор слов

embed = tf.nn.embedding_lookup(embeddings, train_inputs)

Рассчитайте значение потерь на основе отрицательного метода выборки

loss = tf.reduce_mean( tf.nn.nce_loss
(weights=nce_weights, biases=nce_biases, labels=train_labels,
inputs=embed, num_sampled=num_sampled, num_classes=vocabulary_size))

Определяет использование стохастического градиентного спуска для выполнения операций оптимизации, минимизирующих значение потерь.

optimizer = tf.train.GradientDescentOptimizer(learning_rate=1.0).minimize(loss)

Выполните обучение модели с помощью метода TensorFlow Session Run.

for inputs, labels in generate_batch(...):
feed_dict = {train_inputs: inputs, train_labels: labels}
_, cur_loss = session.run([optimizer, loss], feed_dict=feed_dict)

Модель прогнозирования языка TensorFlow

В этой главе в основном рассматриваются технические принципы RNN и LSTM, а также обучаются языковые модели на основе технологии RNN/LSTM. То есть, учитывая последовательность слов, предсказать следующее слово, которое, скорее всего, появится. Например, учитывая входную последовательность LSTM из 3 слов [had, a, general], какое следующее слово предсказать? Как показано ниже:


Принцип технологии RNN

Рекуррентная нейронная сеть (RNN) — это тип нейронной сети, используемый для обработки данных последовательности. Отличие от сверточных нейронных сетей заключается в том, что сверточные сети — это нейронные сети, подходящие для обработки данных с координатной сеткой (например, данных изображения), а рекуррентные нейронные сети — это нейронные сети, подходящие для обработки сериализованных данных. Например, если вы хотите предсказать следующее слово предложения, вам обычно нужно использовать предыдущие слова, потому что передние и задние слова в предложении не являются независимыми. Причина, по которой RNN называют рекуррентной нейронной сетью, заключается в том, что текущий вывод последовательности также связан с предыдущим выводом. Конкретное проявление заключается в том, что сеть запомнит предыдущую информацию и применит ее для расчета текущего выхода, то есть узлы между скрытыми слоями уже не будут не связаны, а будут соединены, а вход скрытого слоя не только включает в себя вывод входного слоя Также включает вывод скрытого слоя в предыдущий момент. Как показано ниже:


Принцип технологии LSTM

Есть проблема с RNN, Во время обратного распространения градиент также будет затухать экспоненциально, что приводит к исчезновению градиента после многих этапов распространения и не может иметь дело с долгосрочными зависимостями. Хотя RNN теоретически могут обрабатывать последовательности любой длины, в практических приложениях RNN трудно обрабатывать последовательности длиннее 10. Для решения проблемы исчезновения градиента RNN предлагается модуль долговременной кратковременной памяти, который реализует функцию памяти на последовательности через переключатель вентиля.При обратном распространении ошибки с выходного слоя она может быть записаны с использованием элемента памяти модуля. Таким образом, LSTM может запоминать информацию в течение длительного периода времени. Общие модули LSTM показаны на следующем рисунке:



Выходной вентиль аналогичен входному вентилю и также генерирует вектор 0-1 для управления выходом ячейки памяти в выходной слой, как показано в следующей формуле:


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

Создание модели предсказания слов с помощью TensorFlow

во-первыхСкачать данные модели для PTB, набор данных содержит около 10 000 различных слов, а редкие слова снабжены аннотациями.

Во-первых, выборочный набор данных необходимо предварительно обработать, и каждое слово помечается целым числом, то есть строится индекс словаря, как показано ниже:

читать обучающие данные

Затем прочитайте текст обучающих данных, преобразуйте последовательность слов в последовательность индексов слов и сгенерируйте обучающие данные, как показано ниже:

Прочитайте слова обучающих данных и преобразуйте их в последовательность индексов слов.

data = _read_words(filename) data = [word_to_id[word] for word in data if word in word_to_id]

Сгенерируйте данные и метку обучающих данных, где epoch_size — это количество итераций обучения для эпохи, а num_steps — длина последовательности LSTM.

Создайте ячейку LSTM, где размер — это количество скрытых нейронов.

Если он находится в режиме обучения, чтобы обеспечить надежность обучения, определите операцию исключения.

Определите многослойную нейронную сеть RNN в соответствии с конфигурацией слоя.

Определение векторов слов на основе размера словаря

По индексу слов найдите вектор слов, как показано на следующем рисунке. Найдите соответствующую кодировку One-hot по индексу слова, и тогда красный вес напрямую соответствует значению выходного узла, который является соответствующим вектором встраивания.

Определите сеть RNN, где состояние — это состояние ячейки LSTM, а cell_output — это выходные данные ячейки LSTM.

Определите значение потерь обучения, как показано в следующей формуле.

Стоимость потерь

Определение градиентов и оптимизация операций

слово недоумение

Модель языкового перевода TensorFlow

В этом разделе в основном объясняется использование TensorFlow для реализации модели языкового перевода RNN и LSTM. Базовая модель последовательности к последовательности в основном содержит две сети RNN, одна сеть RNN используется для кодирования входных данных последовательности, а другая сеть RNN используется для генерации выходных данных последовательности. Инфраструктура показана на рисунке ниже

Каждое поле на приведенном выше рисунке представляет собой ячейку в RNN. В приведенной выше модели каждый вход кодируется в вектор состояния фиксированной длины, который затем передается декодеру. В 2014 году Богданау представил механизм внимания в статье «Нейронный машинный перевод путем совместного обучения выравниванию и переводу». Механизм Attention позволяет декодеру участвовать в различных частях исходного текста на каждом шаге вывода, позволяя модели влиять на результаты перевода на основе входного предложения и того, что было сгенерировано. Ниже показана многоуровневая структура сети LSTM «последовательность к последовательности» с механизмом внимания:


Для приведенной выше модели «последовательность к последовательности» TensorFlow инкапсулирует API-интерфейс функции, который можно вызывать напрямую, и для реализации основной модели трансляции требуется всего несколько сотен строк кода. Файл tf.nn.seq2seq реализует всего 5 функций seq2seq:

  • basic_rnn_seq2seq: ввод и вывод осуществляются в виде встраивания, кодировщик и декодер используют одну и ту же ячейку RNN, но не имеют общих параметров веса;
  • linked_rnn_seq2seq: то же, что и basic_rnn_seq2seq, но кодировщик и декодер имеют общие весовые параметры;
  • embedding_rnn_seq2seq: то же самое, что и basic_rnn_seq2seq, но ввод и вывод изменены на форму id, функция будет внутренне создавать матрицы внедрения для кодировщика и декодера соответственно;
  • embedding_tied_rnn_seq2seq: то же самое, что и linked_rnn_seq2seq, но ввод и вывод изменены на форму идентификатора, функция будет внутренне создавать матрицы внедрения для кодировщика и декодера соответственно;
  • embedding_attention_seq2seq: то же, что embedding_rnn_seq2seq, но с дополнительным механизмом внимания;

Описание интерфейса функции embedding_rnn_seq2seq выглядит следующим образом:

  • encoder_inputs: ввод энкодера
  • decoder_inputs: вход декодера
  • ячейка: экземпляр RNN_Cell
  • num_encoder_symbols, num_decoder_symbols: размер кодирования и декодирования соответственно
  • embedding_size: размер вектора слова
  • output_projection: матрица проекции и член смещения, используемые, когда выходной вектор декодера проецируется в словарное пространство.
  • feed_previous: если True, полезен только входной символ первого декодера, а все входные данные декодера зависят от выходных данных предыдущего шага;

TensorFlow официально предоставляет примеры перевода с английского на французский., с использованиемstatmtКорпусные данные, предоставляемые веб-сайтом, в основном включают: giga-fren.release2.fixed.en (английский корпус, 3,6G) и giga-fren.release2.fixed.fr (французский корпус, 4,3G). Структура кода для этого примера выглядит следующим образом:

  • seq2seq_model.py: модель TensorFlow для seq2seq использует embedding_attention_seq2seq для создания модели seq2seq.
  • data_utils.py: предварительная обработка данных корпуса, создание библиотеки словарей на основе данных корпуса и преобразование предложений для перевода в обучающие последовательности, представленные идентификаторами слов на основе библиотеки словарей. Как показано ниже:

translate.py: запись основной функции, которая выполняет обучение модели перевода.

Выполнить обучение моделей

Суммировать

Благодаря постоянному выпуску новых версий TensorFlow и постоянному увеличению числа новых моделей TensorFlow стал основной платформой глубокого обучения. В этой статье в основном представлены связанные модели и приложения TensorFlow в области обработки естественного языка. Во-первых, он представил математические принципы Word2Vec и то, как использовать TensorFlow для изучения векторов слов, затем рассмотрел технические принципы RNN и LSTM и объяснил модель предсказания языка TensorFlow, наконец, API машинного перевода и официальные примеры последовательности TensorFlow. -to-sequence были проанализированы с примерами.

использованная литература

  1. www.tensorflow.org
  2. Инструмент глубокого обучения: распределенный TensorFlow и анализ случаев
  3. Инструмент глубокого обучения: TensorFlow использует реальный бой
  4. Инструмент глубокого обучения: системная архитектура TensorFlow и высокопроизводительное программирование
  5. Инструмент глубокого обучения: TensorFlow и глубокие сверточные нейронные сети

об авторе

У Вэй: инженер отдела исследований и разработок IBM Spectrum Computing, кандидат технических наук, системный архитектор, в основном занимающийся исследованиями и разработками в области больших данных, глубокого обучения, облачных вычислений и т. д.

-Конец полного текста-

Искусственный интеллект больше не находится в воображении каждого, и все громкие имена подхватили эту волну и вложили средства в волну предпринимательства в области ИИ. Итак, в 2017 году какие случаи посадки ИИ? Как можно использовать машинное обучение, глубокое обучение, НЛП, распознавание изображений и другие технологии для решения бизнес-задач?

11-14 января 2018 года на Глобальной конференции по технологиям искусственного интеллекта AICon некоторые большие коровы поделятся последними достижениями ИИ в области финансов, электронной коммерции, образования, доставки еды, рекомендаций по поиску, распознавания лиц, автономного вождения, голоса. взаимодействие и другие области в первый раз.Из этого случая следует многому научиться. В настоящее время обратный отсчет конференции составляет 20%. Чтобы узнать о других интересных мероприятиях, нажмите, чтобы прочитать исходный текст для получения подробной информации.

t.cn/Rl2M2ZJ