TF-NNLM-TK เป็นชุดเครื่องมือที่เขียนใน Python3 สำหรับการสร้างแบบจำลองภาษาเครือข่ายประสาทโดยใช้ TensorFlow มันมีโมเดลพื้นฐานเช่น RNNs และ LSTMS รวมถึงรุ่นขั้นสูงมากขึ้น มันมีฟังก์ชั่นการประมวลผลข้อมูลล่วงหน้าฝึกอบรมแบบจำลองและประเมินผล Toolkit เป็นโอเพ่นซอร์สภายใต้ใบอนุญาต Apache 2
ปัจจุบันรองรับรุ่นต่อไปนี้:
แรกติดตั้ง Python และ Tensorflow รหัสถูกทดสอบด้วย Python 3 และ TensorFlow 1.8
สำหรับตัวอย่างแรกนี้เราต้องดาวน์โหลดชุดเครื่องมือและข้อมูลการฝึกอบรมบางอย่าง เราจะใช้ชุดข้อมูล PTB ที่มีให้ในบทช่วยสอนของ Tomas Mikolov สำหรับสิ่งนี้คุณสามารถเรียกใช้รหัสต่อไปนี้ในบรรทัดคำสั่งของคุณ:
git clone git clone https://github.com/uds-lsv/TF-NNLM-TK.git
cd TF-NNLM-TK
wget http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz
tar -xzf simple-examples.tgzจากนั้นเพื่อฝึกอบรมและประเมินรูปแบบภาษาประสาทที่เรียบง่ายเป็นครั้งแรกเพียงเรียกใช้รหัสต่อไปนี้
python train_basic_rnn_models.py --save_dir=small_lstm --model=lstm --train_file=simple-examples/data/ptb.train.txt --test_file=simple-examples/data/ptb.test.txt
python test.py --model_file=small_lstm/model.ckpt --test_file=simple-examples/data/ptb.test.txtการฝึกอบรมใช้เวลาประมาณ 20 นาทีใน GTX 1050Ti GPU
สคริปต์การฝึกอบรมเรียกรหัสการประมวลผลข้อมูลแล้ว หากคุณใช้ข้อมูลเริ่มต้นคุณอาจข้ามส่วนนี้
ชุดเครื่องมือมีตัวประมวลผลข้อมูลซึ่งอ่านไฟล์ข้อความและสร้างจากสองอาร์เรย์ (numpy) ที่เก็บแบทช์ของคำอินพุต (ประวัติ) และคำเป้าหมาย (การทำนาย) รหัสนี้ยังมีเครื่องมือที่เป็นประโยชน์สองสามอย่างเช่นฟังก์ชั่นเพื่อสร้างและบันทึกคำศัพท์เพื่อสร้างการนับหรือทำแผนที่คำ OOV ในไฟล์ทดสอบลงในโทเค็นที่ไม่รู้จัก
ส่วนนี้ของรหัสนี้ไม่มีฟังก์ชั่นหลัก แต่จะถูกเรียกโดยตรงในรหัส Python ของสคริปต์การฝึกอบรม ตัวอย่างเช่นคุณสามารถโทรใน Python
DataProcessor ( train_file , batch_size , seq_length , True , '<unk>' , history_size = history_size )ตัวอย่างรหัสนี้จะใช้ Train_File ทำการแปลงที่อธิบายไว้ข้างต้นและสร้างแบตช์จากมันโดยใช้พารามิเตอร์ที่กำหนด
TF-NNLM-TK ให้รหัสการฝึกอบรมสำหรับโมเดลภาษาประสาทต่อไปนี้:
สิ่งเหล่านี้เป็นที่รู้จักและใช้โดยทั่วไป โดยเฉพาะอย่างยิ่งชุดเครื่องมือนี้ใช้ Vanilla-RNN, LSTM, LSTM พร้อมการฉายและ GRU โมเดลเหล่านี้สามารถผ่านการฝึกอบรมโดยใช้สคริปต์ train_basic_rnn_models.py (ดูตัวอย่างด้านล่าง)
โมเดลเหล่านี้ใช้มากกว่า n คำจากประวัติศาสตร์แทนที่จะเป็นคนสุดท้าย การใช้งานมีสามโมเดล: SRNN ที่ขึ้นกับคำศัพท์ (WD-SRNN), SRNN ที่ไม่ขึ้นกับคำ (WI-SRNN) และการลืม SRNN (FF-SRNN) ข้อมูลเพิ่มเติมเกี่ยวกับโมเดลเหล่านี้สามารถดูได้ที่นี่ โมเดลเหล่านี้สามารถผ่านการฝึกอบรมได้โดยใช้สคริปต์ train_srnn.py
โมเดลเหล่านี้ใช้สองรัฐในท้องถิ่นและทั่วโลกเพื่อเรียนรู้การพึ่งพาระยะสั้นและระยะยาวแยกกัน การใช้งาน TF แบบแบ่งส่วนของการแพร่กระจายกลับทำให้โมเดลนี้ต้องทนทุกข์ทรมานอย่างมากจากการไล่ระดับสีที่หายไปในสถานะท้องถิ่นซึ่งใช้โมเดลวานิลลา-RNN ดังนั้นหลังจะถูกแทนที่ (ชั่วคราวโดย GRU) ข้อมูลเพิ่มเติมเกี่ยวกับรุ่นนี้สามารถดูได้ที่นี่ รุ่นนี้สามารถฝึกอบรมได้โดยใช้สคริปต์ train_lsrc.py
แต่ละสคริปต์การฝึกอบรมเหล่านี้ (train_basic_rnn_models.py, train_srnn.py และ train_lsrc.py) มีพารามิเตอร์จำนวนมากแต่ละตัวมีคำอธิบายที่แนบมา เพื่อให้ได้คำอธิบายนี้เรียกใช้ตัวอย่างเช่นในบรรทัดคำสั่งของคุณ:
python train_basic_rnn_models.py --helpพารามิเตอร์เริ่มต้นของทุกรุ่นพยายามจับคู่การกำหนดค่าขนาดเล็กที่รายงานในสูตร TensorFlow PTB-LM:
| การกำหนดค่า | ยุค | รถไฟ | ถูกต้อง | ทดสอบ |
|---|---|---|---|---|
| เล็ก | 13 | 37.99 | 121.39 | 115.91 |
| ปานกลาง | 39 | 48.45 | 86.16 | 82.07 |
| ใหญ่ | 55 | 37.87 | 82.62 | 78.29 |
ในการทำซ้ำตัวเลขเหล่านี้ด้วยโมเดล LSTM (จริง ๆ แล้วตัวเลขที่ดีกว่าเนื่องจากการเริ่มต้นของซาเวียร์) ให้เรียกใช้ (ปรับเส้นทางไปยังข้อมูลไปยังการตั้งค่าของคุณ):
python train_basic_rnn_models.py --save_dir=small_lstm --model=lstm --train_file=path/to/data/train.txt --test_file=path/to/data/test.txtการโทรนี้จะฝึกอบรมโมเดล LSTM บนข้อมูล PTB โดยใช้การกำหนดค่าเดียวกันกับที่ใช้ในสูตร TensorFlow หากคุณต้องการเรียกใช้โมเดลด้วยการกำหนดค่าขนาดกลางคุณจะต้องตั้งค่าพารามิเตอร์เป็นค่าที่ระบุในการกำหนดค่าสื่อ:
python train_basic_rnn_models.py --init_scale=0.05 --seq_length=35 --embed_size=650 --hidden_size=650 --max_epoch=6 --num_epochs=39 --decay_rate=0.8 --batch_size=20 --input_keep_prob=0.5 --output_keep_prob=0.5 --model=lstm --save_dir=medium_lstm --train_file=path/to/data/train.txt --test_file=path/to/data/test.txtแนวคิดเดียวกันนี้ใช้กับโมเดลขั้นสูงมากขึ้นยกเว้นว่าคุณต้องเรียกสคริปต์การฝึกอบรมที่เกี่ยวข้องและคุณอาจต้องปรับพารามิเตอร์เล็กน้อย ลองตัวอย่าง:
python train_srnn.py --model=wi-srnn --input_keep_prob=0.6 --save_dir=wisrnn_small_5gram --train_file=path/to/data/train.txt --test_file=path/to/data/test.txt ในการฝึกอบรมโมเดล WISRNN ด้วยการกำหนดค่าเริ่มต้นยกเว้นการดรอปเอาต์การฝังคำซึ่งตั้งค่าเป็น 0.4 (1-0.6) สิ่งนี้ควรนำไปสู่ประสิทธิภาพของ ~ 109.5 ในชุดข้อมูลตัวอย่างจากด้านบน
ในทำนองเดียวกันโมเดล LSRC ได้รับการฝึกฝนโดยใช้สคริปต์ที่เกี่ยวข้อง:
python train_lsrc.py --save_dir=lsrc_small --train_file=path/to/data/train.txt --test_file=path/to/data/test.txt สคริปต์ยังอนุญาตให้แก้ไขการฝึกอบรมโดยการตั้งค่าพารามิเตอร์ที่เกี่ยวข้อง ใช้ -ช่วยเหลือเพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับพวกเขา
สคริปต์ทดสอบเหมือนกันสำหรับทุกรุ่น คุณจะต้องระบุเส้นทางไปยังโมเดลที่คุณต้องการประเมินและเส้นทางไปยังไฟล์ทดสอบของคุณ ในการประเมินโมเดล LSTM ขนาดเล็กที่เราฝึกฝนไว้ข้างต้นเราเพียงแค่ต้องเรียกใช้คำสั่งต่อไปนี้:
python test.py --model_file=small_lstm/model.ckpt --test_file=path/to/data/test.txt สคริปต์ยังมีพารามิเตอร์อื่น ๆ อีกสองสามตัวเพื่อควบคุมความเร็วในกรณีที่คุณทดสอบคลังข้อมูลขนาดใหญ่มาก
ชุดเครื่องมือนี้ได้รับการพัฒนาโดย Youssef Oualil ในช่วงเวลาที่เขาอยู่ที่ LSV, Saarland University ปัจจุบันมันเป็น mantained ที่กลุ่ม LSV โดย Michael A. Hedderich ด้วยการบริจาคโดย Adam Kusmirek งานนี้ได้รับเงินทุนบางส่วนโดย SFB 1102
รหัสนี้ได้รับอนุญาตภายใต้ Apache 2.0 บางส่วนของรหัสนี้ขึ้นอยู่กับสูตร TensorFlow PTB-LM ที่ได้รับอนุญาตภายใต้ใบอนุญาต Apache, เวอร์ชัน 2.0 โดยผู้เขียน TensorFlow โปรดดูไฟล์ใบอนุญาตสำหรับรายละเอียด
หากคุณใช้ชุดเครื่องมือนี้เป็นส่วนหนึ่งของสิ่งพิมพ์โปรดพิจารณาอ้างเรา:
@inproceedings{oualil-singh-greenberg-klakow:EMNLP2016,
author = {Oualil, Youssef and Singh, Mittul and Greenberg, Clayton and Klakow, Dietrich},
title = {Long-Short Range Context Neural Networks for Language Modeling},
booktitle = {{EMNLP} 2016, Proceedings of the 2016 Conference on Empirical Methods in Natural Language Processing},
day = {3},
month = {November},
year = {2016},
address = {Austin, Texas},
publisher = {Association for Computational Linguistics},
pages = {1473--1481},
url = {http://aclweb.org/anthology/D16-1154.pdf},
poster = {http://coli.uni-saarland.de/~claytong/posters/EMNLP16_Poster.pdf}
}
หรือ
@inproceedings{oualil-greenberg-singh-klakow:2016:IS,
author = {Youssef Oualil and Clayton Greenberg and Mittul Singh and Dietrich Klakow},
title = {Sequential Recurrent Neural Networks for Language Modeling},
day = {12},
month = {September},
year = 2016,
address = {San Francisco, California, USA},
booktitle = {{INTERSPEECH} 2016, Proceedings of the 17th Annual Conference of the International Speech Communication Association},
doi = {10.21437/Interspeech.2016-422},
url = {http://www.isca-speech.org/archive/Interspeech_2016/pdfs/0422.PDF},
pages = {3509--3513},
publisher = {{ISCA}}
}