TF-NNLM-TK هي مجموعة أدوات مكتوبة في Python3 لنمذجة لغة الشبكة العصبية باستخدام TensorFlow. ويشمل النماذج الأساسية مثل RNNs و LSTMS وكذلك النماذج الأكثر تقدما. يوفر وظائف للمعالجة المسبقة للبيانات وتدريب النماذج وتقييمها. مجموعة الأدوات مفتوحة المصدر بموجب ترخيص 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.
تقوم البرامج النصية التدريبية بالفعل باستدعاء رمز معالجة البيانات. إذا كنت تستخدم البيانات الافتراضية ، فربما يمكنك تخطي هذا القسم.
تتضمن مجموعة الأدوات معالج بيانات ، يقرأ ملفًا نصيًا ويقوم بإنشاء صفائف (numpy) التي تخزن مجموعات كلمات الإدخال (التاريخ) والكلمات المستهدفة (التنبؤ). يوفر الرمز أيضًا بعض الأدوات المفيدة مثل الوظائف لإنشاء المفردات وحفظها ، لإنشاء تعدادات أو لرسم خريطة الكلمات في ملفات اختبار في رمز غير معروف.
هذا الجزء من الكود ليس لديه وظيفة رئيسية. بدلاً من ذلك ، يتم استدعاؤه مباشرة في رمز Python لنصوص التدريب. على سبيل المثال ، يمكنك الاتصال في Python
DataProcessor ( train_file , batch_size , seq_length , True , '<unk>' , history_size = history_size )سيأخذ مقتطف الرمز هذا القطار ، ويقوم بالتحولات الموضحة أعلاه ، وإنشاء دفعات منه باستخدام المعلمات المحددة.
يوفر 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 يسمح البرنامج النصي أيضًا بتعديل التدريب عن طريق تعيين المعلمات المقابلة. استخدم -help للحصول على مزيد من المعلومات عنها.
البرنامج النصي الاختبار هو نفسه لجميع النماذج. تحتاج فقط إلى تحديد المسار إلى النموذج الذي تريد تقييمه والمسار إلى ملف الاختبار الخاص بك. لتقييم نموذج LSTM الصغير الذي قمنا بتدريبه أعلاه ، نحتاج فقط إلى تشغيل الأمر التالي:
python test.py --model_file=small_lstm/model.ckpt --test_file=path/to/data/test.txt يوفر البرنامج النصي أيضًا بعض المعلمات الأخرى للتحكم في السرعة في حال كنت تختبر على مجموعة كبيرة جدًا.
تم تطوير مجموعة الأدوات هذه في الأصل من قبل Youssef Oualil ، خلال فترة وجوده في LSV ، جامعة سارلاند. يتم حاليًا في مجموعة LSV من قبل Michael A. Hedderich بمساهمات من قبل آدم كوسميرك. تم تمويل هذا العمل جزئيًا بواسطة 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}}
}