統計的言語モデルツールキットpalmkitマニュアル

伊藤 彰則
山形大学 工学部
aito@eie.yz.yamagata-u.ac.jp

はじめに

palmkit(Publicly Available Language Modelling toolKIT) は、N-gram 言語モデル作成のためのプログラム群である.このツールキットは, という特徴を持つ. このツールキットを使うことで,以下のような作業を簡単に行なうことができる. また,このツールキットは,目的を問わず無料で利用・配布することができる.

ファイル形式

palmkitでは,以下のようなファイルを扱う.

言語モデルの作成の作成と評価

単語N-gramの作成

言語モデル作成手順
単語N-gram作成手順
言語モデル作成の一般的な手順を図に示す. これは,次のような手順からなる.
  1. 学習テキストから単語頻度リストを作る.
    これには,text2wfreqコマンドを使う.例えば,
          text2wfreq learn.text learn.wfreq
    
    のようにする.入出力ファイルが拡張子 .gz をもっていれば、 自動的に圧縮ファイルとみなして gzip により伸長・圧縮する。 入出力ファイルを引数に指定しなければ、.textファイルを標準入力、 .wfreqファイルを 標準出力に割りあてる(CMU-Cambridge SLM toolkit互換)ので、
          text2wfreq < learn.text > learn.wfreq
    
    のように使うことができる。
  2. 単語頻度リストから語彙リストを作る.
    単語頻度リストの上位n個,または頻度m回以上の単語を語彙とする. これには, wfreq2vocabコマンドを使う.例えば頻度の上位5000個 を語彙とする場合には,
          wfreq2vocab -top 5000 learn.wfreq learn.vocab5k
    
    のようにする.結果のファイルの拡張子( .vocab5k)は,5000語彙の リストという意味だが,特にこういう形式でなければならないということは なく,適当に付けてもよい. 上位n個という指定ではなく,例えば30回以上出現した単語を語彙とする 場合には,
          wfreq2vocab -gt 29 learn.wfreq learn.vocab5k
    
    とする(gt は grater than の略).

    入出力ファイルを引数に指定しなければ、.wfreqファイルを標準入力、 .vocabファイルを 標準出力に割りあてる(CMU-Cambridge SLM toolkit互換)ので、

          wfreq2vocab -top 5000 < learn.wfreq > learn.vocab5k
    
    のように使うことができる。
  3. 学習テキストと語彙リストから ID n-gram を作る.
    語彙が決まったら,ID n-gram を作る.これには, text2idngramを使う.
         text2idngram -vocab learn.vocab5k learn.text learn.id3gram
    
    のようにする.text2wfreqの場合と同じように,圧縮ファイルを扱う こともできる.
  4. ID n-gram と語彙リストからback-off言語モデルを作る.
    最終的に,back-off 言語モデルを作成する.これには, idngram2lmコマンドを使う.
          idngram2lm -idngram learn.id3gram -vocab learn.vocab5k -arpa learn.arpa
    
    これで,back-off 言語モデルのファイル learn.arpa.gz が生成される. idngram2lmは,圧縮ファイルにも対応しており,
          idngram2lm -idngram learn.id3gram.gz -vocab learn.vocab5k.gz -arpa learn.arpa.gz
    
    のように,圧縮したファイルを指定することもできる.

クラスN-gramの作成

言語モデル作成手順
クラスN-gram作成手順
言語モデル作成の一般的な手順を図に示す. これは,次のような手順からなる.
  1. 学習テキストから単語頻度リストを作る.
    これには,text2wfreqコマンドを使う.例えば,
          text2wfreq learn.text learn.wfreq
    
    のようにする.入出力ファイルが拡張子 .gz をもっていれば、 自動的に圧縮ファイルとみなして gzip により伸長・圧縮する。 入出力ファイルを引数に指定しなければ、.textファイルを標準入力、 .wfreqファイルを 標準出力に割りあてる(CMU-Cambridge SLM toolkit互換)ので、
          text2wfreq < learn.text > learn.wfreq
    
    のように使うことができる。
  2. 単語頻度リストから語彙リストを作る.
    単語頻度リストの上位n個,または頻度m回以上の単語を語彙とする. これには, wfreq2vocabコマンドを使う.例えば頻度の上位5000個 を語彙とする場合には,
          wfreq2vocab -top 5000 learn.wfreq learn.vocab5k
    
    のようにする.結果のファイルの拡張子( .vocab5k)は,5000語彙の リストという意味だが,特にこういう形式でなければならないということは なく,適当に付けてもよい. 上位n個という指定ではなく,例えば30回以上出現した単語を語彙とする 場合には,
          wfreq2vocab -gt 29 learn.wfreq learn.vocab5k
    
    とする(gt は grater than の略).

    入出力ファイルを引数に指定しなければ、.wfreqファイルを標準入力、 .vocabファイルを 標準出力に割りあてる(CMU-Cambridge SLM toolkit互換)ので、

          wfreq2vocab -top 5000 < learn.wfreq > learn.vocab5k
    
    のように使うことができる.
  3. クラスリストを用意する.クラスリストはあらかじめ用意しておいてもいいし, ctext2classコマンドを使って生成してもよい.
  4. 学習テキスト,クラスリスト,語彙リストから ID n-gram を作る.
    これには, ctext2idngramを使う.
         ctext2idngram -vocab learn.vocab5k -class learn.cls -idwfreq learn.idwfreq learn.text learn.cid3gram
    
    のようにする.生成されるのは,クラス列に対するidngramと,各単語の 出現頻度ファイルである idwfreq である.
  5. back-off言語モデルを作る.
    最終的に,back-off 言語モデルを作成する.これには, idngram2lmコマンドを使う.
          idngram2lm -idngram learn.id3gram -vocab learn.vocab5k -class learn.cls -idwfreq learn.idwfreq -arpa learn.arpa.gz
    
    これで,back-off 言語モデルのファイル learn.arpa.gz が生成される.

言語モデルの評価

作成した言語モデルは,単語perplexityにより評価する. モデルの評価をするコマンドがevallmである. 例えば次のような使いかたをする.
% evallm -arpa learn.arpa -context learn.ccs
Reading LM file learn.arpa 
1-grams:..2-grams:.....3-grams:.........
evallm : perplexity -text test.text
Number of word = 220248
13850 OOVs and 10000 context cues are excluded from PP calculation.
Total log prob = -1.15381e+06
Entropy = 7.55782 (bit)
Perplexity = 188.421
Number of 3-grams hit = 74209 (33.69%)
Number of 2-grams hit = 82637 (37.52%)
Number of 1-grams hit = 63402 (28.79%)
evallm : quit
evallm : done.
基本的な使い方としては,
      evallm -arpa 言語モデル -context コンテキストキュー
でevallmを起動し,evallm:のプロンプトで
      perplexity -text 評価テキスト
を入力する.この場合の評価テキストは,学習テキストと同じく, 単語間を空白で区切ったテキストファイルでなければならない. 評価テキストはコマンドラインで指定することもできる。この場合、
      evallm -arpa 言語モデル -context コンテキストキュー -text 評価テキスト
のように指定する。

言語モデルの指定の書式は、次のようである。

    ファイル名[;長さ][*重み][,ファイル名[;長さ]*重み...]