Рекурсивные глубокие модели для семантической композиционности банка деревьев настроений
Рис. Дерево настроений и прогноз RNTN, Socher et al., 2013 г.Виджай Пракаш Двиведи
Виджай Пракаш Двиведи
доктор философии в NTU Сингапура | Глубокое обучение | Граф нейронных сетей
Опубликовано 5 июля 2018 г.
+ Подписаться
Эта статья представляет собой краткий обзор статьи Socher et al., 2013 , в которой авторы предложили новый и эффективный метод прогнозирования тонких настроений по заданному предложению.
В статье рассматривается построение композиционной семантики для прогнозирования тонких чувств в предложении.
Основная цель этой статьи состоит в том, чтобы опубликовать и проанализировать комплексный набор данных (деревобанк), который можно использовать для обучения и оценки композиционных моделей в приложениях НЛП, таких как анализ настроений, и предложить RNTN, который преодолевает ограничения ранее использовавшегося рекурсивные модели для аналогичной задачи.
Stanford Sentiment Treebank:Этот treebank построен с использованием корпуса из 11 855 предложений, проанализированных с помощью Stanford Parser. Деревья синтаксического анализа помечаются с помощью Amazon Mechanical Turk таким образом, что для каждой синтаксически возможной фразы во всех предложениях есть метка. Ниже показан интерфейс маркировки, который использовался аннотаторами.
Проанализировав этот банк деревьев, авторы обнаружили, что большинство коротких предложений были нейтральными. Более сильные чувства наблюдались в основном в более длинных предложениях.
Общее преимущество использования этого древовидного банка заключается в том, что можно построить мощные модели для прогнозирования тональности более коротких предложений, чего не удалось достичь с помощью более ранних подходов с набором слов в традиционных наборах данных.
Рекурсивная нейронная тензорная сеть:Как сообщают авторы, RNTN мотивирован тем, что устраняет ограничения, которые имеют рекурсивная нейронная сеть (RNN) и матрично-векторная RNN (MV-RNN):
a ) В RNN входные векторы во время композиции взаимодействуют через нелинейность (т. е. тангенс функция). Мощное взаимодействие между этими векторами улучшило бы результаты.
b) В MV-RNN каждое слово и фраза представлены вектором и матрицей, которые используются в качестве обучаемых параметров. Следовательно, по мере увеличения размера словаря количество параметров может быть огромным.
Поэтому авторы разработали RNTN с целью создания единой мощной функции композиции, которая не зависит от ввода и имеет фиксированное количество параметров. RNTN использует одну и ту же функцию композиции на основе тензора для всех узлов дерева, тем самым уменьшая параметры.
В следующем уравнении (которое используется для вычисления p_) V — это тензор, определяющий множественные билинейные формы. Фактически, каждый из d-количеств срезов в тензоре V может фиксировать тип влияния, которое дочерний узел оказывает на родителя. Таким образом, каждый фрагмент можно интерпретировать как запись определенного вида композиции.
Общая работа RNTN
Для описания работы RNTN сначала используются фразы различной длины. Фраза представлена векторами слов, и модель использует дерево синтаксического анализа в качестве входных данных. Векторы для более высоких узлов в дереве вычисляются с использованием той же функции композиции на основе тензора, где используются одинаковые веса. Эта весовая матрица является общей для всех узлов.
Заключение
Преимущество RNTN состоит в том, что эти сети являются более мощными для принципиального захвата значения и состава более длинных предложений. Анализ различных экспериментальных результатов, проведенный автором в этой работе, показывает, что RNTN улавливает такие явления, как отрицание и союз (показаны примерами с «но») в предложениях. Однако я заметил одну проблему с RNTN, заключающуюся в том, что он полагается на дерево синтаксического анализа, которое будет построено из входного предложения, что в случае более коротких коммуникативных предложений, таких как твиты, было бы затруднительно, поскольку твиты обычно не имеют грамматической структуры.
Для получения более подробной информации об этой работе см. оригинальную статью: Рекурсивные глубокие модели для семантической композиционности в банке деревьев настроений, Socher et al., 2013
объектно-ориентированных — как проанализировать существующие функции в определении класса Python?
У меня есть реализация Quantum CNN в наборе данных MNIST, но сейчас код представляет собой набор автономных функций, которые вызывают друг друга:
# Подготовка набора данных (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() # Нормализация данных между диапазоном от 0 до 1 x_train = x_train[..., np.newaxis] / 255,0 x_test = x_test[..., np.newaxis] / 255,0 # Эта функция позволяет классифицировать все 10 классов (0-9) как 0 или 1 соответственно. # Если вывод верен во время логического вывода, он будет равен 1. В противном случае 0. фильтр защиты (х, у): ... вернуть х, у x_train, y_train = фильтр (x_train, y_train) x_test, y_test = фильтр (x_test, y_test) # Изображения в наборе данных MNIST размером 28x28.В связи с ограничениями # количество кубитов, мы должны уменьшить размер изображения до 6x6. x_train_small = tf.image.resize (x_train, (6, 6)).numpy() x_test_small = tf.image.resize(x_test, (6, 6)).numpy() # Эта функция изменяет метки на -1.0 и 1.0, чтобы их можно было использовать в слое Parametrized # Quantum Circuit. def convert_label(y): возвращаться ... y_train_converted = [convert_label(y) для y в y_train] y_test_converted = [convert_label(y) для y в y_test] # Выбор подмножества для обучения из наших свернутых изображений x_train_small_sub = x_train_small[:300] x_test_small_sub = x_test_small[:100] y_train_sub = y_train_converted[:300] y_test_sub = y_test_converted[:100] # Построение квантовой модели def one_qubit_unitary (бит, символы): # Эта схема вызывает вращение сферы Блоха вокруг осей X, Y и Z, что зависит от значений в 'symbols' возвращаться ... def two_qubit_unitary (биты, символы): ... возвращаться ... биты = cirq.GridQubit.rect(4, 4) для i, j в zip (биты [0:: 2], биты [1:: 2]): распечатать (я, к) def conv_circuit (биты, символы): . .. возвращаться ... readout_operators = cirq.Z (биты [-1]) @tf.function определение custom_accuracy (y_true, y_pred): ... def create_model (кубиты): ... qubits36 = cirq.GridQubit.rect(4, 4) модель = tf.keras.Sequential( [tf.keras.layers.Input(shape=(), dtype=tf.string), tfq.layers.PQC(create_model(qubits36), readout_operators)]) защита encode_circuit_16 (значения): ... x_train_16 = [encode_circuit_16(x) для x в x_train_small_sub] x_test_16 = [encode_circuit_16(x) для x в x_test_small_sub] x_train_tensor_16 = tfq.convert_to_tensor (x_train_16) x_test_tensor_16 = tfq.convert_to_tensor(x_test_16) @tf.function определение custom_accuracy (y_true, y_pred): ... определение шарнир_точность (y_true, y_pred): ... возвращаться ...
Здесь обучается модель:
model.compile(optimizer=tf.keras.optimizers.Adam(), loss=tf.losses.Hinge(), metrics=[hinge_accuracy]) печать (модель.резюме()) history = model.fit(x=x_train_tensor_16, y=np.asarray(y_train_sub), batch_size=16, epochs=25, verbose=1, validation_data=(x_test_tensor_16, np.