野村  陽一

野村 陽一

1634166060

Pythonでトランスフォーマーを使用してテキスト要約を実行する

テキストの要約は、長いテキストを簡潔な要約に短縮して、重要な情報コンテンツと全体的な意味を保持するタスクです。

テキストの要約に広く使用されている2つの異なるアプローチがあります。

  • 抽出要約:これは、モデルが元のテキストから重要な文やフレーズを識別し、それらのみを出力する場所です。
  • 要約要約:モデルは、元のテキストよりも短い完全に異なるテキストを生成し、人間と同じように、新しい形式で新しい文を生成します。このチュートリアルでは、このアプローチにトランスフォーマーを使用します。

このチュートリアルでは、PythonでHuggingFaceのトランスフォーマーライブラリを使用して、必要なテキストに対して抽象的なテキスト要約を実行します。

私たちが選んだ理由、それだけではなく、テキスト要約のための事前訓練を受けたモデルの何千もを提供してくれますようHuggingFaceのトランスフォーマーが、幅広いためのNLPのようなタスク、テキスト分類、質問応答、機械翻訳、テキスト生成チャットボット、およびもっと。

開始するには、必要なライブラリをインストールしましょう。

pip3 install transformers torch sentencepiece

パイプラインAPIの使用

トランスフォーマーでモデルを使用する最も簡単な方法は、パイプラインAPIを使用することです。

from transformers import pipeline

# using pipeline API for summarization task
summarization = pipeline("summarization")
original_text = """
Paul Walker is hardly the first actor to die during a production. 
But Walker's death in November 2013 at the age of 40 after a car crash was especially eerie given his rise to fame in the "Fast and Furious" film franchise. 
The release of "Furious 7" on Friday offers the opportunity for fans to remember -- and possibly grieve again -- the man that so many have praised as one of the nicest guys in Hollywood. 
"He was a person of humility, integrity, and compassion," military veteran Kyle Upham said in an email to CNN. 
Walker secretly paid for the engagement ring Upham shopped for with his bride. 
"We didn't know him personally but this was apparent in the short time we spent with him. 
I know that we will never forget him and he will always be someone very special to us," said Upham. 
The actor was on break from filming "Furious 7" at the time of the fiery accident, which also claimed the life of the car's driver, Roger Rodas. 
Producers said early on that they would not kill off Walker's character, Brian O'Connor, a former cop turned road racer. Instead, the script was rewritten and special effects were used to finish scenes, with Walker's brothers, Cody and Caleb, serving as body doubles. 
There are scenes that will resonate with the audience -- including the ending, in which the filmmakers figured out a touching way to pay tribute to Walker while "retiring" his character. At the premiere Wednesday night in Hollywood, Walker's co-star and close friend Vin Diesel gave a tearful speech before the screening, saying "This movie is more than a movie." "You'll feel it when you see it," Diesel said. "There's something emotional that happens to you, where you walk out of this movie and you appreciate everyone you love because you just never know when the last day is you're gonna see them." There have been multiple tributes to Walker leading up to the release. Diesel revealed in an interview with the "Today" show that he had named his newborn daughter after Walker. 
Social media has also been paying homage to the late actor. A week after Walker's death, about 5,000 people attended an outdoor memorial to him in Los Angeles. Most had never met him. Marcus Coleman told CNN he spent almost $1,000 to truck in a banner from Bakersfield for people to sign at the memorial. "It's like losing a friend or a really close family member ... even though he is an actor and we never really met face to face," Coleman said. "Sitting there, bringing his movies into your house or watching on TV, it's like getting to know somebody. It really, really hurts." Walker's younger brother Cody told People magazine that he was initially nervous about how "Furious 7" would turn out, but he is happy with the film. "It's bittersweet, but I think Paul would be proud," he said. CNN's Paul Vercammen contributed to this report.
"""
summary_text = summarization(original_text)[0]['summary_text']
print("Summary:", summary_text)

これを初めて実行すると、モデルアーキテクチャと重み、およびトークナイザー構成がダウンロードされることに注意してください。

「要約」タスクをパイプラインに指定してから、長いテキストをパイプラインに渡すだけです。出力は次のとおりです。

Summary:  Paul Walker died in November 2013 after a car crash in Los Angeles . 
The late actor was one of the nicest guys in Hollywood . 
The release of "Furious 7" on Friday offers a chance to grieve again . 
There have been multiple tributes to Walker leading up to the film's release .

別の例を次に示します。

print("="*50)
# another example
original_text = """
For the first time in eight years, a TV legend returned to doing what he does best. 
Contestants told to "come on down!" on the April 1 edition of "The Price Is Right" encountered not host Drew Carey but another familiar face in charge of the proceedings. 
Instead, there was Bob Barker, who hosted the TV game show for 35 years before stepping down in 2007. 
Looking spry at 91, Barker handled the first price-guessing game of the show, the classic "Lucky Seven," before turning hosting duties over to Carey, who finished up. 
Despite being away from the show for most of the past eight years, Barker didn't seem to miss a beat.
"""
summary_text = summarization(original_text)[0]['summary_text']
print("Summary:", summary_text)

出力:

==================================================
Summary:  Bob Barker returns to "The Price Is Right" for the first time in eight years .
The 91-year-old hosted the show for 35 years before stepping down in 2007 . 
Drew Carey finished up hosting duties on the April 1 edition of the game show . 
Barker handled the first price-guessing game of the show .

注:例はCNN / DailyMailデータセットから取得されました

ご覧のとおり、モデルは元のテキストに属さない完全に新しい要約テキストを生成しました。

これは、変圧器を使用する最も簡単な方法です。次のセクションでは、テキストの要約を実行し、出力を生成する方法をカスタマイズする別の方法を学習します。

T5モデルの使用

次のコードセルは、T5トランスフォーマーモデルとそのトークナイザーを初期化します。

from transformers import T5ForConditionalGeneration, T5Tokenizer

# initialize the model architecture and weights
model = T5ForConditionalGeneration.from_pretrained("t5-base")
# initialize the model tokenizer
tokenizer = T5Tokenizer.from_pretrained("t5-base")

上記のコードを初めて実行すると、モデルアーキテクチャ、重み、トークナイザーの語彙、および構成がダウンロードされt5-baseます。

from_pretrained()事前トレーニング済みモデルとしてロードする方法を使用しています。T5には、このライブラリに3つのバージョンが付属していますt5-small。これは、の小さいバージョンでありt5-base、他のバージョンt5-largeよりも大きく、正確です。

要約したいテキストを設定しましょう:

article = """
Justin Timberlake and Jessica Biel, welcome to parenthood. 
The celebrity couple announced the arrival of their son, Silas Randall Timberlake, in statements to People. 
"Silas was the middle name of Timberlake's maternal grandfather Bill Bomar, who died in 2012, while Randall is the musician's own middle name, as well as his father's first," People reports. 
The couple announced the pregnancy in January, with an Instagram post. It is the first baby for both.
"""

次に、このテキストをエンコードして、入力としてのモデルに適したものにします。

# encode the text into tensor of integers using the appropriate tokenizer
inputs = tokenizer.encode("summarize: " + article, return_tensors="pt", max_length=512, truncation=True)

私たちは、使用されてきたtokenizer.encode()各整数はユニークなトークンである整数のリストに、文字列のテキストを変換する方法を。

私たちは、セットmax_lengthに512我々はバイパスに元のテキストたくないことを示し、512個の、我々はまた、設定トークンをreturn_tensorsするために"pt"出力としてPyTorchテンソルを取得します。

テキストの前にテキストを追加したことに注意してください。T5はテキストの"summarize: "要約だけではないため、基本的に、機械翻訳や質問応答など、テキストからテキストへの変換に使用できます。

たとえば、T5トランスフォーマーは機械翻訳に使用でき、"translate English to German: "代わりに設定する"summarize: "と、ドイツ語の翻訳出力が得られます(より正確には、で理由がわかるように、要約されたドイツ語の翻訳が得られますmodel.generate())。

最後に、要約されたテキストを生成して印刷しましょう。

# generate the summarization output
outputs = model.generate(
    inputs, 
    max_length=150, 
    min_length=40, 
    length_penalty=2.0, 
    num_beams=4, 
    early_stopping=True)
# just for debugging
print(outputs)
print(tokenizer.decode(outputs[0]))

出力:

tensor([[    0,     8,  1158,  2162,     8,  8999,    16,  1762,     3,     5,
            34,    19,     8,   166,  1871,    21,   321,    13,   135,     3,
             5,     8,  1871,    19,     8,  2214,   564,    13, 25045, 16948,
            31,     7, 28574, 18573,     6,   113,  3977,    16,  1673,     3,
             5]])
the couple announced the pregnancy in January. it is the first baby for both of them. 
the baby is the middle name of Timberlake's maternal grandfather, who died in 2012.

素晴らしい、出力は簡潔に見え、新しい要約スタイルで新しく生成されます。

最も興味深い部分に行くと、model.generate()メソッドに渡されるパラメーターは次のとおりです。

  • max_length:生成するトークンの最大数。合計150を指定していますが、必要に応じて変更できます。
  • min_length:これは生成するトークンの最小数です。テンソル出力をよく見ると、合計41個のトークンがカウントされるため、指定した40個を尊重します。これは、英語からドイツ語への翻訳などの別のタスクに設定した場合にも機能することに注意してください。
  • length_penalty:指数長さペナルティー、1.0手段ペナルティなし、このパラメータを増やすには、出力テキストの長さを増加します。
  • num_beams:このパラメーターを指定すると、モデルは欲張り検索の代わりにビーム検索を使用し、4に設定すると、モデルは4つの可能な単語(欲張り検索の場合は1)を先読みして、最も可能性の高い4つの仮説を維持できます。各タイムステップで、全体的に最も確率の高いものを選択します。num_beams
  • early_stoppingTrueすべてのビーム仮説が文字列トークン(EOS)の終わりに達したときに生成が終了するように、に設定します。

次に、decode()トークナイザーからのメソッドを使用して、テンソルを人間が読めるテキストに変換し直します。

また学ぶ: Pythonのトランスフォーマーを備えた会話型AIチャットボット

結論

model.generate()メソッドを微調整するパラメータは他にもたくさんあります。HuggingFaceブログからこのチュートリアルを確認することを強くお勧めします。

了解しました。このチュートリアルは以上です。HuggingFaceのトランスフォーマーライブラリを使用してテキストの要約を実行する2つの方法を学びましこちらのドキュメントをご覧ください

ここでチュートリアルの完全なコードを確認してください。

リンク: https://www.thepythoncode.com/article/text-summarization-using-huggingface-transformers-python

#python 

What is GEEK

Buddha Community

Pythonでトランスフォーマーを使用してテキスト要約を実行する
野村  陽一

野村 陽一

1634166060

Pythonでトランスフォーマーを使用してテキスト要約を実行する

テキストの要約は、長いテキストを簡潔な要約に短縮して、重要な情報コンテンツと全体的な意味を保持するタスクです。

テキストの要約に広く使用されている2つの異なるアプローチがあります。

  • 抽出要約:これは、モデルが元のテキストから重要な文やフレーズを識別し、それらのみを出力する場所です。
  • 要約要約:モデルは、元のテキストよりも短い完全に異なるテキストを生成し、人間と同じように、新しい形式で新しい文を生成します。このチュートリアルでは、このアプローチにトランスフォーマーを使用します。

このチュートリアルでは、PythonでHuggingFaceのトランスフォーマーライブラリを使用して、必要なテキストに対して抽象的なテキスト要約を実行します。

私たちが選んだ理由、それだけではなく、テキスト要約のための事前訓練を受けたモデルの何千もを提供してくれますようHuggingFaceのトランスフォーマーが、幅広いためのNLPのようなタスク、テキスト分類、質問応答、機械翻訳、テキスト生成チャットボット、およびもっと。

開始するには、必要なライブラリをインストールしましょう。

pip3 install transformers torch sentencepiece

パイプラインAPIの使用

トランスフォーマーでモデルを使用する最も簡単な方法は、パイプラインAPIを使用することです。

from transformers import pipeline

# using pipeline API for summarization task
summarization = pipeline("summarization")
original_text = """
Paul Walker is hardly the first actor to die during a production. 
But Walker's death in November 2013 at the age of 40 after a car crash was especially eerie given his rise to fame in the "Fast and Furious" film franchise. 
The release of "Furious 7" on Friday offers the opportunity for fans to remember -- and possibly grieve again -- the man that so many have praised as one of the nicest guys in Hollywood. 
"He was a person of humility, integrity, and compassion," military veteran Kyle Upham said in an email to CNN. 
Walker secretly paid for the engagement ring Upham shopped for with his bride. 
"We didn't know him personally but this was apparent in the short time we spent with him. 
I know that we will never forget him and he will always be someone very special to us," said Upham. 
The actor was on break from filming "Furious 7" at the time of the fiery accident, which also claimed the life of the car's driver, Roger Rodas. 
Producers said early on that they would not kill off Walker's character, Brian O'Connor, a former cop turned road racer. Instead, the script was rewritten and special effects were used to finish scenes, with Walker's brothers, Cody and Caleb, serving as body doubles. 
There are scenes that will resonate with the audience -- including the ending, in which the filmmakers figured out a touching way to pay tribute to Walker while "retiring" his character. At the premiere Wednesday night in Hollywood, Walker's co-star and close friend Vin Diesel gave a tearful speech before the screening, saying "This movie is more than a movie." "You'll feel it when you see it," Diesel said. "There's something emotional that happens to you, where you walk out of this movie and you appreciate everyone you love because you just never know when the last day is you're gonna see them." There have been multiple tributes to Walker leading up to the release. Diesel revealed in an interview with the "Today" show that he had named his newborn daughter after Walker. 
Social media has also been paying homage to the late actor. A week after Walker's death, about 5,000 people attended an outdoor memorial to him in Los Angeles. Most had never met him. Marcus Coleman told CNN he spent almost $1,000 to truck in a banner from Bakersfield for people to sign at the memorial. "It's like losing a friend or a really close family member ... even though he is an actor and we never really met face to face," Coleman said. "Sitting there, bringing his movies into your house or watching on TV, it's like getting to know somebody. It really, really hurts." Walker's younger brother Cody told People magazine that he was initially nervous about how "Furious 7" would turn out, but he is happy with the film. "It's bittersweet, but I think Paul would be proud," he said. CNN's Paul Vercammen contributed to this report.
"""
summary_text = summarization(original_text)[0]['summary_text']
print("Summary:", summary_text)

これを初めて実行すると、モデルアーキテクチャと重み、およびトークナイザー構成がダウンロードされることに注意してください。

「要約」タスクをパイプラインに指定してから、長いテキストをパイプラインに渡すだけです。出力は次のとおりです。

Summary:  Paul Walker died in November 2013 after a car crash in Los Angeles . 
The late actor was one of the nicest guys in Hollywood . 
The release of "Furious 7" on Friday offers a chance to grieve again . 
There have been multiple tributes to Walker leading up to the film's release .

別の例を次に示します。

print("="*50)
# another example
original_text = """
For the first time in eight years, a TV legend returned to doing what he does best. 
Contestants told to "come on down!" on the April 1 edition of "The Price Is Right" encountered not host Drew Carey but another familiar face in charge of the proceedings. 
Instead, there was Bob Barker, who hosted the TV game show for 35 years before stepping down in 2007. 
Looking spry at 91, Barker handled the first price-guessing game of the show, the classic "Lucky Seven," before turning hosting duties over to Carey, who finished up. 
Despite being away from the show for most of the past eight years, Barker didn't seem to miss a beat.
"""
summary_text = summarization(original_text)[0]['summary_text']
print("Summary:", summary_text)

出力:

==================================================
Summary:  Bob Barker returns to "The Price Is Right" for the first time in eight years .
The 91-year-old hosted the show for 35 years before stepping down in 2007 . 
Drew Carey finished up hosting duties on the April 1 edition of the game show . 
Barker handled the first price-guessing game of the show .

注:例はCNN / DailyMailデータセットから取得されました

ご覧のとおり、モデルは元のテキストに属さない完全に新しい要約テキストを生成しました。

これは、変圧器を使用する最も簡単な方法です。次のセクションでは、テキストの要約を実行し、出力を生成する方法をカスタマイズする別の方法を学習します。

T5モデルの使用

次のコードセルは、T5トランスフォーマーモデルとそのトークナイザーを初期化します。

from transformers import T5ForConditionalGeneration, T5Tokenizer

# initialize the model architecture and weights
model = T5ForConditionalGeneration.from_pretrained("t5-base")
# initialize the model tokenizer
tokenizer = T5Tokenizer.from_pretrained("t5-base")

上記のコードを初めて実行すると、モデルアーキテクチャ、重み、トークナイザーの語彙、および構成がダウンロードされt5-baseます。

from_pretrained()事前トレーニング済みモデルとしてロードする方法を使用しています。T5には、このライブラリに3つのバージョンが付属していますt5-small。これは、の小さいバージョンでありt5-base、他のバージョンt5-largeよりも大きく、正確です。

要約したいテキストを設定しましょう:

article = """
Justin Timberlake and Jessica Biel, welcome to parenthood. 
The celebrity couple announced the arrival of their son, Silas Randall Timberlake, in statements to People. 
"Silas was the middle name of Timberlake's maternal grandfather Bill Bomar, who died in 2012, while Randall is the musician's own middle name, as well as his father's first," People reports. 
The couple announced the pregnancy in January, with an Instagram post. It is the first baby for both.
"""

次に、このテキストをエンコードして、入力としてのモデルに適したものにします。

# encode the text into tensor of integers using the appropriate tokenizer
inputs = tokenizer.encode("summarize: " + article, return_tensors="pt", max_length=512, truncation=True)

私たちは、使用されてきたtokenizer.encode()各整数はユニークなトークンである整数のリストに、文字列のテキストを変換する方法を。

私たちは、セットmax_lengthに512我々はバイパスに元のテキストたくないことを示し、512個の、我々はまた、設定トークンをreturn_tensorsするために"pt"出力としてPyTorchテンソルを取得します。

テキストの前にテキストを追加したことに注意してください。T5はテキストの"summarize: "要約だけではないため、基本的に、機械翻訳や質問応答など、テキストからテキストへの変換に使用できます。

たとえば、T5トランスフォーマーは機械翻訳に使用でき、"translate English to German: "代わりに設定する"summarize: "と、ドイツ語の翻訳出力が得られます(より正確には、で理由がわかるように、要約されたドイツ語の翻訳が得られますmodel.generate())。

最後に、要約されたテキストを生成して印刷しましょう。

# generate the summarization output
outputs = model.generate(
    inputs, 
    max_length=150, 
    min_length=40, 
    length_penalty=2.0, 
    num_beams=4, 
    early_stopping=True)
# just for debugging
print(outputs)
print(tokenizer.decode(outputs[0]))

出力:

tensor([[    0,     8,  1158,  2162,     8,  8999,    16,  1762,     3,     5,
            34,    19,     8,   166,  1871,    21,   321,    13,   135,     3,
             5,     8,  1871,    19,     8,  2214,   564,    13, 25045, 16948,
            31,     7, 28574, 18573,     6,   113,  3977,    16,  1673,     3,
             5]])
the couple announced the pregnancy in January. it is the first baby for both of them. 
the baby is the middle name of Timberlake's maternal grandfather, who died in 2012.

素晴らしい、出力は簡潔に見え、新しい要約スタイルで新しく生成されます。

最も興味深い部分に行くと、model.generate()メソッドに渡されるパラメーターは次のとおりです。

  • max_length:生成するトークンの最大数。合計150を指定していますが、必要に応じて変更できます。
  • min_length:これは生成するトークンの最小数です。テンソル出力をよく見ると、合計41個のトークンがカウントされるため、指定した40個を尊重します。これは、英語からドイツ語への翻訳などの別のタスクに設定した場合にも機能することに注意してください。
  • length_penalty:指数長さペナルティー、1.0手段ペナルティなし、このパラメータを増やすには、出力テキストの長さを増加します。
  • num_beams:このパラメーターを指定すると、モデルは欲張り検索の代わりにビーム検索を使用し、4に設定すると、モデルは4つの可能な単語(欲張り検索の場合は1)を先読みして、最も可能性の高い4つの仮説を維持できます。各タイムステップで、全体的に最も確率の高いものを選択します。num_beams
  • early_stoppingTrueすべてのビーム仮説が文字列トークン(EOS)の終わりに達したときに生成が終了するように、に設定します。

次に、decode()トークナイザーからのメソッドを使用して、テンソルを人間が読めるテキストに変換し直します。

また学ぶ: Pythonのトランスフォーマーを備えた会話型AIチャットボット

結論

model.generate()メソッドを微調整するパラメータは他にもたくさんあります。HuggingFaceブログからこのチュートリアルを確認することを強くお勧めします。

了解しました。このチュートリアルは以上です。HuggingFaceのトランスフォーマーライブラリを使用してテキストの要約を実行する2つの方法を学びましこちらのドキュメントをご覧ください

ここでチュートリアルの完全なコードを確認してください。

リンク: https://www.thepythoncode.com/article/text-summarization-using-huggingface-transformers-python

#python