「Hugging Faceを使用してLLMsを使ったテキスト要約機を構築する」
Building a text summarization machine using LLMs with Hugging Face.
はじめに
最近、LLMs(Large Language Models)を使用したテキスト要約は多くの関心を集めています。これらのモデルは、GPT-3やT5などの事前訓練モデルであり、人間のようなテキストやテキスト分類、要約、翻訳などのタスクを生成することができます。Hugging Faceは、LLMsを使用するための人気のあるライブラリの一つです。
この記事では、特にHugging Faceに焦点を当てて、LLMの能力について検討し、難解なNLPの問題を解決するための適用方法について説明します。また、Hugging FaceとLLMsを使用して、Streamlit用のテキスト要約アプリケーションを構築する方法についても説明します。まずは、この記事の学習目標について見てみましょう。
学習目標
- Hugging Faceをプラットフォームとして使用したLLMsとTransformersの機能と機能を探索する。
- Hugging Faceが提供する事前訓練モデルとパイプラインを活用して、チャットボットなどのさまざまなNLPタスクを実行する方法を学ぶ。
- Hugging FaceとLLMsを使用したテキスト要約の実践的な理解を開発する。
- テキスト要約のための対話型Streamlitアプリケーションを作成する。
この記事は、データサイエンスのブログマラソンの一環として公開されました。
大規模言語モデル(LLMs)の理解
LLMモデルは大量のテキストデータで訓練されます。これらのモデルは、前の文脈に基づいて次の単語を予測することにより、複雑な言語パターンを捉え、一貫したテキストを生成することができます。
- Google AIがSimPerを導入:データ内の周期情報を学習するための自己教示対照フレームワーク
- 新しい研究は、ソフト自己駆動摩擦電気ナノ発電装置と深層学習支援データ分析に基づく水中3次元触覚テンセグリティ(U3DTT)を提案しています
- 「DataOps.liveでDataOpsの成功を解き放つ:Gartnerの市場ガイドに掲載!」
LLMsは大量のパラメータを含むデータセットで訓練されます。訓練データの膨大な量により、LLMsは言語の微妙なニュアンスを学び、印象的な言語生成能力を提供することができます。
LLMsは機械翻訳、テキスト生成、質問応答、感情分析などのさまざまなタスクでの突破口を可能にし、NLPの分野に大きな影響を与えました。
これらのモデルはベンチマークで優れたパフォーマンスを発揮し、多くのNLPタスクにおいて頼りになるツールとなっています。
Hugging Face
Hugging Faceは、LLMsとtransformersを扱うためのプラットフォームおよびライブラリです。これは、NLPタスクにLLMsを利用する際に使用を簡素化する包括的なエコシステムを提供します。
このライブラリは、さまざまな事前訓練モデル、データセット、ツールを提供し、さまざまなアプリケーションにLLMsを容易に活用することができます。
したがって、モデルを訓練する必要はありません。彼らは私たちのために訓練されています。Hugging Faceのいくつかの重要な側面について詳しく見てみましょう。
特徴
1. 事前訓練モデル
Hugging Faceの最も優れた特徴の一つは、豊富な事前訓練LLMsのコレクションを提供していることです。これらのモデルは大規模なデータセットで訓練され、特定のNLPタスクに適したファインチューニングが行われています。
たとえば、GPT-3やT5などのモデルは、テキスト生成、要約、翻訳などのタスクにすぐに利用できます。
Hugging Faceは、異なるアーキテクチャ、サイズ、パフォーマンスのトレードオフを持つモデルを提供し、ユーザーが自分の要件に最適なモデルを選択できるようにしています。
2. モデルの簡単な読み込みとファインチューニング
Hugging Faceの特徴について話すとき、最も重要なのはシンプルさです。これにより、事前訓練モデルの読み込みとファインチューニングのプロセスが簡素化されます。
わずか数行のコードで、ユーザーは事前訓練モデルをダウンロードして初期化することができます。
3. データセットとトークナイザ
NLPでの作業では、大規模なデータセットの取り扱いやテキストの前処理が必要となることがよくあります。Hugging Faceは、データセットとトークナイザを提供し、データの読み込み、前処理、トークン化のタスクを容易にします。
datasetsモジュールは、一般的なベンチマークデータセットを含むさまざまなデータセットへのアクセスを提供し、モデルのトレーニングや評価を簡単にすることができます。
Hugging Faceが提供するトークナイザは、効率的なテキストトークン化を可能にし、ユーザーが生のテキストをLLMの適切な入力形式に変換することができます。
4. トレーニングと推論のパイプライン
Hugging Faceは、トレーニングと推論のパイプラインを介してLLMの使用を簡素化しています。これらのパイプラインは、テキスト分類、固有表現認識、感情分析、要約などの一般的なNLPタスクに対する高レベルなインターフェースを提供します。
ユーザーは、低レベルの実装の詳細に踏み込むことなく、パイプラインを簡単に作成し、特定のタスクに対してLLMを利用することができます。
例えば、”summarization”というパイプラインを作成する関数は、モデルの読み込み、トークン化、推論の複雑さを抽象化して、わずか数行のコードで要約を生成することができます。
Hugging Face LLMを用いた要約
要約は、主要なポイントを保持しながら、テキストの一部を簡潔な要約にまとめる一般的なNLPタスクです。
LLMは、Hugging Faceと組み合わせることで、抽出的要約と抽象的要約の両方の強力な機能を提供します。
抽出的要約は、元のテキストから最も重要な文やフレーズを選択することを含みます。一方、抽象的要約は、元のコンテンツの本質を捉えた新しいテキストを生成します。
Hugging Faceは、T5などの事前学習済みモデルを提供しており、抽出的要約と抽象的要約の両方のタスクに使用することができます。
例
Hugging Faceを使用した要約のデモンストレーションを行うために、以下の例を進めていきましょう。まず、必要なパッケージをインストールする必要があります:
%pip install sacremoses==0.0.53
%pip install datasets
%pip install transformers
%pip install torch torchvision torchaudio
これらのパッケージ、具体的にはsacremoses、datasets、transformers、torchまたはtensorflow 2.0は、データセットとモデルを扱うために必要なものです。
次に、インストールしたパッケージから必要なモジュールをインポートします:
from datasets import load_dataset
from transformers import pipeline
ここでは、datasetsパッケージからload_dataset関数をインポートし、transformersパッケージからpipeline関数をインポートして、テキストの要約のためのパイプラインを作成することができます。
プロセスを示すために、BBCの記事と要約のコレクションであるxsumデータセットを使用しましょう。以下のようにデータセットをロードします:
#データセットのロード
xsum_dataset = load_dataset(
"xsum",
version="1.2.0",
cache_dir='/Documents/Huggin_Face/data'
) #注意:キャッシュディレクトリを指定して事前ダウンロードされたデータを使用します。
xsum_dataset
#このオブジェクトのプリント表示では、各データセットスプリットの「num_rows」が表示されます。
ここでは、load_dataset関数を使用してxsumデータセットをロードし、バージョンとダウンロードされたデータセットファイルのキャッシュディレクトリを指定しています。結果として得られるデータセットオブジェクトは、変数xsum_datasetに割り当てられます。
データセットのサブセットで作業するために、いくつかの例を選択することができます。例えば、以下のコードスニペットでは、トレーニングスプリットの最初の10の例を選択し、PandasのDataFrameとして表示します:
xsum_sample = xsum_dataset["train"].select(range(10))
display(xsum_sample.to_pandas())
要約パイプラインの作成
データセットが準備できたので、Hugging Faceを使用して要約パイプラインを作成し、与えられたテキストに対して要約を行うことができます。以下に例を示します:
summarizer = pipeline(
task="summarization",
model="t5-small",
min_length=20,
max_length=40,
truncation=True,
model_kwargs={"cache_dir": '/Documents/Huggin_Face/'},
) #注意:キャッシュディレクトリを指定して事前ダウンロードされたモデルを使用します。
このコードスニペットでは、transformersパッケージのpipeline関数を使用して要約パイプラインを作成しています。
タスクパラメータは「summarization」に設定されており、パイプラインのタスクはテキストの要約であることを示しています。使用する事前学習モデルは「t5-small」と指定します。
min_lengthパラメータとmax_lengthパラメータは生成された要約の望ましい長さ範囲を定義します。
モデルがサポートする最大長を超える場合、入力テキストを切り詰めるためにtruncation=Trueを設定します。最後に、pre-downloaded modelsのキャッシュディレクトリを指定するためにmodel_kwargsを使用します。
作成した要約パイプラインを使用して特定のドキュメントの要約を生成するには、次のコードを使用できます:
summarizer(xsum_sample["document"][0])
このコードスニペットでは、要約パイプラインをxsum_sampleデータセットの最初のドキュメントに適用しています。パイプラインは指定されたモデルと長さの制約に基づいてドキュメントの要約を生成します。
または、ユーザーの入力から直接要約を生成したい場合は、次のようなコードを使用できます:
# ユーザーに入力を求める
input_text = input("要約したいテキストを入力してください:")
# 要約を生成する
summary = summarizer(input_text, max_length=150, min_length=30, do_sample=False)[0]['summary_text']
bullet_points = summary.split(". ")
for point in bullet_points:
print(f"- {point}")
# 生成された要約を表示する
print("要約:", summary)
この修正されたコードでは、データセットの読み込みとDataFrameを使用した結果の表示に関連する部分を削除しました。代わりに、input()関数を使用してユーザーに直接入力を求めます。
ユーザーの入力は要約パイプラインに渡され、提供されたテキストに基づいて要約が生成されます。生成された要約はコンソールに表示されます。
要約の長さ範囲に応じてパラメータ(max_lengthとmin_length)を調整してください。
Hugging FaceやT5のようなLLMを活用することで、ニュース記事、研究論文、または簡潔な要約が必要な他のテキストなど、さまざまなアプリケーションに対して簡単にテキストの要約を実行することができます。
Webアプリケーション
テキスト要約のためのStreamlitアプリケーション
LLMとHugging Faceについて説明するだけでなく、テキスト要約のためのStreamlitアプリケーションを作成する方法についても探ってみましょう。Streamlitは、インタラクティブなWebアプリケーションの開発を簡素化する人気のあるPythonライブラリです。StreamlitをHugging Faceと組み合わせることで、ユーザーが簡単にテキストを入力し、要約結果を取得できる使いやすいインタフェースを作成することができます。
必要なパッケージのインストール
まず、必要なパッケージをインストールする必要があります:
pip install streamlit
Streamlitがインストールされたら、Pythonスクリプトを作成します。例えば、app.pyと呼びます。必要なモジュールをインポートします:
import streamlit as stfrom transformers import pipeline
次に、Streamlitデコレータを使用してアプリのレイアウトを指定することで、Streamlitアプリケーションを作成します:
import streamlit as st
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM
def main():
st.title("テキスト要約")
summarizer = pipeline(
task="summarization",
model="t5-small",
min_length=20,
max_length=40,
truncation=True,
model_kwargs={"cache_dir": '/Documents/Huggin_Face/'},
)
# ユーザー入力
input_text = st.text_area("要約したいテキストを入力してください:", height=200)
# 要約ボタン
if st.button("要約"):
if input_text:
# 要約を生成する
output = summarizer(input_text, max_length=150, min_length=30, do_sample=False)
summary = output[0]['summary_text']
# 要約を箇条書きで表示する
st.subheader("要約:")
bullet_points = summary.split(". ")
for point in bullet_points:
st.write(f"- {point}")
else:
st.warning("要約するテキストを入力してください。")
if __name__ == "__main__":
main()
このコードでは、Streamlitアプリケーションを表すmain関数を定義しています。st.titleを使用してアプリケーションのタイトルを設定します。
HuggingFaceを使用して要約パイプラインを作成する
次に、Hugging Faceのpipeline関数を使用して要約パイプラインを作成します。このパイプラインは、テキストの要約タスクを処理します。
st.text_areaを使用して、ユーザーが要約したいコンテンツを貼り付けるか入力することができるテキストエリアを作成します。heightパラメータはテキストエリアの高さを200ピクセルに設定します。
st.buttonを使用して、「要約」ボタンを作成します。ボタンをクリックし、入力テキストが空でないかを確認します。空でない場合、入力テキストを要約パイプラインに渡し、要約を生成し、st.subheaderとst.writeを使用して表示します。入力テキストが空の場合、st.warningを使用して警告メッセージを表示します。
最後に、スクリプトがメインプログラムとして実行されると、main関数を実行します。
Streamlitアプリケーションを実行するには、ターミナルまたはコマンドプロンプトを開き、app.pyスクリプトがあるディレクトリに移動し、次のコマンドを実行します:
streamlit run app.py
Streamlitはローカルウェブサーバーを起動し、テキスト要約アプリケーションにアクセスできるURLを提供します。
ユーザーはその後、テキストエリアに要約したいコンテンツをコピーして貼り付け、[要約]ボタンをクリックすると、生成された要約が表示されます。
ここにコードのリンクがあります – GitHub
結論
この記事では、LLMの概念とNLPでの重要性について説明しました。Hugging Faceを主要なプラットフォームとライブラリとして紹介し、事前学習済みモデル、モデルの簡単な読み込み、ファインチューニング、データセット、トークナイザー、トレーニング、推論パイプラインなどの主な特徴について説明しました。また、LLMとHugging Faceを使用してテキスト要約のためのStreamlitアプリケーションを作成する方法も示しました。
LLMとHugging Faceを使用することで、開発者や研究者は複雑なNLPの問題を解決し、言語生成を向上させ、効率的かつ効果的な自然言語理解を実現するための強力なツールを手に入れることができます。LLMの進歩と活気のあるHugging Faceコミュニティにより、NLPの未来はエキサイティングな可能性で満たされることでしょう。
要点
- 大規模言語モデル(LLM)は、膨大な量のテキストデータでトレーニングされ、人間のようなテキストを生成し、さまざまなNLPタスクを実行できる強力なモデルです。
- Hugging Faceは、異なるアーキテクチャ、サイズ、パフォーマンスのトレードオフを持つさまざまな事前学習済みモデルを提供しており、ユーザーは自分のニーズに最適なモデルを選択することができます。
- Hugging Faceは、モデルの簡単な読み込み、ファインチューニング、カスタムタスクへの適応を提供し、ユーザーは特定のアプリケーションにLLMを活用できます。
- Hugging Faceは、一般的なNLPタスクのためのトレーニングおよび推論パイプラインを提供し、低レベルの実装の詳細を必要とせずにモデルの利用を高レベルで行うためのインターフェースを提供します。
よくある質問
この記事で表示されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles