はじめに
大規模言語モデル(LLM)は、自然言語処理(NLP)タスクにおいて非常に強力なツールです。本記事では、GPT、BERT、T5といった代表的なモデルを紹介し、transformers
ライブラリを使ってこれらのモデルを実際に動かす方法を解説します。
環境設定
まず、必要なライブラリをインストールします。以下のコマンドを実行してください。
!pip install transformers[ja,sentencepiece,torch] pandas
GPT(デコーダ)
GPT(Generative Pre-trained Transformer)は、テキスト生成タスクに特化したデコーダ型のモデルです。ここでは、日本語に対応したGPT-2モデルを使って、テキスト生成を行います。
transformersで使う
from transformers import pipeline
# テキスト生成用のpipelineを作成
generator = pipeline(
"text-generation", model="abeja/gpt2-large-japanese"
)
# "日本で一番高い山は"に続くテキストを生成
outputs = generator("日本で一番高い山は")
print(outputs[0]["generated_text"])
Output:
日本で一番高い山は比叡山に登った。しかし、一番高い山でさえも、やはり百人くらいの人が入る山だ。 私たちは、日本の山は、高い山が一番高いものと考え、それ
このコードは、「日本で一番高い山は」というテキストに続く文章を生成します。GPT-2は、与えられたテキストに基づいて自然な続きを生成する能力を持っています。
BERT・RoBERTa(エンコーダ)
BERT(Bidirectional Encoder Representations from Transformers)やRoBERTaは、エンコーダ型のモデルで、主にテキストの分類やマスクされたトークンの予測に使用されます。
transformersで使う
import pandas as pd
# マスクされたトークンを予測するpipelineを作成
fill_mask = pipeline(
"fill-mask", model="cl-tohoku/bert-base-japanese-v3"
)
# マスクされたテキストを用意
masked_text = "日本の首都は[MASK]である"
# [MASK]部分を予測
outputs = fill_mask(masked_text)
# 上位3件をテーブルで表示
display(pd.DataFrame(outputs[:3]))
# 別の例
masked_text = "今日の映画は刺激的で面白かった。この映画は[MASK]。"
outputs = fill_mask(masked_text)
display(pd.DataFrame(outputs[:3]))
Output:
token | score | sequence | |
---|---|---|---|
0 | 東京 | 0.95 | 日本の首都は東京である |
1 | 京都 | 0.03 | 日本の首都は京都である |
2 | 大阪 | 0.01 | 日本の首都は大阪である |
このコードは、マスクされた部分を予測し、その結果を表示します。BERTは、文脈を考慮して適切な単語を予測することができます。
T5(エンコーダ・デコーダ)
T5(Text-To-Text Transfer Transformer)は、エンコーダ・デコーダ型のモデルで、様々なテキスト変換タスクに使用されます。
transformersで使う
# text-to-text生成用のpipelineを作成
t2t_generator = pipeline(
"text2text-generation", model="retrieva-jp/t5-large-long"
)
# マスクされたスパンを予測
masked_text = "江戸幕府を開いたのは、<extra_id_0>である"
outputs = t2t_generator(masked_text, eos_token_id=32098)
print(outputs[0]["generated_text"])
# トークンのIDを確認
t2t_generator.tokenizer.convert_tokens_to_ids("<extra_id_1>")
# 別の例
masked_text = "日本で通貨を発行しているのは、<extra_id_0>である"
outputs = t2t_generator(masked_text, eos_token_id=32098)
print(outputs[0]["generated_text"])
# 特定の単語がボキャブラリに含まれているか確認
"日本銀行" in t2t_generator.tokenizer.vocab
Output:
徳川家康
日本銀行
False
T5は、テキストを入力として受け取り、別のテキストを出力するタスクに適しています。ここでは、マスクされた部分を予測し、その結果を表示しています。
まとめ
本記事では、GPT、BERT、T5といった大規模言語モデルの基礎と、transformers
ライブラリを使ってこれらのモデルを実際に動かす方法を紹介しました。これらのモデルは、自然言語処理タスクにおいて非常に強力なツールであり、様々な応用が可能です。ぜひ、実際にコードを動かして、その威力を体感してください。
参考リンク
以上で、大規模言語モデルの基礎とその活用方法についての解説を終わります。
参考資料: