تنفيذ Pytorch للنماذج الخاصة بالورقة "مطابقة الفراغات: التشابه التوزيعي لتعلم العلاقة" المنشورة في ACL 2019.
ملاحظة: هذا ليس ريبوًا رسميًا للورقة.
نماذج إضافية لاستخراج العلاقة ، المنفذة هنا بناءً على منهجية الورقة:
لمزيد من التفاصيل المفاهيمية حول التنفيذ ، يرجى الاطلاع
إذا كنت تحب عملي ، فيرجى التفكير في الرعاية بالنقر فوق زر الراعي في الأعلى.
المتطلبات: بيثون (3.8+)
python3 -m pip install -r requirements.txt
python3 -m spacy download en_core_web_lg نماذج Bert التي تم تدريبها مسبقًا (Albert ، Bert) من باب المجاملة Huggingface.co (https://huggingface.co)
نموذج BioBert الذي تم تدريبه مسبقًا من باب المجاملة https://github.com/dmis-lab/biobert
لاستخدام BioBert (BioBert_v1.1_pubmed) ، قم بتنزيل وإلغاء ضغط النموذج من هنا إلى ./additional_models.
تشغيل main_pretraining.py مع الوسائط أدناه. يمكن أن تكون بيانات ما قبل التدريب أي ملف نصي مستمر .txt.
نستخدم Spacy NLP للاستيلاء على كيانات زوجية (ضمن حجم نافذة طول 40 رمزًا) من النص لتشكيل عبارات العلاقة للتدريب المسبق. يعتمد الاعتراف بالكيانات على تحليل NER وشجرة التبعية للكائنات/الموضوعات.
يمكن تنزيل بيانات ما قبل التدريب المأخوذة من مجموعة بيانات CNN (CNN.TXT) التي استخدمتها هنا.
قم بتنزيل وحفظ AS ./data/cnn.txt
ومع ذلك ، لاحظ أن الورقة تستخدم بيانات Wiki Dumps لـ MTB قبل التدريب والتي هي أكبر بكثير من مجموعة بيانات CNN.
ملاحظة: قد يستغرق التدريب المسبق وقتًا طويلاً ، اعتمادًا على وحدة معالجة الرسومات المتاحة. من الممكن أن نتحلى بشكل مباشر عن مهمة استخراج العلاقة وما زال يحصل على نتائج معقولة ، باتباع القسم أدناه.
main_pretraining.py [-h]
[--pretrain_data TRAIN_PATH]
[--batch_size BATCH_SIZE]
[--freeze FREEZE]
[--gradient_acc_steps GRADIENT_ACC_STEPS]
[--max_norm MAX_NORM]
[--fp16 FP_16]
[--num_epochs NUM_EPOCHS]
[--lr LR]
[--model_no MODEL_NO (0: BERT ; 1: ALBERT ; 2: BioBERT)]
[--model_size MODEL_SIZE (BERT: ' bert-base-uncased ' , ' bert-large-uncased ' ;
ALBERT: ' albert-base-v2 ' , ' albert-large-v2 ' ;
BioBERT: ' bert-base-uncased ' (biobert_v1.1_pubmed))]تشغيل main_task.py مع الوسائط أدناه. يتطلب SEMEVAL2010 TASK 8 DATASET ، متوفرة هنا. قم بتنزيل و Unsip to ./data/ Folder.
main_task.py [-h]
[--train_data TRAIN_DATA]
[--test_data TEST_DATA]
[--use_pretrained_blanks USE_PRETRAINED_BLANKS]
[--num_classes NUM_CLASSES]
[--batch_size BATCH_SIZE]
[--gradient_acc_steps GRADIENT_ACC_STEPS]
[--max_norm MAX_NORM]
[--fp16 FP_16]
[--num_epochs NUM_EPOCHS]
[--lr LR]
[--model_no MODEL_NO (0: BERT ; 1: ALBERT ; 2: BioBERT)]
[--model_size MODEL_SIZE (BERT: ' bert-base-uncased ' , ' bert-large-uncased ' ;
ALBERT: ' albert-base-v2 ' , ' albert-large-v2 ' ;
BioBERT: ' bert-base-uncased ' (biobert_v1.1_pubmed))]
[--train TRAIN]
[--infer INFER]لاستنتاج الجملة ، يمكنك التعليق على Entity1 & ectity2 من الاهتمام داخل الجملة مع علامات الكيانات الخاصة بكل منها [E1] ، [E2]. مثال:
Type input sentence ( ' quit ' or ' exit ' to terminate):
The surprise [E1]visit[/E1] caused a [E2]frenzy[/E2] on the already chaotic trading floor.
Sentence: The surprise [E1]visit[/E1] caused a [E2]frenzy[/E2] on the already chaotic trading floor.
Predicted: Cause-Effect(e1,e2) from src . tasks . infer import infer_from_trained
inferer = infer_from_trained ( args , detect_entities = False )
test = "The surprise [E1]visit[/E1] caused a [E2]frenzy[/E2] on the already chaotic trading floor."
inferer . infer_sentence ( test , detect_entities = False )Sentence: The surprise [E1]visit[/E1] caused a [E2]frenzy[/E2] on the already chaotic trading floor.
Predicted: Cause-Effect(e1,e2) يمكن للنص أيضًا اكتشاف الكيانات المحتملة تلقائيًا في جملة الإدخال ، وفي هذه الحالة يتم استنتاج جميع مجموعات العلاقة الممكنة:
inferer = infer_from_trained ( args , detect_entities = True )
test2 = "After eating the chicken, he developed a sore throat the next morning."
inferer . infer_sentence ( test2 , detect_entities = True )Sentence: [E2]After eating the chicken[/E2] , [E1]he[/E1] developed a sore throat the next morning .
Predicted: Other
Sentence: After eating the chicken , [E1]he[/E1] developed [E2]a sore throat[/E2] the next morning .
Predicted: Other
Sentence: [E1]After eating the chicken[/E1] , [E2]he[/E2] developed a sore throat the next morning .
Predicted: Other
Sentence: [E1]After eating the chicken[/E1] , he developed [E2]a sore throat[/E2] the next morning .
Predicted: Other
Sentence: After eating the chicken , [E2]he[/E2] developed [E1]a sore throat[/E1] the next morning .
Predicted: Other
Sentence: [E2]After eating the chicken[/E2] , he developed [E1]a sore throat[/E1] the next morning .
Predicted: Cause-Effect(e2,e1) قم بتنزيل مجموعة بيانات FightRel 1.0 هنا. و unsip to ./data/ المجلد.
قم بتشغيل Main_task.py مع مهمة "Comment" "تعيين" FilessRel ".
python main_task.py --task fewrel نتائج:
(5 اتجاه 1 طلقة)
Bert EM بدون MTB ، ولم يتم تدريبه على أي بيانات قليلة
| حجم النموذج | الدقة (41646 عينة) |
|---|---|
| Bert-Base-uncared | 62.229 ٪ |
| Bert-Large-uncared | 72.766 ٪ |
بدون تدريب MTB قبل التدريب: نتائج F1 عند تدريبها على بيانات التدريب بنسبة 100 ٪: 
بدون تدريب MTB قبل التدريب: نتائج F1 عند تدريبها على بيانات التدريب بنسبة 100 ٪: 