とりあえず過去4トークンを状態として維持するようにしましたが、例文の量が少ないので例文をなぞる出力しかされないという tokenizerを大幅に変更 オリジナル: "マルコフ連鎖って何?" by @KimiruHamiru ( https://scratch.mit.edu/projects/1195905848 ) ---- ここから下は元プロジェクトのメモクレを継承しています AIに詳しい人では全然ないのですが、 ・「マルコフ連鎖と呼べそうな範囲で一応動く」 ・「何をやってるか、動作を観察しやすい形」 という方向で、実装してみました。 無茶苦茶な英文(?)が生成されますが、仕様です。ただ、無茶苦茶といいつつも「theの次には名詞相当な単語が来る」とか、「ある単語は次単語の候補が1つしかなくて特定のシークエンスが生まれる」とかいった現象は仕組み上必然的に起こるので、「一定のラインを超えない」感じは読み取れるかなと思います。 意味のある自然な英文の生成、という目的では「現在の状態(単語)しか見ない」仕組みでは実用は事実上不可能という理解なのですが、これでどの程度いけてるのか、どこに問題があるか考える足掛かりとして重要な概念なのかなと思います。 「現在の単語しか」では不十分、という話はつまりは「2つ前の単語も気にするともっとマシ、文全体を見ればはるかによくなる」ということで、巷にある現行のAIは「文全体を見てる’(そしてそれは計算量がすごく多くなる)」という話になってるようです。 「マルコフ連鎖」というくくりだと、このプロジェクト(や、過去のAI研究)のように「現在の状態」というのを「現在見ている1つの単語だけ」とする決まりはないはずなので、マルコフ連鎖の考え方自体が悪いわけでもなくて、「状態」をどういう範囲で考えるかの部分で、「単語だけ」だと不十分、という話と理解しています。合ってるかは知りません。 細かい(?!)ことを言えばtokenizerが空白記号頼みで、記号(puncture:英文字じゃない部分、句読点や引用符とか)も単語の一部としているのがマズいとかあるんですが、それでもなお(だからこそ)生成物はそれっぽくなる面もあるので、一概に否定するものでもない、機械学習が普及した2025年の今だからこそ「正規化するのが正解」だの「文法をルールで教えるのが正解」だのと断定できなくなってる、ように思います。 日本語の扱いに拡張する場合、単語境界の概念が深刻なわけですが、以前読んだ本で「カタカナひらがなと漢字の境界(≒unicode blockの比較)を使うと案外行ける」みたいな話もあったかなと思います。辞書の「生成」はともかく「メンテ」は「手でできるんでは」という直感もあるので、なにがしかうまい方法があったりするのかも知れません。そもそもの「文字と文の境界」にあるであろう「トークナイズの概念」自体を見直す必要があったりするのかもとも最近は思います。 このプロジェクトについて、連続実行すると最後の単語を利用するように変更してみたのですが、10連鎖固定になってるので「続かない単語(端的には例文の最後に来るトークン)」を引いた場合にどう挙動するのが望ましいかは、考えていません(試してもいません)。リロードすれば「solar」になるのでそれほど大きな問題ではないのかもしれません。 元プロジェクトについて、例文を生成時にそのまま使ってて、候補の確率の偏りも単語の検出数をそのまま使ってる(重複含めて一律な乱数をかけている)のが、おもしろい(実験用として、実用性が必要充分かつハックしやすい)と思いました。 original project by @atsukinK : https://scratch.mit.edu/projects/1195822191 参考: マルコフ連鎖: https://ja.m.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95%E9%80%A3%E9%8E%96 マルコフ君のイメージ inspired by: https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%B3%E3%83%89%E3%83%AC%E3%82%A4%E3%83%BB%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95