Бумажные заметки - «Перейдем к сути: обобщение с помощью сетей генераторов указателей»

NLP

Источник: ACL, 2017 г.
Ключевые слова: NLG, сети генераторов указателей.


1. Предыстория и описание проблемы

Появление модели seq2seq обеспечивает лучшее решение для реализации реферирования абстрактного текста, но у seq2seq часто есть два недостатка: 1. Легко генерировать неточные детали 2. Легко повторять 3. Не справляться с проблемами OOV. Автор предлагает два метода повышения производительности модели seq2seq.Один из них заключается в объединении PointerNetwork с кодировщиком в seq2seq, чтобы сгенерированные результаты были сгенерированы seq2seq из всех словарей и скопированы из исходного текста, чтобы он мог помогают генерировать точные слова, а также могут решать проблему OOV. Второй момент заключается в использовании механизма покрытия для отслеживания частей дайджеста по одной за раз, чтобы избежать повторения.

2. Существующие решения

seq2seq+внимание является основой для решения таких проблем:

Модель seq2seq делится на кодер и декодер. Со стороны кодировщика статья должна бытьwiw_iСлова в подаются на кодировщик (LSTM или Transformer) одно за другим, и статья получается через кодировщик.iiстатус кодированияhih_i(скрытые состояния кодировщика), на стороне декодера, в каждый момент времениtt, декодер получает вектор слова слова в предыдущий момент и получает состояние декодированияsts_t(скрытое состояние декодера), а затем вычислить вес вниманияata^t:

eit=vTtanh(Whhi+Wsst+batn)at=softmax(et)e^t_i=v^T tanh_{(W_hh_i+W_ss_t+b_{atn})} \\ a^t=softmax(e^t)

формулаvv,WhW_h, WsW_sа такжеbattnb_{attn}все изучаемые параметры. Веса внимания, полученные здесьata^tЕго можно рассматривать как вероятность внимания ко всем словам в источнике, которая используется, чтобы сообщить декодеру, на какое слово следует обратить внимание, чтобы сгенерировать следующее слово.

Затем используйте веса вниманияata^tи состояние кодированияhih_iВычислите взвешенное состояние кодирования, рассматриваемое как вектор контекстаht*h^*_t:

ht*=iaithih^{*}_t = \sum_i{a^t_ih_i}

Вектор контекста, полученный вышеht*h^*_tОн отправляется на два линейных слоя, и вычисляется softmax для получения распределения вероятностей списка слов.PvocabP_{vocab}, значение вероятности представляет собой вероятность того, что будут выбраны все слова в словаре.

P(w)=Pvocab=softmax(V'(V[st,ht*]+b)+b')P(w) = P_{vocab}=softmax_{(V^{'} (V[s_t, h^{*}_t] + b)+b^{'} )}

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

losst=logP(wt*)loss=1Tt=0Tlosstloss_t = -log_{P(w^{*}_t)} \\ loss = \frac{1}{T}\sum^{T}_{t=0}{loss_t}

3. Обзор решения

В этой статье предлагаются сети генераторов указателей на основе seq2seq, то есть seq2seq+PointerNetwork:

  1. Pointer-Generator Networks

На этапе расшифровки, как определить копировать или генерировать из первоисточника, автор вводит весpgenе[0,1] p_{gen} \in [0,1]принимать решение. Конкретный расчет, вttвремя:pgen=sigmoid(Wh*Tht*+wsTst+wxTxt+bptr)p_{gen}= sigmoid(W^{T}_{h^{*}}h^{*}_t + w^{T}_ss_t + w^{T}_xx_t+b_{ptr})в,Wh*W_{h^{*}},wsw_s, sxs_xа такжеbptrb_{ptr}обучаемый параметр, состояние декодированияsts_t, контекстный векторht*h^*_t, вход декодераxtx_t. На этапе декодирования необходимо поддерживать расширенный словарь, то есть исходный словарь плюс все слова, встречающиеся в источнике.Мы вычисляем вероятность всех токенов в этом расширенном словаре:

P(w)=pgenPvocab(w)+(1pgen)i:wi=waitP(w) = p_{gen}P_{vocab}(w) + (1-p_{gen})\sum_{i:w_i=w}{a^{t}_i}

Здесь, еслиwwявляется ООВ, тоPvocabP_{vocab}равно 0, то же самое, еслиwwЕсли он не появляется в источнике, последний элемент также равен 0.

Определение потери такое же, как и в seq2seq.

2.Coverage mechanism

повторениеЭто частая проблема с моделью seq2seq, которая представлена ​​в этой статье.Coverage modelЧтобы решить эту проблему, это также является основной изюминкой этой статьи. Конкретная реализация состоит в том, чтобы добавить веса внимания всех предыдущих шагов квектор покрытияctc^{t}начальство.Это должно использовать предыдущее решение о весе внимания, чтобы повлиять на текущее решение о весе внимания, чтобы избежать повторения в одной и той же позиции, тем самым избегая повторного создания текста.. Конкретный расчет выглядит следующим образом:ct=t'=0t1at'c^{t}=\sum^{t-1}_{t^{'}=0}{a^{t^{'}}}потомобложка векторДобавлено в расчет весов внимания:eit=vTtanh(Whhi+Wsst+wccit+batn)e^t_i=v^T tanh_{(W_hh_i+W_ss_t+w_cc^{t}_i +b_{atn})}Это позволяет на текущее решение влиять на историческое решение при расчете веса внимания, так что механизм внимания может избежать повторения внимания к определенной позиции, что также может избежать генерации повторяющихся слов.

Автор обнаружил, что введениеcoverage lossявляется необходимым,coverage lossрассчитывается следующим образом:covlosst=imin(aitcit)covloss_t=\sum_i{min(a^{t}_i c^{t}_i)}

Стоит отметить, что эта потеря наказывает только повторное внимание (мин) и не заставляет модель обращать внимание на каждое слово в исходном тексте.

Окончательная потеря модели, гдеλ\lambdaявляются гиперпараметрами:losst=logP(wt*)+λimin(aitcit)loss_t = -log_{P(w^{*}_t)} + \lambda \sum_i{min(a^{t}_i c^{t}_i)}

Количественная интерпретация потери покрытия

зачем присоединятьсяcoverage lossМожет ли оно играть роль наказания за повторное внимание? Например, для последовательности из 4 слов, вttВектор покрытия, полученный путем пошагового расчета, имеет вид:cit=(0.03,2.88,0.03,0.03)c^t_i=(0.03,2.88,0.03,0.03), Очевидно, что второму жетону было уделено слишком много внимания, и он должен быть соответствующим образом наказан. Если декодер находится вttВ тот момент, когда внимание продолжает обращать внимание на второй токен, например:ait=(0.01,0.96,0.01,0.01)covlosst=imin(aitcit)=ait=1a^t_i=(0.01,0.96,0.01,0.01) \\ covloss_t=\sum_i{min(a^{t}_i c^{t}_i)}=\sum{a^t_i}=1В этом случае получаемые потери относительно велики. Если декодер находится вttМомент не второй знак беспокойства? Например:ait=(0.96,0.01,0.01,0.01)covlosst=imin(aitcit)=(0.03,0.01,0.01,0.01)=0.06a^t_i=(0.96,0.01,0.01,0.01) \\ covloss_t=\sum_i{min(a^{t}_i c^{t}_i)}=\sum{(0.03,0.01,0.01,0.01)}=0.06В этом случае расчетные потери относительно невелики.

4. Анализ результатов

2021-01-05 10-07-18屏幕截图.png-103.1kB

При оценке рефератов метод, предложенный в этой статье, значительно улучшает показатель ROUGE. Кроме того, автор обнаружил, что при экспериментальной настройке лида-3, то есть были извлечены и сгенерированы только первые три предложения статьи, оценка ROUGE была значительно выше, поскольку ключевая информация новостей обычно появлялась в начале статья. На самом деле авторы экспериментировали и обнаружили, что использование только первых 400 токенов работает лучше.

Кроме того, автор также проанализировал долю редких n-грамм, сгенерированных моделью в этой статье и моделью seq2seq+attentoin:2021-01-05 10-27-14屏幕截图.png-42kBРедкая n-грамма определяется как не встречающаяся в исходной n-грамме. Как видно из рисунка выше, модель в этой статье генерирует относительно мало редких n-грамм, а модель seq2seq+attentoin генерирует больше, и большинство из них ошибочны.

5. Инновация или вклад

  1. В тексте предлагается модель гибридного указателя, в которой представлен механизм наложения, который может эффективно решить проблемы неточности и дублирования генеративных моделей.
  2. В задаче извлечения длинного текста результаты этой модели значительно превзошли результаты SOTA того времени.
  3. Эта статья основана на модели PointerNetwork и Coverage, добавленной к модели seq2seq Эффект значительно улучшен, но параметры модели не сильно увеличились. В деталях параметры базовой модели имеют в общей сложности 21 499 600 параметров, генератор указателей добавляет 1153 параметра, а покрытие добавляет 512 параметров.

6. Личное мышление

Классические статьи, классические идеи, достойные глубокого изучения!

[Ссылаться на]paper code-pytorch