モデルは次の言葉を予想する
言語モデルは、次に来る言葉を予想して文章を書くプログラムです。スマホが次の単語を提案するのは、その小さな例です。
モデルの上に作る機能は、この予想の性質を受け継ぎます。仕組みが分かれば、不思議な答えも理解できます。
このレッスンのゴール
メモ
言語モデルがどのように文章を作るかを、数式を使わずに説明できる。
キーワード
| ことば | いみ |
|---|---|
| モデル | 大量の文章からパターンを学んだプログラム |
| プロンプト | モデルに送る文章 |
| トークン | 文章の小さなかたまり。単語や単語の一部のこと |
| コンテキスト | 1回の答えのためにモデルが見る文章すべて |
| 温度 | 予想のばらつきの大きさを決める設定 |
学生が入力するセルは、このプレビューでは空白です。
モデルは1トークンずつ書く
モデルは答え全体を計画しません。プロンプトを読み、次のトークンを予想して足し、また予想します。
これを答えが終わるまでくり返します。トークンは、そこまでに書いた文章すべて、つまりコンテキストから選ばれます。
例:次の言葉
| ここまでの文章 | 次の言葉 | 10回中の回数 |
|---|---|---|
| 今日は天気がよいので、公園を | 散歩 | 6 |
| 今日は天気がよいので、公園を | 歩き | 3 |
| 今日は天気がよいので、公園を | 掃除 | 1 |
学生が入力するセルは、このプレビューでは空白です。
次の言葉をたずねる
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const post=(m,t,x)=>fetch(u,{method:'POST',headers:{'content-type':'application/json',authorization:'Bearer lab'},body:JSON.stringify({model:'lab',messages:[{role:'user',content:m}],max_tokens:t,temperature:x})}).then(r=>r.json());post('「今日は天気がよいので、公園を」の続きを、一語だけで答えてください。',12,0.7).then(j=>console.log('モデル:'+j.choices[0].message.content)).catch(e=>console.log('記録済みサンプル(モデルの応答なし):散歩'))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
同じプロンプトでも答えは変わる
モデルは、可能なトークンそれぞれに確率をつけ、その中から1つを引きます。温度は、引き方の大胆さを決める設定です。温度が低いと、ほぼ必ず最も確からしいトークンを選びます。高いと、珍しいトークンもよく選びます。
モデルは電卓ではありません。2回たずねると、答えが2つ返ることがあります。
同じプロンプトを2回送る
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const post=(m,t,x)=>fetch(u,{method:'POST',headers:{'content-type':'application/json',authorization:'Bearer lab'},body:JSON.stringify({model:'lab',messages:[{role:'user',content:m}],max_tokens:t,temperature:x})}).then(r=>r.json());const s=['散歩','歩き'];(async()=>{for(let i=0;i<2;i++){let t;try{const j=await post('「今日は天気がよいので、公園を」の続きを、一語だけで答えてください。',12,1);t='モデル:'+j.choices[0].message.content}catch(e){t='記録済みサンプル(モデルの応答なし):'+s[i]}console.log((i+1)+'回目:'+t)}})()"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
確からしいことと正しいことは別
モデルは文章から学んだので、もっともらしい文を書くのが得意です。事実を調べることはできません。間違った文がもっともらしく見えれば、落ち着いた自信のある調子で書いてしまうことがあります。
大切なことを確かめるのは、開発者の仕事です。
知りえないことをたずねる
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const post=(m,t,x)=>fetch(u,{method:'POST',headers:{'content-type':'application/json',authorization:'Bearer lab'},body:JSON.stringify({model:'lab',messages:[{role:'user',content:m}],max_tokens:t,temperature:x})}).then(r=>r.json());post('私の猫の名前は何ですか。短い一文で答えてください。',40,0.7).then(j=>console.log('モデル:'+j.choices[0].message.content)).catch(e=>console.log('記録済みサンプル(モデルの応答なし):あなたの猫の名前は分かりません。'))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
モデルは検索エンジンのように事実を調べる、と考える人が多くいます。しかし、そうではありません。モデルは、確からしいトークンで文章を続けるだけです。答えは、別の情報と照らし合わせてから信用しましょう。
さらに:自分だけの小さなモデル
課題は、小さな言語モデルです。回数の表と、選び方の規則でできています。本物のモデルも同じ考え方です。表ははるかに大きく、はるかに多くの文章から作られ、コンテキストもずっと広く見ます。
表に自分で言葉と回数を足して、どんな文章ができるか見てみましょう。