KenLM は、n グラム確率を推定するために、補間された修正クネザー ネイ スムージングを実行します。
KenLM ツールキットをインストールする前に、kenlm-dependency にあるすべての依存関係をインストールする必要があります。
Debian/Ubuntu ディストリビューションの場合:
動作するコンパイラを入手するには、 build-essential
パッケージをインストールします。ブーストはlibboost-all-dev
として知られています。サポートされている 3 つの圧縮オプションには、それぞれ個別の開発パッケージがあります。
$ sudo apt-get install build-essential libboost-all-dev cmake zlib1g-dev libbz2-dev liblzma-dev
このためには、 conda または virtualenv仮想環境を使用することをお勧めします。 conda の場合は、次を使用して作成できます。
$ conda create -n kenlm_deepspeech python=3.6 nltk
次に、以下を使用して環境をアクティブ化します。
$ source activate kenlm_deepspeech
これで、kenlm をインストールする準備ができました。まず kenlm リポジトリのクローンを作成しましょう。
$ git clone --recursive https://github.com/vchahun/kenlm.git
次に、次を使用して LM 推定コードをコンパイルします。
$ cd kenlm
$ ./bjam
最後のステップとして、必要に応じて、以下を使用して Python モジュールをインストールします。
$ python setup.py install
まずはトレーニングデータを取得しましょう。ここでは聖書を使います。
$ wget -c https://github.com/vchahun/notes/raw/data/bible/bible.en.txt.bz2
次に、単純な前処理スクリプトが必要になります。その理由は次のとおりです。
.bz2
) である必要があります。したがって、次の行を含む単純なスクリプトpreprocess.py
を作成します。
import sys
import nltk
for line in sys . stdin :
for sentence in nltk . sent_tokenize ( line ):
print ( ' ' . join ( nltk . word_tokenize ( sentence )). lower ())
健全性をチェックするには、次のようにします。
$ bzcat bible.en.txt.bz2 | python preprocess.py | wc
そして、それがうまく動作することを確認してください。
これでモデルをトレーニングできるようになりました。 Kneser-Ney スムージングを使用してトライグラム モデルをトレーニングするには、次を使用します。
# -o means `order` which translates to the `n` in n-gram
$ bzcat bible.en.txt.bz2 |
python preprocess.py |
./kenlm/bin/lmplz -o 3 > bible.arpa
上記のコマンドは、まずトークン化と小文字化を実行する前処理スクリプトにデータをパイプします。次に、このトークン化され小文字化されたテキストが、推定作業を実行するlmplz
プログラムにパイプされます。
数秒で完了し、arpa ファイルbible.arpa
が生成されます。 less
」またはmore
のようなものを使用して arpa ファイルを検査できます (つまり、 $ less bible.arpa
)。最初に、ユニグラム、バイグラム、およびトリグラムのカウントを含むデータ セクションがあり、その後に推定値が続く必要があります。
ARPA ファイルを直接読み取ることができます。ただし、バイナリ形式の方が読み込みがはるかに速く、柔軟性が高くなります。バイナリ形式を使用すると、読み込み時間が大幅に短縮され、より多くの構成オプションが利用できるようになります。これらの理由から、以下を使用してモデルを 2 値化します。
$ ./kenlm/bin/build_binary bible.arpa bible.binary
IRSTLM とは異なり、ファイル拡張子は重要ではないことに注意してください。バイナリ形式はマジックバイトを使用して認識されます。
二値化するときにtrie
使用することもできます。このためには、次を使用します。
$ ./kenlm/bin/build_binary trie bible.arpa bible.binary
言語モデルができたので、文をスコアリングできます。 Python インターフェイスを使用すると、これを非常に簡単に行うことができます。以下に例を示します。
import kenlm
model = kenlm . LanguageModel ( 'bible.binary' )
model . score ( 'in the beginning was the word' )
すると、次のようなスコアが得られる可能性があります。
-15.03003978729248