文字レベルのtext-to-textをしたい (char-level text-to-text)
背景
通常の翻訳タスクでは単語レベルで分割されたデータを学習すると思う
だが、それが適当でないような文字列を扱いたいので、文字レベルで処理をするモデルを作りたい
該当するドメインの事前学習モデルがhuggingfaceで見つからなかったので、近いタスクを行っているモデルからfine-tuningしたい
とはいえ機械学習、自然言語処理に関する知識が浅いので、とりあえずhuggingfaceの使い方、前提知識をつける
以下の記事がわかりやすかった
これ以降のpartで詳しい話や、transformerそのものに関する話もあって理解が深まった今回の場合part5で詳しい話の出ているtokenizerが特殊になりそう
tokenizerは文字列を分けたりしてベクトルを与える処理という認識
数値化してモデルに与える
だが該当するtokenizerはなかった
model hubからは見つからなかったが、
「huggingface tokenizer character level」でgoogle検索するとドンピシャなものを発見
今回はseq2seqなタスクなので、encode-decoderモデルであるByT5
が該当する
ByT5について調査したところ、
utf-8のbyteを使って学習するらしい(byte版のt5ってことですね)
0~255+αくらいのパターンですべての文字を表せるのが強み
ただ、英語より日本語の方が不利とのこと
日本語の方が使われるByte数が多いからではとのこと
(今回自分が扱いたいのが自然言語そのままって感じでもないのでもしかしたらByT5でもいけるかも)
一方で同じ記事でCharformerというのもあった
名前的にcharacterのtransformerっていうもの
文字列の分割にあたる処理をモデルに組み込んでしまっているらしい
ただまだサポートされていないとのこと、残念
とりあえずbyt5を使う方針で決定
Datasetを整形する必要があるらしい
baseはこのコースの説明
pd.Dataframeから取りたかったので次を参考にload
train, test, validを分けるのには以下を参照