Это седьмое руководство из серии руководств, которые помогут вам создать абстрактивный текстовый сумматор с использованием tensorflow.

Сегодня мы открываем для себя несколько новых способов комбинирования как абстрактных, так и экстрактивных методов копирования слов для резюмирования текста (код можно найти здесь в формате блокнота jupyter для google colab), мы бы объединили концепции генерации новых слов с копированием слов из данного предложения, мы бы узнали, почему это важно, и рассмотрим, как это делается на самом деле !!

На самом деле вы можете попробовать создать свои собственные резюме, используя эту модель, легко с помощью eazymind (я добавил эту модель в eazymind, чтобы ее можно было вызывать через простые вызовы api, а также через пакет python, чтобы эта модель могла быть легко интегрирована в ваше приложение без хлопот по настройке среды tensorflow), вы можете зарегистрироваться бесплатно и пользоваться этим api бесплатно.

Сегодня мы рассмотрим концепции, обсуждаемые в обеих этих статьях (Резюмирование абстрактного текста с использованием Seq) и (Добраться до сути: суммирование с помощью сетей указателей-генераторов, их репо, их поистине УДИВИТЕЛЬНОЕ сообщение в блоге ), их работа была действительно полезной, она привела к действительно отличным результатам, я бы очень хотел поблагодарить их за их потрясающие усилия

Сегодня мы бы

  1. Обсудите, как мы интегрируем оба мира абстрактных и экстрактивных методов для обобщения текста.
  2. Краткий обзор кода и предварительной обработки данных (я преобразовал эту модель в блокнот jupyter, чтобы беспрепятственно работать в Google Colab, а данные находятся на диске Google, поэтому не нужно загружать ни код, ни данных, вам нужен только сеанс Google Colab, чтобы запустить код, скопировать данные с моего диска Google на ваш (подробнее об этом) и подключить диск Google к записной книжке Google Colab).
  3. Эта модель была преобразована в apiпакет python), и вы можете просто опробовать ее в своих проектах, не беспокоясь о фактической настройке вашей среды tenorflow, вы можете бесплатно зарегистрироваться на eazymind и используйте этот api бесплатно прямо сейчас.

0- О серии

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

Мы уже рассмотрели (код для этой серии можно найти здесь)

0. Обзор бесплатной экосистемы для глубокого обучения (как использовать google colab с google drive)

  1. Обзор задачи реферирования текста и различных методов выполнения задачи
  2. Используемые данные и как они могут быть представлены для нашей задачи (предварительные условия для этого руководства)
  3. Что такое seq2seq для реферирования текста и почему
  4. Многослойный двунаправленный LSTM / GRU
  5. Beam Search & Attention для обобщения текста
  6. Построение модели seq2seq с вниманием и поиском луча

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

чтобы начать !!

1- Зачем копировать?

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

1–1 слово вне словарного запаса

которые являются невидимыми словами, на самом деле эта проблема возникает из-за того, что мы обучаем нашу модель с ограниченным словарем (поскольку словарь никогда не может содержать все английские слова), поэтому при тестировании наша модель столкнется с новыми словами, которые он не видел раньше, обычно мы моделируем эти слова как ‹unk›, но на самом деле это не дает хороших результатов !!

1-2 Неверная фактическая информация

Другая проблема заключается в том, что фактическая информация генерируется неточно.

вынесен приговор: В прошлой игре Германия обыграла Аргентину 3–2.

модель будет генерировать: Германия победила Аргентину 2–1

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

1–3 Замена имен похожими неправильными именами

Также другая проблема может быть замечена с точными именами людей и стран, поскольку наша модель фактически объединяет одни и те же страны вместе, используя концепцию встраивания слов, поэтому мы бы увидели, что модель фактически видит оба слова (Дели & Мумбаи) то же самое, и имена вроде (Анна и Эмили) будут одинаковыми, так как они будут иметь аналогичные вложения слов.

Поэтому мы бы реализовали модель, способную копировать уникальные слова из исходного предложения, так как нашей модели довольно сложно восстановить эти слова самостоятельно, этот метод называется Генератор указателей.

2- Что такое генератор указателей?

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

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

2–1 Наша основная структура

этот график был заимствован из (Get To The Point: Summarization with Pointer-Generator Networks, их репо, их поистине УДИВИТЕЛЬНОЕ сообщение в блоге)

Базовая структура построена как модель seq2seq (Mulitlayer Bidirectional LSTM Encode & a decoder with Beam Search & Attention), и для генерации выходного предложения мы используем результат обоих

  1. Декодер
  2. Внимание (вектор контекста) (т. е. внимание на самом деле говорит нам, какие слова важны из нашего ввода)

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

Итак, чтобы иметь в виду, у нас есть 2 важных дистрибутива:

1. локальное распределение (Внимание), которое сообщает, какие слова важны во введенном предложении.

2 - это локальное распределение (Внимание) используется для расчета Глобального распределения (Распределение словаря), которое сообщает вероятность релевантности вывода по ВСЕМ словам словаря

2–2 Теперь давайте добавим нашу сеть Pointer Generator.

Сеть Pointer Generator здесь будет нейронной сетью, обученной выбирать, где генерировать вывод, либо из

  1. Глобальное распределение (Распределение словарного запаса), т. е. создание новых новых слов.
  2. или из местного распространения (Внимание), т. е. скопируйте слова из исходного предложения.

этот график и формула были заимствованы из (Добраться до сути: обобщение с помощью сетей указателей-генераторов, их репо, их поистине УДИВИТЕЛЬНОЕ сообщение в блоге)

таким образом, у нас будет параметр Pgen, который будет содержать вероятность генерирования слова либо из Распределение словаря (словарь P), либо из Распределение внимания (сумма внимания слов), (то есть: либо сгенерировать новое слово, либо скопировать слово из предложения)

3- Как построить сеть генератора указателей

Было два основных подхода к реализации этой сети, оба основаны на одной концепции с небольшой дифференциацией в реализации.

основные входы будут

  1. Входы декодера
  2. Входы внимания

Резюмирование абстрактного текста с использованием последовательностей RNN и Beyond Paper

P вот Pgen, здесь мы получим его, обучив сигмовидный слой,

входы будут

  1. привет: скрытое состояние декодера (вывод декодера) → параметр декодер
  2. E [oi − 1]: предыдущий временной шаг шага декодера → параметр декодер
  3. ci: вектор контекста, взвешенный по вниманию, → входы внимания

Ws h, Ws e, Ws c, b s и v s - обучаемые параметры.

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

1. st: состояние декодера → параметр декодер.

2. xt: вход декодера → параметр декодер.

3. ht ∗: вектор контекста → входы внимания.

где векторы wh ∗, ws, wx и скалярный bptr являются обучаемыми параметрами

4- Реализация TensorFlow

Abisee реализовал статью Get to the Point: Summarization with Pointer-Generator Networks с использованием тензорного потока, его код основан на коде TextSum от Google Brain.

Я изменил его код (моя модификация)

поэтому не нужно загружать ни код, ни данные, вам нужен только сеанс google colab, чтобы запустить код, скопировать данные с моего диска Google на ваш (подробнее об этом) и подключить диск Google к ноутбуку Google Colab

5- Представление данных

эта модель была построена на наборе данных CNN / Daily Mail, который построен так, чтобы иметь несколько резюме для одной и той же истории.

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

Я изменил этот скрипт (моя модификация), чтобы он был проще (на случай, если вам нужно повторно обработать собственные данные)

исходный сценарий ожидает, что данные будут предоставлены в формате .story, который представляет собой файл данных, содержащий как текст, так и его сводку в одном файле, поэтому я просто отредактировал, чтобы было намного проще, теперь вы можете предоставить свои данные в my скрипт в формате csv

Я также заменил необходимость загрузки определенного java-скрипта (Stanford CoreNLP) для токенизации более простым токенизатором nltk (надеюсь, это окажется полезным)

6- API EazyMind

Если вам нужно опробовать эту модель (перед тем, как опробовать код), вы можете легко сделать это с помощью eazymind, которая является бесплатной платформой Ai-as-a-service, предоставляя это модель генератора указателей для обобщения абстрактного текста

Вы также можете воздержаться от бесплатного вызова этой модели как API через любой curl

curl -X POST \
  http://eazymind.herokuapp.com/arabic_sum/eazysum \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/x-www-form-urlencoded' \
  -d 'key=xxxxxxxxx&sentence=Facebook%20CEO%20Mark%20Zuckerberg%2C%20left%2C%20makes%20the%20keynote%20speech%20at%20F8%2C%20the%20Facebook%26%2339%3Bs%20developer%20conference%2C%20Tuesday%2C%20April%2030%2C%202019%2C%20in%20San%20Jose%2C%20Calif.%20(AP%20Photo%2FTony%20Avelar%20)%0AFacebook%20says%20that%2C%20unlike%20its%20past%2C%20its%20future%20is%20privacy%0AA%20trader%20works%20ahead%20of%20the%20closing%20bell%20on%20the%20floor%20of%20the%20New%20York%20Stock%20Exchange%20(NYSE)%20on%20April%2012%2C%202019%20in%20New%20York%20City.%20(Photo%20by%20Johannes%20EISELE%20%2F%20AFP)%20%20%20%20%20%20%20%20(Photo%20credit%20should%20read%20JOHANNES%20EISELE%2FAFP%2FGetty%20Images)%0AResilience%20is%20still%20the%20word%20for%20stocks'

или через пакет python

pip install eazymind

тогда просто назовите это

from nlp.eazysum import Summarizer
key = "xxxxxxxxxxxxxxxxxxxxx"
sentence = """(CNN)The White House has instructed former    White House Counsel Don McGahn not to comply with a subpoena    for documents from House Judiciary Chairman Jerry Nadler,     teeing up the latest in a series of escalating oversight     showdowns between the Trump administration and congressional Democrats.      McGahn's decision not to comply     with the subpoena could push Nadler     to hold McGahn in contempt of Congress,     just as he's moving to do with Attorney General William Barr after the Justice     Department defied a subpoena for the unredacted Mueller report and underlying evidence."""  
summarizer = Summarizer(key)
print(summarizer.run(sentence))

В следующий раз, если БОГ этого пожелает, мы пройдем через

  • новые новые методы комбинирования обучения с подкреплением с seq2seq для абстрактного резюмирования текста

(Подробнее о различных реализациях seq2seq для резюмирования текста)

Весь код этого руководства находится в открытом доступе здесь.

Я искренне надеюсь, что вам понравилось читать это руководство, и я надеюсь, что я прояснил эти концепции, весь код для этой серии руководств находится здесь, вы можете просто использовать google colab для его запуска, пожалуйста, ознакомьтесь с руководство и код, и скажите мне, что вы думаете об этом, не забудьте попробовать eazymind для бесплатного создания резюме текста, надеюсь увидеть вас снова