第5回では、AIに「これは確定記憶だ」と言わせないための規律について書きました。ここから3回は、うまくいかなかったことの記録が続きます。まずは、その規律を実装した仕組みが、実際にはほとんど何もしていなかった、という話です。
いちばん作り込んだ部分だった
おさらいすると、仕組みはこうです。会話の中から「この人はこういう人らしい」という観測を拾い、それをいきなり記憶にはせず、台帳という追記専用のファイルに1行ずつ溜めていきます。溜まった観測が一定の回数を超えたら、初めて「昇格の候補」として一覧に並び、人間が承認したものだけが確定記憶になります。
閾値は証拠の種類ごとに変えました。本人がはっきり言ったこと(「覚えておいて」「違う、こっちだ」)は1回で候補になります。本人の発話から分かる事実は2回。AIが推論した傾向は3回。数え方にも条件を付けていて、同じセッション(AIとの一続きの対話)の中で何度繰り返されても1回としか数えません。長く語った1回が3回に化けるのを防ぐためです。さらに、日付が違うことも条件にしました。時間を跨いで再現しないものは癖ではない、と考えたからです。反証が出たときはカウントを減らさず、印を付けるだけにしました。
テストも書いて、通りました。毎朝自動で動くようにもしました。全部で7本のスクリプト、1,100行ほど。idashの中で、いちばん手をかけた部分です。
実測したら、3行だった
2週間ほど経った時点で、システム全体の数字を一度きちんと数えてみました。
観測を溜める台帳ファイルは、2週間で3行でした。事実側が1行、癖側が2行です。
昇格候補が並ぶはずの、人間が承認するためのフォルダは、一度も作られたことがありませんでした。空だった、ではありません。フォルダそのものが存在していません。つまり、候補が1件も出たことがないのです。
毎朝の実行ログを遡ると、「抽出0件」「新しい昇格候補はありません」「昇格0件」が、ひたすら並んでいました。
エラーは一度も出ていません。正常に動いて、何もしていなかったわけです。
壊れているものには気づけるが、空回りには気づけない
なぜ2週間も気づかなかったのか。答えははっきりしていて、エラーが出なかったからです。
毎朝のログは全部「ok」で埋まっていました。自分はそれを見て、動いている、と思っていました。実際、動いてはいたのです。処理は最後まで回り、正常に終わっていました。ただ、処理する対象が0件だっただけで。
壊れている仕組みは、こちらが放っておいても向こうから知らせてくれます。エラーが出る、途中で止まる、画面に赤い文字が出る。ところが、正常に空回りしているものは、何も言ってきません。むしろ毎朝きれいなログを出して、こちらを安心させてきます。
精度の問題ではなく、水を汲む場所の問題だった
原因を追ってみると、抽出の精度とは関係のないところにありました。
この仕組みは会話から記憶を抽出します。当然、入力になるのは「会話」です。その取り込み先を、自分のパソコンで動かしているチャット環境ひとつに限定していました。
ところが実際には、自分の会話の大半は別のAIサービスの側で起きていました。取り込み先には、会話がほとんど流れてきていなかったのです。
つまり、抽出の精度が悪かったのではなく、そもそも材料が来ていなかったのです。閾値をどう調整しても、数え方をどう厳密にしても、入力が0なら出力は0です。丁寧に作った濾過装置を、水の来ていない場所に設置していたようなものでした。
作ったのに、押すボタンが無かった
同じ実測で、もう一つ空回りが見つかりました。
「AIの見立てが違う」と人間が訂正するための仕組みも、作ってあったのです。訂正を記録する関数まで実装済みでした。ところが、それを呼び出す画面が、どこにもありませんでした。
記録は0件のまま。作ったのに、押すボタンが無かった、ということです。
ログの見方が間違っていた
反省は三つあります。
まず、「動いているか」と「仕事をしているか」は、まったく別のことでした。自分はこの二つを、無意識に同じものとして扱っていました。
次に、ログを「エラーが無いか」で見ていたのも間違いでした。見るべきだったのは「何件処理したか」です。0件が2週間続いているログは、エラーよりよほど悪い知らせなのに、それを読み取る目を持っていませんでした。
そして、作り込む前に、材料が本当に流れてくるかを確かめるべきでした。順番が逆だったのです。閾値の設計より先に、台帳に1行でも入るかを見ればよかったのです。
捨ててはいない
コードは消していません。設計文書の上では「実装済み」の棚から「構想」の棚に戻しました。
取り込み先を変えれば、この仕組みはそのまま生きる可能性があります。作った規律そのものが間違っていたとは、いまも思っていません。ただ、「毎日自動で回る」という前提のほうは、たぶん諦めることになりそうです。人間が手で会話を渡すところから始め直すほうが、現実的な気がしています。
—
精度や品質を疑う前に、そもそも入力が来ているかを確かめるべきだったのです。書いてしまえば当たり前のことです。
ただ、この空回りに気づけたのは、ある日システム全体の数字を一度ぜんぶ数えてみたからでした。それをやるまでの2週間、自分は毎朝のきれいなログを眺めて、うまくいっていると思っていたわけです。作った仕組みの数を数えることはあっても、それが何件処理したかを数えたことは、一度もありませんでした。数えるまで分からないことのほうが、思っていたよりずっと多いようです。


コメント