T5? BERTSUM? 最近の要約言語モデルってどうなってるの? 最新言語モデルを比較してみた

最新要約言語モデル比較

近年BERTを筆頭に自然言語処理分野が発展してきて、次から次に新しいモデルが出ていますよね。

今回はさまざまな自然言語モデルの中から要約タスクができるモデルをピックアップして比較してみました。

  1. 要約モデルの種類
    1. 抽出型モデル
    2. 抽象型モデル
  2. 使用するモデル
    1. 抽出型モデルの説明
    2. 抽象型モデルの説明
  3. 使用するデータセットの説明
    1. CNN/Daily Mail
    2. xsum
  4. モデルの性能
  5. 比較
    1. 要約結果(抽出型)
    2. 要約結果(抽象型)
  6. まとめ
  7. 参考

要約モデルの種類

要約モデルは現在大きく分けて2種類存在しています。今回はここに焦点を当てて比較を行っていきます。

  • 抽出型(extractive)モデル
  • 抽象型(abstractive)モデル


それぞれの特徴は以下の通りです。

抽出型モデル

抽出型モデルは文字通り入力から文章を抽出して要約文を出力します。

メリット
  • 元の文章内の正しい内容が出力される
デメリット
  • 文と文の接続に違和感がある
  • 要約文の長さを制御しにくい

抽象型モデル

抽象型モデルは入力した文章から新しい文章を生成します。

メリット
  • 文章に違和感がなく、読みやすい
  • 要約の長さを制御しやすい
デメリット
  • 内容とは異なる文章が生成されることがある


どちらも一長一短ですが、これらはユースケースによって使い分ける必要があります。

使用するモデル

今回比較に用いるモデルは抽出型と抽象型で複数用意しました。以下でモデルの簡単な説明をします。

抽出型モデルの説明

BERTSUMExt


BERTSUMExtはBERTを用いた抽出型要約モデルです。

BERTというのは正式名称は『Bidirectional Encoder Representations from Transformers』というモデルで、事前学習としてマスクされた単語を予測する学習と二文が連続した文章かどうかを学習します。

BERTのモデル構造


そしてBERTSUMExtはBERTを要約タスク用にファンチューニングすることなく、事前学習のみを行ったBERTを用いて要約タスクを行います。BERT自体は名前の通り、双方向のエンコーダーのみのアーキテクチャです。

BERTSUMExtではBERTの中間層の値からK-means法を用いてクラスタリングを行い、各クラスタのセントロイドに最も近い文章を要約の候補とするということを行います。

今回は後ほど説明するbert-extractive-summarizerライブラリではGoogleが提供しているbert-large-uncasedという事前学習済みモデルがインストールされ使用することができます。このBERTはlargeサイズであり、uncasedのため大文字と小文字を区別されたモデルとなっています。

GPT-2


GPT-2は『Generative Pre-Training 2』という名前の通り、文章の生成に焦点を当てたTransformerモデルです。

特徴としては悪用されたら大変危険であるとしてリリースを延期したほどの自然な文章を生成できるモデルです。
GPT-2の事前学習では文章の次の単語を予測する学習を行います。

GPT-2の構造


こちらもBERTSUMExtと同じ要領で中間層の値からK-means法を用いてセントロイドから最も近い文章を要約の文章の候補とする文章要約を行いました。

文章のトークナイズ部分ではByte Pair Encoding (BPE)という出現頻度が稀な単語は文字単位に分割するという手法を用いてトークナイズしています。

こちらもイーロン・マスクらが創設したOpenAIが提供しているアメリカの掲示板サイトRedditをスクレイピングして得たデータセットで事前学習したGPT-2-mediumを使います。

これも後ほど説明するbert-extractive-summarizerライブラリでモデルを指定することで簡単にインストールされ、使用することができます。

抽象型モデルの説明

T5


T5の正式名称は『Text-to-Text Transfer Transformer』です。フォーマットに沿った入力にすることで、どんなタスクでもText-to-Textで入力と出力が得られるため、1つのモデルでさまざまなことができるのが大きな特徴です。

t5の入力と出力の形式


モデルの構造は、Prefix Language Modelと呼ばれるものを採用しています。

これはフォーマットのタスク部分はマスキングせず、それ以降のメインとなる文章はマスクするAttentionのことを指します。

以下の図ではグレーの線はマスクをかけておらず、黒線のみがマスクをかけています。

Prefix Language Modelの構造


事前学習には、Denoising objectivesという手法を取っており、15%のトークンを抜き出します。抜き出されたトークンが連続した場合は1つにまとめ、センチネルトークンと呼ばれる一意に定まるマスクトークンに置き換えます。

出力はマスクされたトークンを予測することで学習します。

T5の事前学習方法


また、事前学習に使うコーパスはC4と呼ばれる非常に大きなデータセットをこのモデルが初めて使用しました。
今回はGoogleが提供しているC4で事前学習だけさせたt5-baseと、そのモデルをNews Summary というデータセットでファインチューニングさせたモデルを使用しました。

News SummaryでファインチューニングさせたT5モデルの詳細
https://huggingface.co/mrm8488/t5-base-finetuned-summarize-news

PEGASUS


PEGASUSは正式名称は『Pretraining with Extracted Gap-sentences for Abstractive Summarization Sequence-to-sequence models』です。

モデルの構造はBERTと全く同じなのですが、事前学習にGap Sentence Generation(GSG)を用いるのが大きな特徴です。

GSGは入力文の一部をトークン単位ではなく、文章単位でマスクします。

この手法は、事前学習の方法は転移学習やファインチューニングで用いられるタスクに似ているほど学習が高速かつ性能が良くなるという仮説の元採用されました。

PEGASUSのモデル構造と事前学習方法


また、1000個ほどの少量なデータセットでファインチューニングしただけで6つのベンチマークでSoTAを達成したのも特徴的です。

今回はGoogleが提供している事前学習のみのPEGASUS-largeモデルとそのモデルをCNN/Daily Mailとxsumというデータセットでそれぞれファインチューニングさせたモデルを使用しました。 

BART


BARTのモデル構造はエンコーダーに双方向エンコーダーであるBERTを用い、デコーダーとして左から右にデコードするGPTを用いたものになっており、BART自体はSeq2Seqモデルであると言えます。

BARTのモデル構造


BARTはSeq2Seqモデルなので、入力と出力の数が異なっていても動作する点から5つの事前学習の手法を比較しており、最終的にはText InfillingとSentence Permutationを組み合わせた手法を採用しています。

BARTの事前学習方法


Text Infillingはポアソン分布から取り出された複数のトークンを1つのマスクトークンに置き換える手法です。長さ0が取り出された時はマスクトークンだけが挿入されます。

これはスパンからどれだけのトークンが欠落しているのか予測するために学習させます。

また、Sentence Permutationはピリオドを基準に文章を分割してランダムに並びかえる手法です。これらの事前学習手法を用いて、元の文章を予測していきます。

今回はfacebookが提供している事前学習のみのBART-largeモデルと、このモデルをCNN/Daily MailとxsumのデータセットでそれぞれファインチューニングさせたBART-largeモデルを使用しました。

使用するデータセットの説明

PEGASUSとBARTのファインチューニングで使用したCNN/Daily Mailとxsumのデータセットについて説明します。

どちらも新聞記事から作成された要約のデータセットです。しかし中身をみてみると全く別の種類の要約データセットであることがわかります。具体的にどんな違いがあるのか実際のデータセットから確認してみましょう!

CNN/Daily Mail

CNN/Daily Mailは新聞記事の本文とその三文要約のデータセットです。特徴は以下の通りです。

・記事本文は平均781単語
・要約文は平均3.75行(平均56単語)
要約文は記事本文に似た傾向がある

重要なのは3番目の項目です。要約文が記事本文に似ていることから、抽出型モデルでこのデータを使用すると性能が上がりやすいです。

実際にどのようなデータセットになっているのか見てみましょう。


記事本文例

A workaday local news report on a brush fire came to an adorable ending when it inadvertently captured a kitten being rescued.

Roger Lohse, a reporter with Miami-area station WPLG, was about to finish reporting on an 800-acre blaze in southwest Miami-Dade when his cameraman pointed out something behind him. 

As the camera zoomed in, live footage showed firefighters plucking a tiny black kitten from the edges of the smoldering blaze. 

It's behind you: WPLG reporter Roger Lohse had almost finished an unremarkable report on a fire when it was pointed out that a kitten was being rescued behind him.

Noticing: Lohse's cameraman pointed out the rescue to him, and he went to investigate . As Lohse noticed the live rescue, he ran over to two firefightings holding the lost kitten in a towel, and asked where it had been found.

A firefighter who had the animal in her hands said that the tiny pet had been hiding from the fire in an empty Modelo beer box. Lohse signed off his noon report by saying: 'Look at that! Not only did they put out the fire, but we just had the rescue here. How about that - that's a great story'.

Later in the day, WPLG reported that the blaze was mostly contained, and that fire fighters hoped that forecast rain would put an end to it completely. 

Cute: A firefighter was filmed picking up the kitten in a towel from the edge of the smoldering fire. 

Hiding place: Firefighters said the kitten had been found sheltering in this empty Modelo beer box.


要約例

Reporter Roger Lohse was reporting on burning brush near Miami, Florida.

Cameraman noticed tiny black kitten being rescued behind him Lohse.

Firefighters revealed kitten had been hiding in Modelo beer box from fire.

本文に沿った単語が要約に含まれていることがわかります。また、本文にある具体的な固有名詞は要約文にそのまま述べられています。

xsum

xsumも新聞記事要約のデータセットです。論文ではextreme summarizationと紹介されており、記事本文に対して要約文が1文のみで構成されているのが特徴です。

また要約文はかなり抽象度が高く、抽象型モデルでこのデータを使用すると性能が上がりやすいです。


記事本文例

Authorities said the incident took place on Sao Joao beach in Caparica, south-west
of Lisbon.

The National Maritime Authority said a middle-aged man and a young girl died after they were
unable to avoid the plane.

The plane’s only two occupants were unharmed, it added.

The Diario de Noticias newspaper quoted an eyewitness who said the plane had been flying
at a low altitude over the beach, although he did not realise anything was wrong until other
beachgoers began running.

One young witness told Reuters news agency: “I was near the water when I saw the plane. I called my parents, the plane fell on the sand and ran over two people, fatally hurting them and another was injured, I think, but I’m not sure, people were running away.”

“The plane is still there, but the ambulances arrived quickly. I think maybe the fuel ran out
because I find it weird that it landed on the beach.”

Other reports said the victims had been sunbathing when the plane made its emergency landing.

The Associated Press news agency said the girl who died had been with her parents, who were unhurt. 

The agency quoted witnesses from local television broadcasts.

Joao Quadros, who was on the beach, tweeted photos of the aftermath, saying the plane had passed by his son by a matter of metres. There had been no noise, he said.

Video footage from the scene carried by local broadcasters showed a small recreational plane parked on the sand, apparently intact and surrounded by beachgoers and emergency workers.

One wing seemed to be misaligned in those photos.

The cause of the emergency landing remains unclear


要約例

A man and a child have been killed after a light aircraft made an emergency landing
on a beach in Portugal.


男性と子供が亡くなった内容は2行目、緊急着陸した内容は7行目, 事件が起こった現場の内容は1行目に対応しています。また、要約文を見てみると名詞や動詞の言い換えが多くあることがわかります。

例えば

Sao Joao beach in Caparica, south-west of Lisbon

は要約だと

a beach in Portugal.

のように、より抽象的な表現に変換されています。

モデルの性能

自然言語処理の要約タスクは複数用意されています。参考にCNN/Daily Mailデータセットでのモデル性能を確認してみます。

これらのモデルのベンチマークは表のようになっています。

CNN/Daily Mail
ROUGE-1 ROUGE-2 ROUGE-L
T5-base 42.05 20.34 39.40
T5-large 42.50 20.68 39.75
PEGASUS large
(Huge News)
44.17 21.47 41.11
BART (large) 44.16 21.28 40.90
GPT-2 29.34 8.27 26.58
BERTSUMExt(Large) 43.85 20.34 39.90


ROUGEと呼ばれるこの指標は要約の自動評価尺度であり、F1値で表されています。また、値が大きい方が精度が良いことを示しています。

ROUGE-Nスコアは正解ラベルの要訳文のN-gramのうちどれくらい出力文のN-gramが一致しているかを示します。

ROUGE-Lスコアは生成した要約文と正解ラベルの要訳文の中で最も長く一致している文字数はどのくらいかを示します。

ROUGEスコアだけ見るとPEGASUSモデルが優れていますが、実際に人間が見た時にどのように感じるでしょうか。

それでは次のセクションで実際に出力を確認してみましょう!

比較

CNBCの記事を使って出力される要約文を比較していきます。

TikTok owner ByteDance takes on Tencent after acquiring major mobile gaming studio


また、目視で判断するための参考として記事にあるkey pointsの項目とmeta情報のdescriptionを確認しましょう。記事のkey pointsはこのようになっています。

  • ByteDance has acquired gaming studio Moonton highlighting its ambitions in the video game industry and pitting it against Chinese giant Tencent.
  • The TikTok owner is looking to diversify beyond advertising and take a slice of the $86 billion mobile gaming market as well as expand its footprint internationally.
  • Moonton is famous for “Mobile Legends” a so-called multiplayer online battle arena (MOBA) game.


descriptionはこのように記述されています。

ByteDance has acquired a major gaming studio called Moonton highlighting its ambitions in the video game industry and pitting it against Chinese giant Tencent.


それではこれらの情報を参考にして、どのような要約が出力されるのか比較していきましょう。
(出力結果は見やすいようにピリオドで改行しています)

要約結果(抽出型)

抽出型モデルはどちらもbert-extractive-summarizerというライブラリを使用します。インストールはpipだけでできます。

内部では後ほど説明する抽象型モデルでも使用するhuggingfaceのtransformersライブラリが使用されており、指定したモデルやTokenizerをインストールしてくれます。

また、デフォルトで入力文の先頭は重要である(タイトルなど)という仮説から入力文の1文目が出力されるようになっています。今回はそうならないようにuse_first=Falseを指定しています。

pip install spacy
# 2.2.0以上
pip install transformers 
pip install neuralcoref

pip install bert-extractive-summarizer


BERTSUMExt


コード

from summarizer import Summarizer

model = Summarizer()
generate_text = model(text, min_length=60, max_length=750, use_first=False)
print(generate_text)


出力

Known as the owner of TikTok or Douyin in China, ByteDance is looking to diversify beyond advertising and take a slice of the 86 billion mobile gaming market as well as expand its footprint internationally. 

It has also allowed Tencent to expand internationally, a feat that ByteDance is also hoping to achieve. 

“Bytedance is taking a global approach to its video game business from day one,” gaming analyst firm Niko Partners wrote in a note to clients.

“With Bytedance at the helm, the two firms (Moonton and ByteDance) could leverage TikTok / Douyin to promote Mobile Legends in markets such as China and the US where Tencent’s Honor of Kings and Riots’ League of Legends: Wild Rift are the dominant mobile MOBA titles,” Niko Partners said.


内容はkey pointsに合致しています。しかしながら、後ほど説明する抽象型モデルと比較すると少し文章が長く読みにくい印象があります。


GPT-2


コード

from summarizer import TransformerSummarizer

GPT2_model = TransformerSummarizer(transformer_type="GPT2",transformer_model_key="gpt2-medium")
generate_text = ''.join(GPT2_model(text, min_length=60, max_length=750, use_first=False))
print(generate_text)


出力

“Moonton is the perfect partner to help expand our gaming strategy in international markets,” ByteDance said in a statement. 

“This is a mega deal in the global gaming industry, not only within China. It has also allowed Tencent to expand internationally, a feat that ByteDance is also hoping to achieve. 

“With Bytedance at the helm, the two firms (Moonton and ByteDance) could leverage TikTok / Douyin to promote Mobile Legends in markets such as China and the US where Tencent’s Honor of Kings and Riots’ League of Legends: Wild Rift are the dominant mobile MOBA titles,” Niko Partners said.


こちらも同様に内容はkey pointsに沿っているのですが、少し文章が長くなってしまっています。また、内容は話の主役であるByteDance社がどんな会社なのかの説明は抜き出されていません。そして、3文目はBertSumExtでも抜き出されており、どちらにおいても重要な文章であるとわかります。

要約結果(抽象型)

抽象型モデルはhuggingfaceのtransformersというライブラリを使用します。こちらもインストールは非常に簡単です。

pip install sentencepiece transformers


transformersライブラリはHuggingfaceに提供されているモデルであれば簡単に試すことができます。
  

T5-base


t5は入力を特定のフォーマットにする必要があります。

タスク名 : 入力に使用する文章

という形にすることでタスク名を識別し、text-to-textの形で返してくれます。

コード

from transformers import AutoModelWithLMHead, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("t5-base")
model = AutoModelWithLMHead.from_pretrained("t5-base")
inputs = tokenizer.encode("summarize:" + text, return_tensors="pt", truncation=True)
summary_ids = model.generate(inputs, max_length=200, num_beams=4, early_stopping=True)
generate_text = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=False) for g in summary_ids]
print(generate_text[0])


出力

ByteDance has acquired major mobile gaming studio Moonton . 

the deal highlights its ambitions in the video game industry and pits it against Chinese giant Tencent .

Tencent is a world leader in mobile gaming and behind some of the top titles .


事前学習のみですが、要約すべきところの一部は抜き出すことができていますし、key pointsと同数の要約文が指定なしで出力されました。しかし、取り出された文章はByteDanceよりも彼らが対抗するTencentの内容が多くなってしまっています。

それではファインチューニングするとどのようになるのでしょうか。

T5(News Summary)


コード

from transformers import AutoModelWithLMHead, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("mrm8488/t5-base-finetuned-summarize-news")
model = AutoModelWithLMHead.from_pretrained("mrm8488/t5-base-finetuned-summarize-news")
inputs = tokenizer.encode("summarize:" + text, return_tensors="pt", truncation=True)
summary_ids = model.generate(inputs, max_length=200, num_beams=4, early_stopping=True)
generate_text = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=False) for g in summary_ids]
print(generate_text[0])


出力

ByteDance, known as the owner of TikTok or Douyin in China, has acquired major mobile gaming studio Moonton for $4 billion.

 Moonton is famous for its game 'Mobile Legends', a multiplayer online battle arena where teams fight each other in large virtual arenas. 
 
ByteDance is looking to diversify beyond advertising and take a slice of the $86 billion mobile gaming market. Notably, Tencent is a world leader in mobile gaming.


key pointsとほぼ同じです!特に1文目は$4 billionという具体的な金額も生成しており、key pointsよりも良い要約が得られているとも感じました。

ファインチューニングすることで性能が上がったことがわかります。

PEGASUS-large


コード

from transformers import PegasusTokenizer, PegasusForConditionalGeneration

model = PegasusForConditionalGeneration.from_pretrained("google/pegasus-large")
tokenizer = PegasusTokenizer.from_pretrained("google/pegasus-cnn_dailymail")
inputs = tokenizer([text], return_tensors='pt', truncation=True)
summary_ids = model.generate(inputs['input_ids'], num_beams=4, max_length=200, early_stopping=True)
generate_text = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=False) for g in summary_ids]
print("Generate Text:", generate_text[0])


出力

TikTok owner ByteDance takes on Tencent after acquiring major mobile gaming studio GUANGZHOU, China — ByteDance has acquired major mobile gaming studio Moonton, highlighting its ambitions in the video game industry and pitting it against Chinese giant Tencent. 

Known as the owner of TikTok or Douyin in China, ByteDance is looking to diversify beyond advertising and take a slice of the  $86 billion mobile gaming market as well as expand its footprint internationally. 

“Be prepared for a long war between Tencent and ByteDance for acquiring game content.” 

ByteDance’s international push Tencent is a world leader in mobile gaming and behind some of the top titles.


1文目が同じ内容を繰り返しています。しかし事前学習のみでもPEGASUSであれば、ある程度は要約できることがわかりました。

PEGASUS(cnn/daily)


コード

from transformers import PegasusTokenizer, PegasusForConditionalGeneration

model = PegasusForConditionalGeneration.from_pretrained("google/pegasus-cnn_dailymail")
tokenizer = PegasusTokenizer.from_pretrained("google/pegasus-cnn_dailymail")
inputs = tokenizer([text], return_tensors='pt', truncation=True)
summary_ids = model.generate(inputs['input_ids'], num_beams=4, max_length=200, early_stopping=True)
generate_text = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=False) for g in summary_ids]
print("Generate Text:", generate_text[0])


出力

ByteDance is the owner of TikTok or Douyin in China and TikTok in international markets.

The company is looking to diversify beyond advertising and take a slice of the $86 billion mobile gaming market .

ByteDance's gaming arm Nuverse, founded in 2019, was behind the acquisition.


モバイルレジェンドの説明がありませんが、key pointsのうちの2つに該当しています。

また、入力文を見ると分かるのですが記事の冒頭部分のみを要約しています。これはファインチューニングの際にそのように学習してしまった可能性が考えられます。

PEGASUS(xsum)


コード

from transformers import PegasusTokenizer, PegasusForConditionalGeneration

model = PegasusForConditionalGeneration.from_pretrained("google/pegasus-xsum")
tokenizer = PegasusTokenizer.from_pretrained("google/pegasus-xsum")
inputs = tokenizer([text], return_tensors='pt', truncation=True)
summary_ids = model.generate(inputs['input_ids'], num_beams=4, max_length=200, early_stopping=True)
generate_text = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=False) for g in summary_ids]
print("Generate Text:", generate_text[0])


出力

China’s ByteDance has acquired Moonton, a major mobile gaming studio, highlighting its ambitions in the video game indust


数値や具体的な固有名詞は少ないものの、文章全体の抽象的な要約はできている印象です。データセットの影響を大きく受けており、descriptionのように1文のみの要約に適していそうです。

BART-large


コード

from transformers import PegasusTokenizer, PegasusForConditionalGeneration

model = PegasusForConditionalGeneration.from_pretrained("facebook/bart-large")
tokenizer = PegasusTokenizer.from_pretrained("facebook/bart-large")
split_list = text.split(".")
text = ".\n".join(split_list)
inputs = tokenizer([text], return_tensors='pt', truncation=True)
summary_ids = model.generate(inputs['input_ids'], num_beams=4, max_length=200, early_stopping=True)
generate_text = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=False) for g in summary_ids]
print("Generate Text:", generate_text[0])


出力

TTikTok owner ByteDance, which, the,,,---s--,-,s,, ...

,,s-,",,"""--"","The--The-"-"(--(""("-(-"s""s (""..."" ("((("The""[""to"-s"- (-"It's""It""The future of the future of a game ("It�""Where"" 

"""If"" and whether whether whether it whether it it's a game in a game where it whether whether the company, 

whether whether a publisher and whether the group of a publisher, a publisher of a studio in the studio where it is a publisher in a studio where the game is not known to the publisher of the studio that it is not the studio of the developer of the


こちらは事前学習のみのモデルで、出力はかなりめちゃくちゃです。

CNN/Daily Mailでのスコアは一番良かったPEGASUSと並ぶほどでしたが、ファインチューニングなしだと結果はかなり悪いものが出てきました。

それではBARTをファインチューニングさせるとどのように結果が変わるのでしょうか。確認してみましょう!

BART(cnn/dairy)


コード

from transformers import BartTokenizer, BartForConditionalGeneration

model = BartForConditionalGeneration.from_pretrained('facebook/bart-large-cnn')
tokenizer = BartTokenizer.from_pretrained('facebook/bart-large-cnn')
split_list = text.split(".")
text = ".\n".join(split_list)
inputs = tokenizer([text], return_tensors='pt', truncation=True)
summary_ids = model.generate(inputs['input_ids'], num_beams=4, max_length=200, early_stopping=True)
generate_text = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=False) for g in summary_ids]
print(generate_text[0])


出力

TikTok owner ByteDance takes on Tencent after acquiring major mobile gaming studio Moonton. 

“This is a mega deal in the global gaming industry, not only within China. 

So the M&A craze in the gaming sector continues,” says CEO of consultancy Kantan Games.


先ほどとは打って変わって読める文章が出力されました。発言自体は入力にも存在しているのですが、入力文のクオーテーションはカンマ以降にも発言が続くので微妙なところです。

また、こちらもモバイルレジェンドの固有名詞は出ていませんでした。

BART(xsum)


コード

from transformers import BartTokenizer, BartForConditionalGeneration

model = BartForConditionalGeneration.from_pretrained('facebook/bart-large-xsum')
tokenizer = BartTokenizer.from_pretrained('facebook/bart-large-xsum')
split_list = text.split(".")
text = ".\n".join(split_list)
inputs = tokenizer([text], return_tensors='pt', truncation=True)
summary_ids = model.generate(inputs['input_ids'], num_beams=4, max_length=200, early_stopping=True)
generate_text = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=False) for g in summary_ids]
print(generate_text[0])


出力

China’s biggest social media firm, ByteDance, has made its first move into the video game industry with the acquisition of Moonton.


こちらもファインチューニングするだけで読みやすい文章が生成されました。内容はかなり抽象的な要約になっています。

しかし『初めて(first)』という記述はないので要約としては間違っていると言えます。

まとめ

要約モデルの種類によって出力に大きな違いがみられました。

抽出型モデルは抽象型モデルに比べると出力が長い印象があり、取り出される重要な文章が長いと必然的にそうなってしまいます。また、どちらのモデルにも抽出された文章が存在していおり、確かに記事の内容の大枠を掴んだ文章でした。

抽象型モデルはどれも短い文章で読みやすかったです。しかし、一部のモデルは入力文にない内容を出力してしまったりしまいました。

また、ファインチューニングさせたデータによって出力も大きく変わっており、同じモデルでもCNN/Daily Mailとxsumでは出力する文章の数と内容も全く異なりました。加えて、ファインチューニングがモデルの性能に大きく関わることが再確認できました。特にBARTモデルの出力結果の違いは大きかったです。

どちらも前述していたモデルの特徴通りの出力になりましたが、人間が見てもわかりやすい要約を出力するモデルもいくつか存在しました。

特にT5はkey pointsに沿った出力をしていて、抽象型モデルの実用性も夢ではないのでは!と思わせてくれるような結果となりました。

参考

・BERTSUM
Leveraging BERT for Extractive Text Summarization on Lectures
・GPT-2
Improving Language Understanding by Generative Pre-Training
・T5
Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer 
・PEGASUS
PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization
・BART
BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

※2022年3月18日時点

Techブログ 新着記事一覧