今日は「やらかした経験」について話すね。OpenLedger上でモデルの推論テストを回したら、見事に自分で自分を落とし穴にハメた。

何が起きたかというと、あるデータセットの帰属(アトリビューション)精度を検証したくて、手元にあるラベル済みの金融ニュースデータで小さなモデルを微調整したんだ。全部で800件。各データにはタイムスタンプと出所が付いてる。

学習が終わった後、テストニュース1本でモデルに聞いた。「この会社の最新決算はどうなってる?」すると、分析文が返ってきた。そこでオンチェーンの帰属ログを確認したら、貢献度が一番高いのが、なんと3年前の古いニュースだった。重みは6割を占めてる。これはおかしい。時效性が強く求められる場面で、古いデータがここまで大きな比重を持つはずがない。

慌てて学習パラメータを確認したら、微調整のときに「時間減衰係数」を設定し忘れてた。システムのデフォルトでは、すべてのデータを同じ扱いにする。だから3年前も3日前も同じ重みで、モデルは自然に最もキーワードに合う方を拾いにいってしまった。新旧は関係なし。

そこで減衰係数を再設定して、1か月を超えるデータの重みを半分にした。もう一度学習を回し、同じテストニュースで改めて質問。今度は、主な貢献が2週間前のある記事であることが示された。重みは4割強。そのほかの直近データを合計すると7割を超えていて、やっと筋が通った。

この一連で推論コストがだいたい2ドル分くらい余計にかかったけど、学びは大きい。OpenLedgerで微調整するときは、データ量だけ増やしてもダメ。時間の重みといった細部をきちんと調整しないと、モデルの答えはそのうち「古い情報」になり得る。この帰属システムの良いところは、各ステップで何がまずかったのかを見られること。昔みたいに、大口パン(大喜利)やイーサ(ETH)で遊んで、送金先アドレスを間違えたら「自分のうっかり」で終わり、しかもモデルのロジックが間違っていても「調べる場所」自体がないのとは違う。

兄弟たち、今後時効性が敏感なタスクを回すときは、必ず時間減衰を追加してくれ。俺みたいに授業料を無駄に払うな。
@OpenLedger $OPEN #OpenLedger