プロジェクト 昨日の続き

結局昨日やったリスト形式では登録時のコストで死ねる*1んで、結局ハッシュリストで2-gramのカウントまでやってしまうことにした。よくわからんが、make-hash-tableをしようと思ったらmzschemeではsrfi-69と組み込み両方入っててよくわからん(なんか扱うクラスが違うっぽい)が、とりあえずsrfi-69に入ってるやつを使うことにした。
で、これでコーパスを走査して全部(50万語くらい)登録してやると、1GHzのノートPCで15秒くらいかかった。うーん、速いんか遅いんかわからんが、とりあえず使える速度にはなったんで満足しておく。こうなるとメモリアクセスの問題のような気もするし。
で、ここまでやってしまうとあとは楽で、適当に先頭タグから辿ってランダム文生成をやった。演習ページの参考のところに書いてある通り、単語の連接確率で取っていくようにしたらなんかそれっぽいのがちゃんと出た。例えば

Such alterations in the monocyte differentiation inhibitory effect of full-length, and activators of the Fas ( PAO, as an upstream promoter directs transcription factor.

とか。この場合、計算に2-gramの表作るより時間かかるけど…。一語毎にテーブルからリストを拾ってきてるから、仕方ないかなぁ。
しかし、いくらなんでも文自体が長過ぎる気がするんで、ピリオドが続きそうなら直ぐに選択して終わらせる処理をしたら、長いのが出なくなった。とりあえずこれでいこう。

あとは3-gramとかにも使えるように拡張か。

*1:O(n^2)オーダ