KenLM melakukan Kneser Ney Smoothing yang dimodifikasi dan diinterpolasi untuk memperkirakan probabilitas n-gram.
Sebelum menginstal toolkit KenLM, Anda harus menginstal semua dependensi yang dapat ditemukan di kenlm-dependencies.
Untuk distro Debian/Ubuntu :
Untuk mendapatkan kompiler yang berfungsi, instal paket build-essential
. Peningkatan dikenal sebagai libboost-all-dev
. Tiga opsi kompresi yang didukung masing-masing memiliki paket dev terpisah.
$ sudo apt-get install build-essential libboost-all-dev cmake zlib1g-dev libbz2-dev liblzma-dev
Untuk ini, disarankan untuk menggunakan lingkungan virtual conda atau virtualenv . Untuk conda, Anda dapat membuatnya menggunakan:
$ conda create -n kenlm_deepspeech python=3.6 nltk
Kemudian aktifkan lingkungan menggunakan:
$ source activate kenlm_deepspeech
Sekarang kita siap untuk menginstal kenlm. Mari kita kloning repo kenlm terlebih dahulu:
$ git clone --recursive https://github.com/vchahun/kenlm.git
Dan kemudian kompilasi kode estimasi LM menggunakan:
$ cd kenlm
$ ./bjam
Sebagai langkah terakhir, secara opsional, instal modul Python menggunakan:
$ python setup.py install
Pertama mari kita ambil beberapa data pelatihan. Di sini, saya akan menggunakan Alkitab:
$ wget -c https://github.com/vchahun/notes/raw/data/bible/bible.en.txt.bz2
Selanjutnya kita memerlukan skrip pra-pemrosesan sederhana. Alasannya adalah karena:
.bz2
) yang memiliki satu kalimat per baris. Jadi, buat skrip preprocess.py
sederhana dengan baris berikut:
import sys
import nltk
for line in sys . stdin :
for sentence in nltk . sent_tokenize ( line ):
print ( ' ' . join ( nltk . word_tokenize ( sentence )). lower ())
Untuk pemeriksaan kewarasan, lakukan:
$ bzcat bible.en.txt.bz2 | python preprocess.py | wc
Dan lihat apakah itu berfungsi dengan baik.
Sekarang kita bisa melatih modelnya. Untuk melatih model trigram dengan pemulusan Kneser-Ney, gunakan:
# -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
Perintah di atas pertama-tama akan menyalurkan data melalui skrip prapemrosesan yang melakukan tokenisasi dan huruf kecil. Selanjutnya, teks yang diberi token dan huruf kecil ini disalurkan ke program lmplz
yang melakukan pekerjaan estimasi.
Ini akan selesai dalam beberapa detik dan kemudian menghasilkan file arpa bible.arpa
. Anda dapat memeriksa file arpa menggunakan sesuatu seperti less
atau more
(yaitu $ less bible.arpa
). Pada awalnya, ia harus memiliki bagian data dengan jumlah unigram, bigram, dan trigram diikuti dengan nilai perkiraan.
File ARPA dapat dibaca secara langsung. Namun, format biner memuat lebih cepat dan memberikan lebih banyak fleksibilitas. Menggunakan format biner secara signifikan mengurangi waktu pemuatan dan juga memberikan lebih banyak opsi konfigurasi. Karena alasan ini, kami akan melakukan binerisasi model menggunakan:
$ ./kenlm/bin/build_binary bible.arpa bible.binary
Perhatikan bahwa, tidak seperti IRSTLM, ekstensi file tidak menjadi masalah; format biner dikenali menggunakan byte ajaib.
Seseorang juga dapat menggunakan trie
saat melakukan binarisasi. Untuk ini, gunakan:
$ ./kenlm/bin/build_binary trie bible.arpa bible.binary
Sekarang kita memiliki Model Bahasa, kita dapat menilai kalimat. Sangat mudah untuk melakukan ini menggunakan antarmuka Python. Di bawah ini contohnya:
import kenlm
model = kenlm . LanguageModel ( 'bible.binary' )
model . score ( 'in the beginning was the word' )
Kemudian, Anda mungkin mendapatkan skor seperti:
-15.03003978729248