NLP للإنسان. مجموعة أدوات معالجة اللغة الطبيعية (NLP) سريعة وسهلة الاستخدام ، مما يرضي خيالك حول NLP.
→ النسخة الإنجليزية

مقدمة أساسية • التثبيت • دليل البدء • برنامج تعليمي مفصل • تكريم • كيفية المساهمة في رمز • اقتباسات • شكر وتقدير
Fancy-NLP هي أداة للتعدين المعرفة النصية لبناء صور المنتجات التي تم بناؤها بواسطة فريق استراتيجية إعلان منتج Tencent. وهو يدعم مجموعة متنوعة من مهام NLP الشائعة مثل استخراج الكيان وتصنيف النص ومطابقة تشابه النص. بالمقارنة مع الأطر الحالية التي تستخدم بشكل شائع في الصناعة ، يمكن أن تدعم المستخدمين لتنفيذ التنفيذ الوظيفي السريع: لا يمكن فقط تلبية التخصيص العميق للنماذج من قبل المستخدمين المتقدمين ، ولكن أيضًا يسمح للمستخدمين العاديين باستخدام النماذج المدربة مسبقًا بسرعة لممارسة الممارسة الوظيفية بسرعة. في سيناريو أعمال الإعلان الحالي عن المنتج ، نستخدم هذه الأداة لاستكشاف خصائص بيانات المنتجات الضخمة بسرعة ، وبالتالي دعم الوحدات النمطية مثل توصيات المنتجات الإعلانية.
تتمثل النية الأصلية للمشروع في توفير مجموعة من أدوات NLP سهلة الاستخدام ، والتي تهدف مباشرة إلى سيناريوهات الاستخدام وتلبية احتياجات المستخدمين لمهام NLP ، بحيث لا يحتاج المستخدمون إلى التعامل مع المعالجة المسبقة المعقدة والعمليات الوسيطة الأخرى ، وإكمال مهام NLP المتعددة مباشرة لنص اللغة الطبيعية للمدخلات ، وتحقيق ما يعتقدون أنهم يحصلون عليه!
ما هو الهوى؟ بالنسبة للعديد من مهام NLP الحالية ، مثل التعرف على الكيانات المسماة (NER) ، وتصنيف النص ، ومطابقة تشابه النص (مطابقة زوج الجملة (SPM) ، تم تصميم معظم الأدوات لصالح التدريب والتقييم النموذجي. عندما يرغب المستخدمون العاديون في تطبيق هذه النماذج على السيناريوهات الفعلية ، فإنهم يحتاجون غالبًا إلى أداء المعالجة المسبقة المعقدة وتشكيلاتها ، والتي في كثير من الأحيان لا تتناسب معها من خلال التنفيذ من قبل المستخدمين. معالجة كل رابط لمهمة NLP في Fancy-NLP ، وتطبيق النموذج بكفاءة على سيناريوهات الطلب الفعلي.
يتم دعم Fancy-NLP حاليًا للاستخدام في بيئات Python 3 وتم اختباره بالكامل في Python 3.6. يعتمد TensorFlow 2.x تمامًا على الإصدار الحالي. إذا كان لديك أي مخاوف بشأن توافق الوحدة النمطية ، فإننا نوصي باستخدام VirtualEnV لإنشاء بيئة افتراضية لاستخدام هذه الأداة.
يدعم Fancy-NLP التثبيت بنقرة واحدة باستخدام pip :
pip install fancy-nlpفي دليل البدء ، سوف نستخدم النماذج المدربة مسبقًا لنأخذك لفهم وتجربة الوظائف الأساسية لـ Fancy-NLP.
ملاحظة: سنستمر في تحسين نموذج التعرف على الكيان لسيناريوهات متعددة (بيانات مشروحة مختلفة) للمستخدمين لاستخدامها مباشرة. إذا كان لديك مجموعات بيانات ذات صلة ، فنحن نرحب أيضًا بمنحنا ملاحظات إيجابية في هذه المشكلة.
يمكن للإصدار الحالي من Fancy-NLP تحميل نموذج NER المدربين باستخدام بيانات مجموعة MSRA NER بشكل افتراضي. يمكن أن تحدد الهياكل التنظيمية (ORG) والمواقع (LOCs) والكيانات (PER) في النص الصيني. النموذج الأساسي الذي تم تحميله افتراضيًا هو للمستخدمين تجربة مباشرة. إذا كنت ترغب في استخدام النموذج المخصص الخاص بك مباشرة ، فيمكنك الرجوع إلى المقدمة في البرنامج التعليمي التفصيلي اللاحق لإنشاء نظام استخراج الكيان الخاص بك.
> >> from fancy_nlp . applications import NER
> >> ner_app = NER ()عند تشغيل الكود أعلاه لأول مرة ، سيتم تنزيل نموذج NER المدرب مسبقًا من السحابة.
> >> ner_app . analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '上海市' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 6 ,
'endOffset' : 9 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} > >> ner_app . restrict_analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} >>> ner_app.predict('同济大学位于上海市杨浦区,校长为陈杰')
['B-ORG',
'I-ORG',
'I-ORG',
'I-ORG',
'O',
'O',
'B-LOC',
'I-LOC',
'I-LOC',
'B-LOC',
'I-LOC',
'I-LOC',
'O',
'O',
'O',
'O',
'B-PER',
'I-PER']
يتم تحميل Fancy-NLP افتراضيًا مع نموذج تصنيف النص الذي تم تدريبه في مجموعة بيانات تصنيف عنوان الأخبار الصينية المنشورة حاليًا ، والتي يمكن أن تتوقع فئة الأخبار التي تنتمي إليها لنص عنوان الأخبار.
> >> from fancy_nlp . applications import TextClassification
> >> text_classification_app = TextClassification ()عند تشغيل البرنامج أعلاه لأول مرة ، سيتم تنزيل النموذج الذي تم تدريبه مسبقًا من السحابة.
> >> text_classification_app . predict ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
'科技' > >> text_classification_app . analyze ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
( '科技' , 0.9996544 )يتم تحميل Fancy-NLP افتراضيًا في نموذج مطابقة تشابه النص المدرب في مجموعة بيانات DataSing لخدمة خدمة العملاء المنشورة حاليًا ، والتي يمكن أن تتنبأ بما إذا كان يعبر عن نفس النية لأزواج النص المقدمة.
> >> from fancy_nlp . applications import SPM
> >> spm_app = SPM ()عندما تقوم بتشغيل البرنامج أعلاه لأول مرة ، سيتم تنزيل نموذج مطابقة تشابه النص المدرب مسبقًا من السحابة.
> >> spm_app . predict (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
'1' في نتيجة التنبؤ ، يمثل 1 نفس النية أو النص المشابه ، ويمثل 0 النية المختلفة أو النص المختلفة.
> >> spm_app . analyze (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
( '1' , array ([ 1.6599501e-09 , 1.0000000e+00 ], dtype = float32 ))في البرنامج التعليمي التفصيلي ، يمكنك تعلم كيفية استخدام Fancy-NLP لإنشاء نماذج مخصصة تلبي سيناريوهات مخصصة باستخدام مجموعات البيانات الخاصة بك ، ولديها فهم أكثر شمولاً لواجهة Fancy-NLP.
لتجربة البرنامج التعليمي التالي بالكامل ، تحتاج إلى تنزيل مجموعة البيانات ونموذج Bert الذي نستخدمه:
86geqk7e6rb7 يمكنك نقل البيانات التي تم تنزيلها إلى نفس مستوى دليل examples ، وهيكل الدليل النهائي كما يلي:
.
├── datasets
│ ├── ner
│ │ └── msra
│ │ ├── test_data
│ │ └── train_data
│ ├── spm
│ │ └── webank
│ │ ├── BQ_dev.txt
│ │ ├── BQ_test.txt
│ │ └── BQ_train.txt
│ └── text_classification
│ └── toutiao
│ ├── toutiao_cat_data.txt
│ └── toutiao_label_dict.txt
├── examples
│ ├── bert_combination.py
│ ├── bert_fine_tuning.py
│ ├── bert_single.py
│ ├── ner_example.py
│ ├── spm_example.py
│ └── text_classification_example.py
└── pretrained_embeddings
└── chinese_L-12_H-768_A-12
├── bert_config.json
├── bert_model.ckpt.data-00000-of-00001
├── bert_model.ckpt.index
├── bert_model.ckpt.meta
└── vocab.txt
حتى تتمكن من تشغيل برنامج العينة مباشرة. على سبيل المثال ، python examples/ner_example.py .
ما زلنا نستخدم بيانات المجموعة الفرعية MSRA NER المذكورة أعلاه كمثال لتقديم كيفية استخدام مجموعات البيانات الحالية لتدريب نموذج التعرف على الكيان الخاص بنا. للحصول على إصدار كامل من جميع قصاصات التعليمات البرمجية التالية ، يرجى الرجوع إلى examples/ner_example.py .
في Fancy-NLP ، تدعم تطبيقات التعرف على الكيانات استخدام تنسيقات مجموعة بيانات NER القياسية ، وكل حرف يتم تحديده ويتم فصل العلامة المقابلة لها بواسطة t ، ويتم فصل الجمل بخطوط فارغة. يمكن أن يكون تنسيق العلامة تنسيقًا قياسيًا شائعًا مثل BIO BIOES .
باستخدام الواجهة التي توفرها Fancy-NLP ، يمكننا تحميل مجموعة البيانات مباشرة ومعالجتها بالتنسيق المطلوب من قبل النموذج.
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' ) load_ner_data_and_labels ينفذ تحميل فعال لمجموعات بيانات NER. يمكنك استخدام مسار الملف مباشرة للبيانات (مجموعة التدريب أو مجموعة التحقق من الصحة أو مجموعة الاختبار) ليتم تحميلها كمعلمات. يتم استخدام مجموعة الاختبار كمجموعة التحقق من الصحة. في المهام الفعلية ، يجب أن يكون لديك مجموعات التحقق من الصحة المستقلة ومجموعات الاختبار للحصول على نتائج تقييم اختبار قيمة.
بعد الحصول على بيانات صالحة ، يمكن لتطبيق NER البدء في تدريب النموذج مباشرة.
checkpoint_dir = 'pretrained_models'
model_name = 'msra_ner_bilstm_cnn_crf'
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
load_swa_model = True ) بالنسبة للواجهة fit لتطبيق NER ، تحتاج إلى تمرير عينات مجموعة التدريب ومجموعة الصحة التي تمت معالجتها من قبل. معاني المعلمات المتبقية هي كما يلي:
ner_model_type : يشير إلى اسم النموذج المراد استخدامه. في هذا المثال ، يتم استخدام نموذج bilstm_cnn ؛char_embed_trainable : ما إذا كانت طبقة ناقلات الكلمة يمكن أن تكون ضبطًا جيدًا. في هذا المثال ، تم ضبطه على True ، مما يشير إلى أنه يمكن تنفيذ الضبط ؛callback_list : اسم وظيفة رد الاتصال التي يجب استخدامها. وظائف رد الاتصال المستخدمة في هذا المثال هي:modelcheckpoint : استخدم وظيفة نقطة التفتيش النموذج. بعد كل تكرار ، احفظ النموذج المدرب ؛earlystopping : استخدم وظيفة الإيقاف المبكر. إذا لم يتحسن أداء النموذج بعد التكرارات المستديرة (N = 5) ، فسيتم إنهاء التدريب ؛swa : SWA تعني متوسط الوزن العشوائي ، وهي استراتيجية شائعة لتكامل النماذج التي يمكن أن تحسن بشكل فعال من أداء النموذج. لمزيد من التفاصيل ، يرجى الرجوع إلى المقدمة في الورقة الأصلية ؛checkpoint_dir : مسار الدليل لحفظ ملف النموذج ؛model_name : اسم ملف ملف النموذج ؛load_swa_model : ما إذا كنت تريد تحميل وزن نموذج SWA بعد تدريب النموذج. تعيين إلى True هنا ، مع الإشارة إلى استخدام نموذج SWA ؛ test_data , test_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . score ( test_data , test_labels ) هنا ، لا يزال يستخدم load_ner_data_and_labels لمعالجة بيانات مجموعة الاختبار. بعد الحصول على تنسيق بيانات صالح ، استخدم واجهة score لتطبيق NER للحصول على درجة النموذج في مجموعة الاختبار.
بعد تدريب النموذج ، يجب حفظ جميع الملفات المتعلقة بالنماذج المطلوبة من قبل المهمة لتسهيل استخدام النماذج التي تم تدريبها الفاخرة في التطبيقات الخارجية الأخرى.
import os
ner_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) يمكن استخدام واجهة save تطبيق NER لاستمرار ملف بنية النموذج (JSON) وملف الوزن (HDF5) والنتائج المتعلقة بالمعالجة المسبقة (Pickle):
modelcheckpoint ؛ ner_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) في هذا الوقت ، لدى ner_app بالفعل القدرة على التنبؤ بالعينات ، ويمكنك إكمال وظائف التنبؤ ذات الصلة المذكورة في الدليل التمهيدي . على سبيل المثال ، analyze ، restrict_analyze .
ما زلنا نستخدم مجموعة بيانات تصنيف عنوان الأخبار الصينية المذكورة أعلاه كمثال لتقديم كيفية استخدام مجموعة البيانات الحالية لتدريب نموذج تصنيف النص لدينا. للحصول على إصدار كامل من جميع مقتطفات التعليمات البرمجية التالية ، يرجى الرجوع إلى examples/text_classification_example.py .
في Fancy-NLP ، تدعم تطبيقات التصنيف النصية تنسيقات مجموعة البيانات مفصولة بواسطة محددات ثابتة باستخدام النص الأصلي. يمكن أن يكون لديهم أعمدة زائدة مستقلة عن مهام تصنيف النص. يحتاجون فقط إلى التأكد من أن كل من عمود التسمية وعمود نص الإدخال في موضع ثابت موحد.
بالإضافة إلى ذلك ، بالنسبة لعلامات التصنيف ، يلزم أيضًا ملف تعيين العلامات ومعرفات العلامات ، والذي يتكون من عمودين: العمود الأول هو الاسم الأصلي للعلامة في مجموعة البيانات ، وعادة ما يكون بعض المعرفات المشفرة ؛ العمود الثاني هو الاسم القابل للقراءة المقابل للاسم الأصلي للعلامة. سيتم استخدام مراسلات هذا الملف لإخراج أسماء التسمية القابلة للقراءة مباشرة عند التنبؤ بالنموذج.
باستخدام الواجهة التي توفرها Fancy-NLP ، يمكننا تحميل مجموعة البيانات مباشرة ومعالجتها بالتنسيق المطلوب من قبل النموذج.
from fancy_nlp . applications import TextClassification
text_classification_app = TextClassification ( use_pretrained = False )
data_file = 'datasets/text_classification/toutiao/toutiao_cat_data.txt'
from fancy_nlp . utils import load_text_classification_data_and_labels
train_data , train_labels , valid_data , valid_labels , test_data , test_labels =
load_text_classification_data_and_labels ( data_file ,
label_index = 1 ,
text_index = 3 ,
delimiter = '_!_' ,
split_mode = 2 ,
split_size = 0.3 ) load_ner_data_and_labels ينفذ تحميل فعال لمجموعات بيانات تصنيف النص. يمكنك استخدام مسار الملف مباشرة للبيانات (مجموعة التدريب أو مجموعة التحقق من الصحة أو مجموعة الاختبار) ليتم تحميلها كمعلمات. يتم استخدام البيانات الكاملة هنا لتقسيم مجموعة التدريب ومجموعة التحقق من الصحة ومجموعة الاختبار. بالإضافة إلى ملف البيانات ، فإن المعنى المحدد للمعلمات المتبقية أعلاه هو:
label_index : موضع علامة التصنيف في ملف البيانات (يبدأ رقم الموضع من 0) ؛text_index : موقع النص المراد تصنيفه في ملف البيانات ؛delimiter : الفاصل بين أعمدة ملف البيانات ؛split_mode : يشير إلى كيفية تقسيم البيانات الأصلية عن طريق تغيير المعلمات. في:split_size : نسبة تقسيم البيانات. عند split_mode=1 ، فهذا يعني أن البيانات التي تقسم نسبة split_size من البيانات الأصلية سيتم استخدامها كمجموعة التحقق ؛ عند split_mode=2 ، فهذا يعني أن البيانات التي تقسم نسبة split_size من البيانات الأصلية سيتم استخدامها كمجموع مجموعة التحقق ومجموعة الاختبار ، ونسب مجموعة التحقق ومجموعة الاختبار لكل حساب. بعد الحصول على بيانات صالحة ، يمكن أن يبدأ تطبيق تصنيف النص في تدريب النموذج مباشرة.
dict_file = 'datasets/text_classification/toutiao/toutiao_label_dict.txt'
model_name = 'toutiao_text_classification_cnn'
checkpoint_dir = 'pretrained_models'
text_classification_app . fit (
train_data , train_labels , valid_data , valid_labels ,
text_classification_model_type = 'cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
label_dict_file = dict_file ,
max_len = 60 ,
load_swa_model = True ) بالنسبة للواجهة fit لتطبيق تصنيف النص ، تحتاج إلى تمرير عينات مجموعة التدريب وعينات تحديد الصحة التي تمت معالجتها من قبل. معاني المعلمات المتبقية هي كما يلي:
text_classification_model_type : يشير إلى اسم النموذج المراد استخدامه. في هذا المثال ، يتم استخدام نموذج cnn ؛char_embed_trainable : ما إذا كانت طبقة ناقلات الكلمة يمكن أن تكون ضبطًا جيدًا. في هذا المثال ، تم ضبطه على True ، مما يشير إلى أنه يمكن تنفيذ الضبط ؛callback_list : اسم وظيفة رد الاتصال التي يجب استخدامها. وظائف رد الاتصال المستخدمة في هذا المثال هي:modelcheckpoint : استخدم وظيفة نقطة التفتيش النموذج. بعد كل تكرار ، احفظ النموذج المدرب ؛earlystopping : استخدم وظيفة الإيقاف المبكر. إذا لم يتحسن أداء النموذج بعد التكرارات المستديرة (N = 5) ، فسيتم إنهاء التدريب ؛swa : SWA تعني متوسط الوزن العشوائي ، وهي استراتيجية شائعة لتكامل النماذج التي يمكن أن تحسن بشكل فعال من أداء النموذج. لمزيد من التفاصيل ، يرجى الرجوع إلى المقدمة في الورقة الأصلية ؛checkpoint_dir : مسار الدليل لحفظ ملف النموذج ؛model_name : اسم ملف ملف النموذج ؛label_dict_file : ملف قاموس التسمية ، والذي يتكون من عمودين: العمود الأول هو الاسم الأصلي للتسمية في مجموعة البيانات ، وعادة ما يكون بعض المعرفات المشفرة ؛ العمود الثاني هو الاسم القابل للقراءة المقابل للاسم الأصلي للتسمية ؛max_len : للحصول على الحد الأقصى للطول المحتفظ به بواسطة نص الإدخال ، سيتم اقتطاع النص وراء هذا الطول ؛load_swa_model : ما إذا كنت تريد تحميل وزن نموذج SWA بعد تدريب النموذج. تعيين إلى True هنا ، مع الإشارة إلى استخدام نموذج SWA ؛ text_classification_app . score ( test_data , test_labels ) يمكنك هنا استخدام واجهة score مباشرة لتطبيق تصنيف النص للحصول على درجة النموذج في مجموعة الاختبار.
بعد تدريب النموذج ، يجب حفظ جميع الملفات المتعلقة بالنماذج المطلوبة من قبل المهمة لتسهيل استخدام النماذج التي تم تدريبها الفاخرة في التطبيقات الخارجية الأخرى.
import os
text_classification_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) يمكن استخدام واجهة save تطبيقات تصنيف النص لاستمرار ملف بنية النموذج (JSON) وملف الوزن (HDF5) والنتائج المتعلقة بالمعالجة المسبقة (Pickle):
modelcheckpoint . text_classification_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) في هذا الوقت ، لدى text_classification_app بالفعل القدرة على التنبؤ بالعينات ، ويمكنك إكمال وظائف التنبؤ ذات الصلة المذكورة في الدليل التمهيدي . على سبيل المثال ، predict ، analyze .
ما زلنا نستخدم مجموعة بيانات مواجهة أسئلة خدمة خدمة عملاء Webank المذكورة أعلاه كمثال لتقديم كيفية استخدام مجموعة البيانات الحالية لتدريب نموذج مطابقة تشابه النص لدينا. للحصول على إصدار كامل من جميع قصاصات التعليمات البرمجية التالية ، يرجى الرجوع إلى examples/spm_example.py .
في Fancy-NLP ، يدعم تطبيق مطابقة تشابه النص استخدام النص الأصلي في تنسيق مجموعة بيانات مفصولة بـ t ، والذي يتكون من ثلاثة أعمدة: العمود الأول والعمود الثاني عبارة عن مجموعة من أزواج النص على التوالي ؛ العمود الثالث هو تسمية عينة ، 1 يعني أن دلالات النص متشابهة ، و 0 يعني التباين.
باستخدام الواجهة التي توفرها Fancy-NLP ، يمكننا تحميل مجموعة البيانات مباشرة ومعالجتها بالتنسيق المطلوب من قبل النموذج.
from fancy_nlp . applications import SPM
spm_app = applications . SPM ( use_pretrained = False )
train_file = 'datasets/spm/webank/BQ_train.txt'
valid_file = 'datasets/spm/webank/BQ_dev.txt'
from fancy_nlp . utils import load_spm_data_and_labels
train_data , train_labels = load_spm_data_and_labels ( train_file )
valid_data , valid_labels = load_spm_data_and_labels ( valid_file ) يحمل load_spm_data_and_labels تحميل فعال لمجموعات بيانات مطابقة تشابه النص. يمكنك استخدام مسار الملف مباشرة للبيانات (مجموعة التدريب أو مجموعة التحقق من الصحة أو مجموعة الاختبار) ليتم تحميلها كمعلمات.
بعد الحصول على بيانات صالحة ، يمكن أن يبدأ تطبيق مطابقة تشابه النص في تدريب النموذج مباشرة.
model_name = 'spm_siamese_cnn'
checkpoint_dir = 'pretrained_models'
spm_app . fit ( train_data , train_labels , valid_data , valid_labels ,
spm_model_type = 'siamese_cnn' ,
word_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
max_len = 60 ,
load_swa_model = True ) بالنسبة لواجهة fit تطبيق تشابه النص ، تحتاج إلى تمرير عينات مجموعة التدريب والتحقق التي تمت معالجتها من قبل. معنى المعلمات المتبقية كما يلي:
spm_model_type : يشير إلى اسم النموذج المراد استخدامه. في هذا المثال ، يتم استخدام نموذج siamese_cnn ؛word_embed_trainable : ما إذا كانت طبقة ناقلات الكلمة يمكن أن تكون ضبطًا جيدًا. في هذا المثال ، تم ضبطه على True ، مما يشير إلى أنه يمكن تنفيذ الضبط ؛callback_list : اسم وظيفة رد الاتصال التي يجب استخدامها. وظائف رد الاتصال المستخدمة في هذا المثال هي:modelcheckpoint : استخدم وظيفة نقطة التفتيش النموذج. بعد كل تكرار ، احفظ النموذج المدرب ؛earlystopping : استخدم وظيفة الإيقاف المبكر. إذا لم يتحسن أداء النموذج بعد التكرارات المستديرة (N = 5) ، فسيتم إنهاء التدريب ؛swa : SWA تعني متوسط الوزن العشوائي ، وهي استراتيجية شائعة لتكامل النماذج التي يمكن أن تحسن بشكل فعال من أداء النموذج. لمزيد من التفاصيل ، يرجى الرجوع إلى المقدمة في الورقة الأصلية ؛checkpoint_dir : مسار الدليل لحفظ ملف النموذج ؛model_name : اسم ملف ملف النموذج ؛max_len : للحصول على الحد الأقصى للطول المحتفظ به بواسطة نص الإدخال ، سيتم اقتطاع النص وراء هذا الطول ؛load_swa_model : ما إذا كنت تريد تحميل وزن نموذج SWA بعد تدريب النموذج. تعيين إلى True هنا ، مع الإشارة إلى استخدام نموذج SWA ؛ test_file = 'datasets/spm/webank/BQ_test.txt'
test_data , test_labels = load_spm_data_and_labels ( test_file )
spm_app . score ( test_data , test_labels ) يمكنك هنا استخدام واجهة score تطبيق تشابه النص مباشرة للحصول على درجة النموذج في مجموعة الاختبار.
بعد تدريب النموذج ، يجب حفظ جميع الملفات المتعلقة بالنماذج المطلوبة من قبل المهمة لتسهيل استخدام النماذج التي تم تدريبها الفاخرة في التطبيقات الخارجية الأخرى.
import os
spm_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) يمكن استخدام واجهة save تطبيق مطابقة تشابه النص لاستمرار ملف بنية النموذج (JSON) وملف الوزن (HDF5) والنتائج المتعلقة بالمعالجة المسبقة (Pickle):
modelcheckpoint . spm_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) في هذا الوقت ، لدى spm_app بالفعل القدرة على التنبؤ بالعينات ، ويمكنك الاستمرار في إكمال وظائف التنبؤ ذات الصلة المذكورة في الدليل التمهيدي . على سبيل المثال ، predict ، analyze .
يوفر Facny-NLP طرقًا مختلفة لاستخدام نموذج BERT :
لاستخدام BERT في Fancy-NLP ، تحتاج فقط إلى تنزيل نموذج BERT الذي تم تدريبه مسبقًا (مثل نموذج BERT الصيني الذي توفره Google ، ونموذج ERNIE الذي توفره BAIDU (رمز الاستخراج: IQ74) ، ونموذج Bert-WWM الذي يوفره معهد هاربين للتكنولوجيا). بعد ذلك ، يمكنك تمرير مسار ملف المفردات الخاص بنموذج BERT وملف التكوين وملف النموذج إلى طريقة fit للتطبيق ذي الصلة. فيما يلي مثال على تطبيق التعرف على الكيان. للحصول على رمز المثال الكامل ، يرجى الرجوع إلى examples/bert_fine_tuning.py ، examples/bert_single.py ، examples/bert_combination.py .
لاحظ أنه لا يمكن استخدام نموذج BERT إلا مع ناقلات الأحرف ، وليس مع متجهات الكلمات.
import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bert' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bert_crf' ,
load_swa_model = True )في مقتطف الرمز أعلاه ، من المهم ملاحظة:
ner_model_type : اضبط نوع النموذج على bert ؛use_char : قم بتعيين عدم استخدام ناقلات مستوى الأحرف ؛use_word : تعيين عدم استخدام ناقلات مستوى الكلمات كمدخلات مساعدة ؛use_bert : عند صقل نموذج Bert ، قم بتعيين لاستخدام إدخال Bert فقط ، ؛bert_vocab_file ، bert_config_file ، bert_checkpoint_file : المسار إلى الملفات المتعلقة بنموذج BERTbert_trainable : اضبط معلمات نموذج BERT على الحالة القابلة للتدريب ، أي التثبيت ؛optimizer : اضبط المحسن لطراز Bert. عند ضبط نموذج BERT ، يجب ضبط معدل التعلم للمحسّن على مستوى أصغر. from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = False ,
optimizer = 'adam' ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_bert_crf' ,
load_swa_model = True )في مقتطف الرمز أعلاه ، من المهم ملاحظة:
ner_model_type : قم بتعيين نوع النموذج على bilstm_cnn ، ويجب استخدام نموذج غير Bert هنا ؛use_char : قم بتعيين عدم استخدام ناقلات مستوى الأحرف ؛use_word : تعيين عدم استخدام ناقلات مستوى الكلمات كمدخلات مساعدة ؛use_bert : تعيين لاستخدام ناقلات Bert فقط كمدخل ميزة ؛bert_vocab_file ، bert_config_file ، bert_checkpoint_file : المسار إلى الملفات المتعلقة بنموذج BERTbert_trainable : اضبط معلمة نموذج BERT على حالة لا يمكن تجويفها ، ومن الممكن أيضًا تعيينها على True هنا ؛optimizer : اضبط المحسن. إذا كان نموذج BET قابلًا للتدريب ، فمن المستحسن ضبط معدل التعلم للمُحسّن إلى معاملة أصغر. import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = True ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_char_bert_crf' ,
load_swa_model = True )في مقتطف الرمز أعلاه ، من المهم ملاحظة:
ner_model_type : قم بتعيين نوع النموذج على bilstm_cnn ، ويجب استخدام نموذج غير Bert هنا ؛use_char : قم بتعيين ناقل مستوى استخدام حرف ؛use_word : تعيين عدم استخدام ناقلات مستوى الكلمات كمدخلات مساعدة ؛use_bert : اضبط استخدام متجه Bert ، والذي يجمع بين متجهات Word و Bert كمدخلات ميزة ؛bert_vocab_file ، bert_config_file ، bert_checkpoint_file : المسار إلى الملفات المتعلقة بنموذج BERTbert_trainable : اضبط معلمات نموذج BERT على الحالة القابلة للتدريب ، ومن الممكن أيضًا تعيينها على False هنا ؛optimizer : اضبط المحسن. إذا كان نموذج BET قابلًا للتدريب ، فمن المستحسن ضبط معدل التعلم للمُحسّن إلى معاملة أصغر. يجب على المطورين المهتمين بتحسين رمز NLP الفاخرة اتباع المواصفات التالية لتقديم طلبات السحب:
إذا كنت تستخدم NLP Fancy أثناء عملية البحث ذات الصلة ، فيمكنك إضافة ما يلي إلى قائمة الاقتباس
@misc{tencent2019fancynlp,
title={Fancy-NLP},
author={Li Yang and Shiyao Xu and Shijia E},
howpublished={ url {https://github.com/boat-group/fancy-nlp}},
year={2019}
}▴ العودة إلى الأعلى
هذا المشروع مستوحى من العديد من مشاريع مفتوحة المصادر ممتازة ، وخاصة كيراس. كما قال شعار كيراس: التعلم العميق للإنسان ، نأمل أن يكون NLP الهوى هو NLP للبشر ، وخاصة في المجال الصيني.