Kneser-Ney Smoothing は高性能な言語モデルである。と、よく聞かされて知っているつもりだけど、まだ一度も試したことがなかったので、試してみた。 コードはここ。 https://github.com/shuyo/iir/blob/master/ngram/knsmooth.py 実験用にべったり書いているのでコピペは多いし、速度やメモリの効率も悪いが、まあ気にしないで。 コーパスは最初手元の適当なニュースコーパスを使っていたんだけど、それだと再現検証できないので、nltk のコーパスを使うように変更した。 nltk.corpus の下にあるコーパスモジュール名を -c オプションで与えると、そのコーパスを使って additive smoothing と Kneser-Ney smoothing の perplexity を出してくれる。 デフォルトでは Brown コーパス