Короче говоря ... Пример использования НЛП при обобщении текста

В этот быстро меняющийся век мы все хотим быть в курсе повседневных событий по всему миру, но очень немногие люди могут позволить себе такую ​​роскошь. Что касается чтения газет и статей, то важно бегло просмотреть, то есть сначала просмотреть заголовки, а затем сразу перейти к ним, только если это интересно или стоит прочитать. Когда контент доступен по нажатию кнопки, мы все предпочитаем просматривать «обобщенные» новости, собранные из популярных газет, веб-сайтов, блогов и журналов; доставляется в трех-четырех предложениях - вместо того, чтобы читать длинные и временами переоцененные и преувеличенные статьи в газетах.

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

Google News, Inshorts, Pulse - это некоторые из приложений-агрегаторов новостей, использующие алгоритмы резюмирования текста. В этом посте я расскажу вам о различных традиционных и продвинутых методах реализации автоматического суммирования текста.

Обобщение текста в целом делится на два класса - экстрактивное обобщение и абстрактное обобщение.

  • Экстрактивное обобщение - это традиционный метод, при котором предложения извлекаются прямо из исходного документа в зависимости от их важности. Обратите внимание, что полученное резюме содержит точные предложения из исходного текста.
  • Абстрактивное обобщение - абстрактное обобщение ближе к тому, что обычно делает человек, т. е. представляет текст, сравнивает его со своей памятью и связанной с ним информацией, а затем воссоздает его ядро ​​в кратком тексте. Вот почему абстрактное реферирование является более сложной задачей, чем экстрактивный метод, поскольку модель должна разбивать исходный корпус на отдельные токены и восстанавливать целевые предложения. Получение содержательных и грамматически правильных предложений в резюме - большое дело, требующее очень точных и сложных моделей.

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

Рассмотрим этот отрывок из квартальных результатов Tesla на веб-сайте деловых новостей.

text = """
Tesla reported second-quarter earnings after the bell Monday, and it’s a beat on both the top and bottom lines. Shares rose about 2% after-hours. Here are the results.
Earnings: $1.45 vs 98 cents per share adjusted expected, according to Refinitiv. Revenue: $11.96 billion vs $11.30 billion expected, according to Refinitiv
Tesla reported $1.14 billion in (GAAP) net income for the quarter, the first time it has surpassed $1 billion. In the year-ago quarter, net income amounted to $104 million.
Overall automotive revenue came in at $10.21 billion, of which only $354 million, about 3.5%, came from sales of regulatory credits. That’s a lower number for credits than in any of the previous four quarters. Automotive gross margins were 28.4%, higher than in any of the last four quarters.
Tesla had already reported deliveries (its closest approximation to sales) of 201,250 electric vehicles, and production of 206,421 total vehicles, during the quarter ended June 30, 2021.
The company also reported $801 million in revenue from its energy business, including solar photovoltaics and energy storage systems for homes, businesses and utilities, an increase of more than 60% from last quarter. While Tesla does not disclose how many energy storage units it sells each quarter, in recent weeks CEO Elon Musk said, in court, that the company would only be able to produce 30,000 to 35,000 at best during the current quarter, blaming the lag on chip shortages. Tesla also reported $951 million in services and other revenues. The company now operates 598 stores and service centers, and a mobile service fleet including 1,091 vehicles, an increase of just 34% versus a year ago. That compares with an increase of 121% in vehicle deliveries year over year. A $23 million impairment related to the value of its bitcoin holdings was reported as an operating expense under “Restructuring and other.”
"""

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

!pip install bert-extractive-summarizer
!pip install spacy
!pip install transformers
!pip install torch
!pip install sentencepiece

Импортировать библиотеки

import gensim
from gensim.summarization import summarize
import torch
from transformers import pipeline
from transformers import T5Tokenizer
from transformers import T5ForConditionalGeneration
from transformers import T5Config
from summarizer import Summarizer
from summarizer import TransformerSummarizer

Обобщение с использованием Gensim (Text Rank)

Пакет gensim используется для обработки естественного языка и задач поиска информации, таких как моделирование тем, индексация документов, word2vec и поиск сходства. Здесь мы используем его для реферирования текста с помощью алгоритма TextRank.

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

Давайте использовать функцию gensim’ssummarize, используя различные итоговые параметры, указанные ниже.

  1. ratio: может принимать значения от 0 до 1. Он представляет собой пропорцию резюме по сравнению с исходным текстом.
  2. word_count: Он определяет количество слов в резюме.

Суммировать по соотношению:

summary_by_ratio = summarize(text, ratio=0.15) 
print("Summary : \n" + summary_by_ratio)
Output >>>
Summary :  The company also reported $801 million in revenue from its energy business, including solar photovoltaics and energy storage systems for homes, businesses and utilities, an increase of more than 60% from last quarter. Tesla also reported $951 million in services and other revenues.

Резюмируйте по количеству слов

summary_by_count=summarize(text, word_count=60)
print("Summary : " + summary_by_count)
Output >>>
Summary : Overall automotive revenue came in at $10.21 billion, of which only $354 million, about 3.5%, came from sales of regulatory credits. The company also reported $801 million in revenue from its energy business, including solar photovoltaics and energy storage systems for homes, businesses and utilities, an increase of more than 60% from last quarter. Tesla also reported $951 million in services and other revenues.

Абстрактное обобщение с предварительно обученными моделями

Здесь мы используем библиотеку преобразователей на Python для выполнения абстрактного текстового резюмирования входящего текста. Всю документацию по библиотеке трансформеров можно найти на сайте: https://huggingface.co/transformers/

Давайте теперь исследуем методы обобщения, используя нижеприведенные методы.

  • API конвейера
  • Трансформатор T5
  • БЕРТ
  • GPT2
  • XLNet

Обобщение с использованием Pipeline API

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

Этот конвейер может использовать модели, которые были точно настроены для задачи реферирования, которая в настоящее время имеет вид 'bart-large-cnn', 't5-small', 't5-base', 't5-large', 't5–3b', 't5–11b'

Запустите конвейер суммирования с моделью по умолчанию

summarization = pipeline("summarization")
## Call the transformer's summarization api by passing text
abstract_text = summarization(text)[0]['summary_text']
print("Summary:", abstract_text)

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

Вот сводка, созданная после выполнения вышеуказанного pipeline кода.

Output >>>
Summary:  Tesla reported $1.14 billion in (GAAP) net income for the quarter, the first time it has surpassed $1 billion . The company also reported $801 million in revenue from its energy business, including solar photovoltaics and energy storage systems . Shares rose about 2% after-hours .

Сгенерированное абстрактное резюме выглядит довольно прилично, не правда ли!

Запустите тот же конвейер, явно передав модель t5-base

## setup the pipeline with t5-base model
t5summarizer = pipeline("summarization", model="t5-base", tokenizer="t5-base", framework="tf")
## Build the summary with min 5 and max 60 words
t5summarizer(text, min_length=5, max_length=60)
Output >>>
Summary: Tesla reported $1.45 vs 98 cents per share adjusted expected, according to Refinitiv . overall automotive revenue came in at $10.21 billion, of which only $354 million, about 3.5%, came from sales of regulatory credits

Обобщение с помощью трансформатора T5

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

Создайте экземпляр предварительно обученной модели «t5-small» с помощью метода from_pretrained.

t5model = T5ForConditionalGeneration.from_pretrained('t5-small')
t5tokenizer = T5Tokenizer.from_pretrained('t5-small')
device = torch.device('cpu')

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

t5tokenized_text = t5tokenizer.encode("summarize:"+ text,
                                truncation=True,
                                return_attention_mask=True,
                                add_special_tokens=True, 
                                padding='max_length',     
                                return_tensors="pt").to(device)

Затем вы передадите input_ids из токенизированного текста, возвращенного функцией кодирования, вместе с другими параметрами. Используемая здесь техника - «поиск луча». Поиск луча снижает риск пропуска скрытых последовательностей слов с высокой вероятностью, сохраняя наиболее вероятное число гипотез на каждом временном шаге и, в конечном итоге, выбирая гипотезу с наибольшей общей вероятностью.

Узнайте больше о жадном поиске и лучевом поиске здесь: https://huggingface.co/blog/how-to-generate

t5summary_ids =  t5model.generate(input_ids=t5tokenized_text['input_ids'],
                 attention_mask=t5tokenized_text['attention_mask'],
                 num_beams=3,
                 min_length=20,
                 max_length=70,
                 repetition_penalty=2.0,
                 early_stopping=True)

Объяснение параметров приведено ниже;

  • max_length: максимальное количество токенов для генерации.
  • min_length: это минимальное количество токенов для генерации.
  • length_penalty: Экспоненциальный штраф к длине, 1.0 означает отсутствие штрафа, увеличение этого параметра увеличит длину выходного текста.
  • num_beams: указание этого параметра приведет к тому, что модель будет использовать поиск лучей вместо жадного поиска, установка num_beams на 4 позволит модели искать 4 возможных слова (1 в случае жадного поиска).
  • early_stopping: мы устанавливаем его в True, чтобы генерация завершалась, когда все гипотезы луча достигли конца токена строки (EOS).
output = t5tokenizer.decode(t5summary_ids[0],  
                             skip_special_tokens=True, 
                             clean_up_tokenization_spaces=True)
print ("Summary:", output)
Output >>>
Summary: shares rose about 2% after-hours, according to Refinitiv. in the year-ago quarter, net income amounted to $104 million. overall revenue came in at $10.21 billion, of which only $354 million came from regulatory credits.

Обобщение с помощью модели BERT

BERT (двунаправленный преобразователь) - это преобразователь, используемый для преодоления ограничений RNN и других нейронных сетей как долгосрочных зависимостей. Это предварительно обученная модель, которая естественно двунаправленная. Эту предварительно обученную модель можно настроить для легкого выполнения заданных задач НЛП, в нашем случае - Суммирование.

bert_model = Summarizer()
bert_summary = ''.join(bert_model(text, min_length=60))
print("Summary: " + bert_summary)
Output >>>
Summary: Tesla reported second-quarter earnings after the bell Monday, and it’s a beat on both the top and bottom lines. The company also reported $801 million in revenue from its energy business, including solar photovoltaics and energy storage systems for homes, businesses and utilities, an increase of more than 60% from last quarter. That compares with an increase of 121% in vehicle deliveries year over year.

Обобщение с моделью GPT2

Генеративные предварительно обученные модели преобразователей (GPT) от OpenAI взяли штурмом сообщество обработки естественного языка (NLP), представив очень мощные языковые модели. Эти модели могут выполнять различные задачи НЛП, такие как ответы на вопросы, текстовое следствие, суммирование текста и т. Д. Без какого-либо контролируемого обучения.

GPT-2 может предсказывать следующее слово в гораздо более крупном и сложном масштабе. Для справки, самый маленький доступный GPT-2 имеет 117 миллионов параметров, тогда как самый большой (невидимый для публики) имеет более 1,5 миллиардов параметров. Самый большой из доступных для публичного использования - это половина их основной модели GPT-2.

Давайте загрузим модель и получим сгенерированную сводку!

GPT2_model = TransformerSummarizer(transformer_type="GPT2",
                         transformer_model_key="gpt2-medium")
gpt_summary = ''.join(GPT2_model(text, min_length=60))
print(gpt_summary)
Output >>>
Summary: Tesla reported second-quarter earnings after the bell Monday, and it’s a beat on both the top and bottom lines. In the year-ago quarter, net income amounted to $104 million. The company also reported $801 million in revenue from its energy business, including solar photovoltaics and energy storage systems for homes, businesses and utilities, an increase of more than 60% from last quarter.

Вау! намного лучше, чем Берт! Посмотрите на такое подробное резюме, которое оно составило!

Теперь перейдем к нашей последней модели, XLNet!

Обобщение с XLNet

XLNet - это обобщенная модель авторегрессионного языка, которая изучает неконтролируемые представления текстовых последовательностей. Эта модель включает методы моделирования из моделей Autoencoder (AE) (BERT) в модели AR, избегая при этом ограничений AE.

Загрузим модель и распечатаем сводку /

xlnet_model = TransformerSummarizer(transformer_type="XLNet",
                     transformer_model_key="xlnet-base-cased")
xlnet_summary = ''.join(xlnet_model(text, min_length=60))
print("Summary: " + xlnet_summary)
Output >>>
Summary: Tesla reported second-quarter earnings after the bell Monday, and it’s a beat on both the top and bottom lines. That’s a lower number for credits than in any of the previous four quarters. The company also reported $801 million in revenue from its energy business, including solar photovoltaics and energy storage systems for homes, businesses and utilities, an increase of more than 60% from last quarter.

Полученные результаты для всех моделей трансформаторов показывают, что они действительно хорошо работают, и это действительно впечатляет! 👌

Вывод

Резюмирование текста стало важным и своевременным инструментом для помощи и интерпретации текстовой информации в современном быстрорастущем информационном веке. Его применение можно увидеть везде, где задействован текстовый документ, независимо от поля. Из-за своих приложений и простоты суммирование текста является популярной темой в области обработки естественного языка.

Я надеюсь, что эта статья даст вам информацию о различных типах и различных подходах, которые используются для резюмирования текста. Если да, пожалуйста, поделитесь аплодисментами .. 👏