KenLM ทำการปรับให้เรียบของ Kneser Ney ที่ได้รับการแก้ไขโดยสอดแทรกเพื่อประเมินความน่าจะเป็นแบบ n-gram
ก่อนที่จะติดตั้งชุดเครื่องมือ KenLM คุณควรติดตั้งการขึ้นต่อกันทั้งหมดซึ่งสามารถพบได้ในการขึ้นต่อกันของ kenlm
สำหรับ Debian/Ubuntu distro :
หากต้องการรับคอมไพเลอร์ที่ใช้งานได้ ให้ติดตั้งแพ็คเกจ build-essential
Boost เป็นที่รู้จักในชื่อ libboost-all-dev
ตัวเลือกการบีบอัดที่รองรับทั้งสามตัวเลือกมีแพ็คเกจ dev แยกกัน
$ 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 แล้ว ก่อนอื่นเรามาโคลน repo 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
คุณสามารถตรวจสอบไฟล์ arpa โดยใช้สิ่งที่ต้องการ less
หรือ more
(เช่น $ less bible.arpa
) ในตอนแรก ควรมี ส่วนข้อมูล ที่มีจำนวนยูนิแกรม บิ๊กแกรม และไตรแกรม ตามด้วยค่าประมาณ
ไฟล์ ARPA สามารถอ่านได้โดยตรง แต่รูปแบบไบนารี่จะโหลดเร็วกว่ามากและให้ความยืดหยุ่นมากกว่า การใช้รูปแบบไบนารี่จะช่วยลดเวลาในการโหลดลงอย่างมาก และยังแสดงตัวเลือกการกำหนดค่าเพิ่มเติมอีกด้วย ด้วยเหตุผลเหล่านี้ เราจะไบนาไรซ์โมเดลโดยใช้:
$ ./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