Google Colabでトークナイザーを学習する(10/27日勉強会用)
はじめに
この記事の内容は、以下の勉強会で報告したものになります。
開催日時:2024年10月27日(日)17:00 - 19:00
テーマ:小型LlamaモデルのMegatron-LMを用いた事前学習と継続事前学習
この勉強会では、トークナイザー学習に加えて、事前学習や継続事前学習についても報告を行っています。本記事と合わせてご活用ください。
本記事の概要
本記事では、Tanukiモデルと同様の方法で、トークナイザー学習を行う方法を解説します。
なお、トークナイザーの理論などについては、
- 日本語トークナイザーを準備する意味
-
日本語トークナイザーの作り方
でも解説していますので、あわせてご覧ください。
ディレクトリ構成
Tanuki_pretraining
|
|-- learning_tokenizer
|
|-- config # 設定ファイルの置き場
| |
| |-- config.yaml # トークナイザー学習(sentencepiece)に使う設定ファイル
| |
| |-- special_token_list.py # 特別な意味を持つトークンの定義
|
|-- learning_corpus # トークナイザー学習に使うファイルの置き場
|
|-- preprocess_data # 作業用のファイルが置かれるディレクトリ
|
|-- train_sentencepiece_tokenizer_mecab.ipynb # トークナイザー学習コード
実行環境
Google Colabの場合
- GPU不要(ハイメモリ)
(ただし、今回の設定では、1GB程度のデータセットしか処理できません。)
追加でインストールが必要なライブラリ
- mecab
- libmecab-dev
- mecab-ipadic-utf8
松尾研の提供環境(GCP)での構築の場合
事前学習の方法(10/27日勉強会公開用)で詳しく説明していますので、そちらをご覧ください。
Tanuki_tokenizer学習パイプライン
Tokenizer作成手順書
データの準備
(Tanuki Tokenizerは非公開となっています。)
より多くの語彙を網羅したコーパスを使用するとよいでしょう。
llm-jpでの「Tokenizer学習用データの作成方法」などが参考になります。
jsonlをtxtに変換(コーパスがjsonlである場合)
sentencepieceでの学習の場合、txtファイルを使用することになるので、事前に変換しておきます。
わかちがき
言語間の単語区切りを統一するため、MeCabで日本語を形態素で分割し、'||||'という滅多にでないであろう文字で分割しています。 MeCabとsentencepieceの作者の投稿Sentencepiece の分割を MeCab っぽくするが参考になります。 1行が非常に長いデータがあるため -bオプションを使用して、入力バッファを多めに取っておくとよいでしょう。
-b, --input-buffer-size=INT
set input buffer size (default BUF_SIZE)
(MeCabのリファレンスより)
トークナイザー学習
トークナイザー学習には、sentencepieceを用いています。
主な設定は以下のとおりです。
# config.yamlで設定
vocab_size: 65000
character_coverage: 0.9995
model_type: unigram
# コード中の設定
split_digits=True
allow_whitespace_only_pieces=True
remove_extra_whitespaces=False
pretokenization_delimiter="||||"
- vocab_size:語彙数。モデルのパラメータ数に大きく影響します。
- character_coverage:文字のカバー率。英語のみの場合は1で大丈夫。
- model_type:サブワード分割の方法。英語ではBPEがよく用いられている。
- split_digits:数字(0-9)をそれぞれ区切るか?
- allow_whitespace_only_pieces:空白のみのトークンを許すか?
- remove_extra_whitespaces:行の最初や最後の空白を削除するか?
- pretokenization_delimiter="||||":区切りとして使用する文字。今回は、MeCabでわかちがきをした時に使った"||||"を設定しています。わかちがきをしない場合には、設定不要です。
東京大学 松尾・岩澤研究室が運営する松尾研LLMコミュニティのLLM開発プロジェクト[GENIAC] の開発記録、情報発信になります。 各種リンクはこちら linktr.ee/matsuolab_community
Discussion