背景:LLMや生成AIは仕事では使っているが仕組みはあまり分かっていなかった。仕事の関係でもう少し理解が必要
課題:Attentionがあまり分かっていないので、LLM from Scratch(LLM自作入門)を使ってミニマムなLLMを作ってみることにする。
結論:2章の説明をベースに勝手な解釈でトークナイザを作った。機能上の制限事項はあるが動いた。
詳細:
発売されてすぐに「作りながら学ぶ LLM自作入門」を買ったのだが、生成AIって、でかいがGPUないとまともに動かないと知り興味が薄れて積読状態であった。諸事情で外堀が埋まってきたのと、小規模なLLMでも創造性を感じられるらしいことを知り、手持ちのPCでも動かせる最低限の規模のミニマムなLLMを作ってみる。
学習用の文書は以下を利用
https://en.wikisource.org/wiki/Idle_Thoughts_of_an_Idle_Fellow/On_being_shy
「LLM自作入門」の最初はトークナイザなので、本の解説を参考に適当に作ってみた。英語だと最初から単語に区切られているので楽。日本語だと形態素解析を使って単語に分割する必要がある。また、本によるとバイトペアエンコーディング(BPE)はアルゴリズムがややこしいらしいので、そこまでは実装していない。ソースは以下にアップ*1
github.com
自分が作ったTokenizerは小文字に統一してエンコードしているので、Tokenizerで文書をエンコード、デコードすると、単語が全て小文字になってしまう。
原文
ON BEING SHY. All great literary men are shy. I am myself though I am told it is hardly noticeable.
エンコード・デコードして戻した文
on being shy. all great literary men are shy. i am myself though i am told it is hardly noticeable.