先述した入出力経路に当てはまる文字列について、その処理例が参考URLの中で記載されていました。3])■デコーダーターゲット:教師データとして出力して欲しいEmbedded。1])投入される文章、つまり入力される文字列は必ず頭に<bos>と<eos>がそれぞれ先頭と末尾に記載されていました。これに対して出力される文字列は先頭の<bos>がなく、<eos>だけがあり、それによって1文字文字数が削られることから末尾に<pad>が追加され、文字列長が揃えられていました。参考URLのプログラム上では登場するトークンに順にIDを与えるようなトークナイズ処理が行われていました。形態素解析を行い、その単語に合わせてIDを振ってるように見受けられました。特殊文字が不定だと困るので、最初に与えるものとして、特殊文字を先にID割り当てを行ってるようでした。以下のものは参考URLから引用させて頂きました。#特殊文字の定義j_v.set_default_index(j_v['<unk>'])こうしてみていて気づいたのは、「GPTはトークンとして英語はきちんと単語単位でトークン化できるが、日本語はほぼ1文字1トークン、場合によっては漢字や一部カタカナは2トークンで表現されている」ところですかね。なると、GPTはほぼ日本語に関しては1文字単位で特徴量を付与し、それに基づいて推論をさせていると言うことになります。日本語による文字単位の推論って実はもの凄く難しいです。単語であれば、一定の文法に基づいてルール付けられた処理を行わせることが可能ですが、文字単位となると、1文字来たら次に何が来るか、その前に通常何が来るものなのか、あらゆる予測が出来なければなりません。それをいとも簡単にやれてしまうGPT-3以降あるいはその互換モデルには寒気を感じるものがあるほどに非常に難しいものがあるのではないかなと思います。Layerと呼ばれる層で、送り込まれたそれぞれのトークンがベクトル化されます。ベクトル化されたトークンの次元数は一般的にモデル構造における(d-model)と表現された数値出示されます。2048)なサイズに膨れ上がります。数値としては、通常32bitな浮動小数点、リソース削減で16bitな浮動小数点を使用することもあります。16ビット化した場合は丸め誤差が発生することになり、回答品質に影響を与えることがあります。これにより、その文字が持つ意味を「数値化された特徴・パターン」として変換され、コンピュータが要約理解出来るようになります。Encoding(略してPEとも呼ぶらしい)になります。参考URLではこのように書かれていました。pe)PEについてよく公式が書かれていますが、その公式を示す部分が上記ハイライト箇所になっています。1::2]となっています。その前段で行われているのは、そのトークンの位置決定や公式内の要素となる値の計算部分となっています。これで特徴化した各ベクトル化されたトークンに対して位置情報を加算し、Normレイヤー等でデータが正規化された後、Self-Attention-Layer等に送り込まれることになります。入力された馬鹿でかいベクトルはTransformerのヘッダ数に沿って分散され、処理にまわされるため、ここでGPUの並列処理能力が発揮されるわけですね。まとめるとこんな感じかな?ということで、図に表現してみました。テキストが放り込まれてTransformerにたどり着くまでこういうことを知ると分かってくることそれが本質的に的を得てるのかどうかは分かりませんが、Embeddingで抽出しているデータが日本語だとほぼ1文字であるのに対して、英語だとほぼ確実に1単語となっていることから、特徴をより正確につかんでいるのは英語の方だと理解しました。よって、日本語でも膨大なデータ量から特徴抽出してるので人として気づきにくいレベルまで高いものがあるのだろうと思うのですが、やっぱり英語でPromptを書いた方がより確実にやらせたいことは出来るんじゃないかという気がします。Textは日本語で出せよ」と指示する必要がある出力に関すること、単語の取り扱いについては日本語で記述すると言うことをすると、それだけでかなり応答内容の品質は上昇するのではないでしょうかねと言うことです。現在個人でもお仕事でも取り組んでるLangChainでは、Chainで設定されるタスクには必ず英語でTemplateにタスクの内容が記載されており、例えば主に取り組んでいるRetrievalQAでは英語で「レトリーバーから検索が出来なかった場合は分かりませんとだけ応答しなさい」という命令が加えられてます。QA以外の答えを返しちゃダメ絶対ってここで示してる訳なんですよね。今後はもうPromptエンジニアリングさえ出来れば良いんだという人もいらっしゃるかと思いますが、中身を知ってその制約や限界を知るだけでもこうしてどこに気を付けたらよりよい結果が生み出されるのか、どこまで意識したら今のところはいいんだろうかという所がわかるんで、たまにはこういった仕組みをきちんと掘り下げてみるって事も重要なのかなと感じる今日この頃です。ここ最近遊んでたこと2023年3月26日[Web]CraftCMSに触れる2020年11月13日[Trouble][BLOG]正直参った。