bert-base-casedの使い方!Case Sensitiveを確認する!



1. BERTとは
- Encoderタイプのモデル
- case-sensitive
- 109M params
- 英語で事前学習
BERT(Bidirectional Encoder Representations from Transformers)はencoderのみのモデルです。bert-base-cased はbertの一種で、MLMを用いて英語を対象に事前学習を行われています。bert-base-casedは109M paramsです。bert-base-casedはcase-sensitiveなモデルになっています。例えば、Japanaとjapanは違います。


2. bert-base-casedでできること
MLM(Masked Language Modeling)と呼ばれるマスクされた位置に何の単語が入るべきかを予測します。
2.1. MLMの流れ
- 単語のマスキング
- 選ばれた単語はマスクトークン(通常は
[MASK]
トークン)に置き換えられます。例えば、「The ramen is delicious. It is especially famous for its soy sauce flavor.」という文があった場合、「The [MASK] is delicious. It is especially famous for its soy sauce flavor.」のように一部の単語がマスクされます。
- 選ばれた単語はマスクトークン(通常は
- マスクされた文をモデルに入力
- マスクされた文がBERTモデルに入力されます。モデルはこのマスクされた文を通して、マスクされた単語を予測します。
- マスクされた単語の予測
- モデルは、マスクされた位置に何の単語が入るべきかを予測します。例えば、マスクされた位置に「ramen」が元々入っていたことを予測します。


2.2. MLMの目的
MLMの目的は、モデルに双方向的な文の理解を持たせることです。従来のリカレントニューラルネットワーク(RNN)や自己回帰モデル(例えばGPT)は、文を一方向にしか見ることができません。これに対して、MLMでは文全体を一度に処理し、文の前後の文脈情報を同時に考慮します。
3. pythonコード
3.1. 実行環境
- RTX 4070ti super VRAM 16GB
- Windows11
- memory 64GB
- Python 3.11.9
3.2. python
次のプログラムは、Hugging FaceのTransformersライブラリを使用して、BERTモデルでマスク化言語モデリング(Masked Language Modeling, MLM)を実行しています。具体的には、指定された文中のマスクされた部分を予測します。
from transformers import pipeline,set_seed
set_seed(42)
pipe = pipeline('fill-mask', model='bert-base-cased',device=0)
out=pipe("The [MASK] is delicious.It is especially famous for its soy sauce flavor.")
out
入力文 “The [MASK] is delicious. It is especially famous for its soy sauce flavor.” をモデルに渡します。文中の [MASK] トークンが予測対象となります。モデルはこのマスクされた単語を予測します。
残念ながら、「ramen」を予測することはできませんでした。
3.3. Case Sensitiveであることの確認
python is similar to [MASK] language.という文章でCase Sensitiveであることを確認してみましょう。
from transformers import pipeline,set_seed
set_seed(42)
pipe = pipeline('fill-mask', model='bert-base-cased',device=0)
out=pipe("python is similar to [MASK] language.")
out
from transformers import pipeline,set_seed
set_seed(42)
pipe = pipeline('fill-mask', model='bert-base-cased',device=0)
out=pipe("Python is similar to [MASK] language.")
out
もっとも確率の高いトークンはpythonが小文字の場合はthe、Pythonが大文字の場合はCとなりました。

