พื้นที่เก็บข้อมูลนี้นำเสนองานที่ทำในระหว่างวิทยานิพนธ์ปริญญาโทของฉันด้วยชื่อ "การปรับปรุงการแปลเครื่องประสาทที่มีทรัพยากรต่ำของภาษาที่เกี่ยวข้องโดยการถ่ายโอนการเรียนรู้" ได้รับคำแนะนำจาก Alexandra Birch และ Rachel Bawden ที่มหาวิทยาลัยเอดินเบอระ มันถูกส่งในเดือนสิงหาคม 2563 มีการตรวจสอบวิธีการเรียนรู้การถ่ายโอนบางส่วนสำหรับระบบการแปลของเครื่องประสาท (NMT) โดยใช้แบบจำลองภาษาที่สวมหน้ากากเช่น XLM-Roberta (XLM-R) [1] โครงการนี้ถูกสร้างขึ้นเป็นหลักเหนือการหลอมรวมความสนใจของการแสดงคำบริบทจากแบบจำลองภาษาที่สวมหน้ากาก (MLM) ด้วยระบบ NMT ที่ใช้หม้อแปลง [2] นอกจากนี้ยังติดตามการถ่ายโอนความรู้ทางวากยสัมพันธ์โดยการวิเคราะห์หัวความสนใจในระบบนี้ตามงานอ้างอิง [3] คู่มือนี้ให้คำแนะนำการติดตั้งที่จำเป็นพร้อมกับตัวอย่างการทำงานขนาดเล็กโดยใช้ชุดข้อมูลย่อยขนาดเล็กของชุดข้อมูลคู่ขนาน IIT Bombay English-Hindi [4] พารามิเตอร์ทั้งหมดที่ใช้ในงานนี้สามารถเข้าถึงได้จากวิทยานิพนธ์
สารบัญ
- ภาพรวมของการหลอมรวมความสนใจ
- การติดตั้ง
- การประมวลผลล่วงหน้า
- ระบบ NMT พื้นฐาน
- ระบบ NMT XLM-R-fused
- Finetuning XLM-R
- การแปลงสคริปต์
- การวิเคราะห์วากยสัมพันธ์
- ข้อมูลเพิ่มเติม
- การอ้างอิง
1. ภาพรวมของการหลอมรวมความสนใจ
- เราเชื่อมต่อ XLM-R กับระบบ NMT ที่ใช้หม้อแปลงโดยใช้ฟิวชั่นที่ใช้ความสนใจตามงาน [2]
- เราเรียกมันว่าระบบ NMT XLM-R-fused ซึ่งประกอบด้วยโมดูล XLM-R เพิ่มเติมนอกเหนือจาก NMT-encoder มาตรฐานและ NMT-Decoder
- ประโยคอินพุตจะถูกส่งผ่านไปยังทั้ง XLM-R และ NMT-encoder ซึ่งให้การแสดงที่แตกต่างกันสองรายการสำหรับประโยค การแสดงคำบริบทจาก XLM-R นั้นถูกหลอมรวมกับการแสดง NMT-encoder โดยใช้ฟิวชั่นที่ใช้ความสนใจ ในทำนองเดียวกันการเป็นตัวแทน XLM-R จะถูกหลอมรวมกับตัวถอดรหัส
2. การติดตั้ง
2.1. ความต้องการ
- Python> = 3.5
- pytorch> = 1.5.0
- tensorflow == 1.13.1
- HuggingFace Transformers == 2.11.0
- matplotlib
- สัตว์ทะเล
- Scikit-learn
- Sacrebleu> = 1.4.10
- sentencepiece> = 0.1.91
- indic indic nlp library> = 0.6
- Mosesdecoder
2.2 การติดตั้งในไดเรกทอรีแพ็คเกจ
- ดาวน์โหลดแยกและติดตั้ง mosesdecoder ในตำแหน่งนี้
- ดาวน์โหลดแยกและติดตั้งไลบรารี NLP Inform ที่ตำแหน่งนี้ นอกจากนี้ยังแยกทรัพยากร NLP ตัวบ่งชี้ที่ตำแหน่งนี้ เราสามารถข้ามขั้นตอนนี้ได้หากเราไม่ได้ทำงานกับภาษาอินคชั่น
- ดาวน์โหลดแยกและติดตั้งไลบรารี HuggingFace Transformers ที่ตำแหน่งนี้
2.3 การติดตั้ง fairseq
- โคลนที่เก็บนี้ ไดเรกทอรีหลักของ บริษัท จะทำหน้าที่เป็นไดเรกทอรีโฮมเมดสำหรับสคริปต์การประมวลผลล่วงหน้าการฝึกอบรมและการประเมินผลทั้งหมดในงานนี้
- เรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีที่บ้าน
cd 'work/systems/baseline-NMT/fairseq'
pip install --editable ./
- มันจะติดตั้งระบบพื้นฐาน NMT ตามไลบรารี Fairseq พร้อมกับการพึ่งพา โปรดทราบว่าเราใช้ระบบ Fairseq หลายรุ่นที่ตั้งอยู่ในตำแหน่งนี้ ดังนั้นเรามักจะใช้เส้นทางที่แน่นอนของไฟล์การฝึกอบรมและการประเมินผลเพื่อหลีกเลี่ยงความขัดแย้ง
2.4 การดาวน์โหลดและแยก XLM-R
- ดาวน์โหลดไฟล์ทั้งหมดที่เกี่ยวข้องกับ XLM-R จาก HuggingFace Hub ใช้ตัวเลือก 'รายการไฟล์ทั้งหมดในรุ่น' เพื่อดูและดาวน์โหลดไฟล์คือ config.json, pytorch_model.bin, sentencepiece.bpe.model และ tokenizer.json
- ใส่ไฟล์เหล่านี้ในไดเรกทอรีนี้
3. การประมวลผลล่วงหน้า
- กรุณาเยี่ยมชมห้องสมุด Fairseq และ Bert-NMT เพื่อทำความคุ้นเคยกับขั้นตอนการประมวลผลล่วงหน้าขั้นพื้นฐานการฝึกอบรมและขั้นตอนการประเมินผลเนื่องจากงานของเราถูกสร้างขึ้นเหนือพวกเขา
- เราใช้ Mosesdecoder เพื่อประมวลผลชุดข้อมูลภาษาอังกฤษล่วงหน้า แต่เปลี่ยนไปใช้ไลบรารี NLP Indic สำหรับภาษา Indic เช่นภาษาฮินดี, คุชราต, เบงกาลีและมาราธี
- เราใช้ BPE ประโยคสำหรับการแบ่งส่วนคำ เมื่อแหล่งที่มาและภาษาเป้าหมายแบ่งปันอักขระที่สำคัญเราจะประมวลผลชุดข้อมูลด้วย BPE ร่วมโดยใช้สคริปต์นี้ มิฉะนั้นจะใช้สคริปต์ที่แตกต่างกัน
- สำหรับชุดข้อมูลภาษาอังกฤษ-ฮินดิที่ใช้ในการสาธิตงานนี้เราใช้สคริปต์หลัง
- ตั้งค่า home_dir เป็นไดเรกทอรีหลักของที่เก็บนี้
- เราได้ใส่รถไฟทดสอบและไฟล์ dev ที่ RAW_DATA_DIR คุณสามารถเปลี่ยนไฟล์ของคุณด้วยอนุสัญญาการตั้งชื่อเดียวกัน
- เรารวมข้อมูลการฝึกอบรมเข้ากับชุดข้อมูล monolingual ขนาดใหญ่เพื่อเรียนรู้การแบ่งส่วน BPE ที่ดีขึ้น ใส่ชุดข้อมูลเหล่านี้ที่ raw_monolingual_data_dir เราใช้คลังข้อมูลออสการ์ขนาดใหญ่ในงานของเรา แต่สำหรับการสาธิตนี้เราเพิ่งใช้ไฟล์รถไฟเดียวกัน
- สลับระหว่างไลบรารี indic nlp หรือ moses ตามภาษาโดยแสดงความคิดเห็นฟังก์ชั่น clean_norm_tok ดังแสดงในสคริปต์
- เรียกใช้สคริปต์นี้ซึ่งประมวลผลไฟล์ทั้งหมดและบันทึกไว้ล่วงหน้าที่ preprocessed_data_dir ไดเรกทอรี Tokenized-BPE มีไฟล์กลางทั้งหมดหลังจากการทำให้เป็นมาตรฐาน, โทเค็น ฯลฯ รวมถึงไฟล์ BPED สุดท้ายทั้งหมด
- จากนั้นสคริปต์นี้ binarises ข้อมูลที่ใช้โดยระบบที่ใช้ Fairseq และบันทึกในไดเรกทอรี ไบนารี มันใช้ fairseq binariser จากระบบ XLM-R-fused เพื่อ binarise ไฟล์สำหรับพื้นฐานเช่นเดียวกับระบบ XLM-R-fused มันใช้ -Bert-Model-name เพื่อเข้าถึง XLM-R Tokenizer เพื่อเพิ่มไฟล์ต้นฉบับเนื่องจากส่วนประกอบ XLM-R ใช้พร้อมกับ NMT-encoder มาตรฐานในระบบ XLM-R-fused
- (ไม่บังคับ) โปรดทราบว่าระบบนี้ขึ้นอยู่กับ XLM-R เป็นหลัก แต่เรายังสามารถใช้แบบจำลองภาษาที่สวมหน้ากากอื่น ๆ ที่จัดทำโดย HuggingFace Transformers Library เราจำเป็นต้องทำการเปลี่ยนแปลงบางอย่างดังนี้:
- ดาวน์โหลดและแยกโมเดลภาษาใหม่ตามที่กล่าวไว้ในขั้นตอนที่ 2.4
- นำเข้า tokenizer และโมเดลที่สอดคล้องกันจากไลบรารี HuggingFace Transformers ในระบบ XLM-R-fused ที่มีค่าเริ่มต้นตามที่กล่าวไว้ด้านล่าง:
from transformers import XLMRobertaModel
BertModel = XLMRobertaModel
from transformers import XLMRobertaTokenizer
BertTokenizer = XLMRobertaTokenizer
- เราจำเป็นต้องนำเข้าในไฟล์ต่อไปนี้:
- งาน/ระบบ/xlm-r-fused/bert-nmt/preprocess.py
- งาน/ระบบ/xlm-r-fused/bert-nmt/interactive.py
- งาน/ระบบ/xlm-r-fused/bert-nmt/fairseq_cli/preprocess.py
- งาน/ระบบ/xlm-r-fused/bert-nmt/fairseq_cli/interactive.py
- งาน/ระบบ/xlm-r-fused/bert-nmt/fairseq/tasks/translation.py
- งาน/ระบบ/xlm-r-fused/bert-nmt/fairseq/models/transformer.py
- งาน/ระบบ/xlm-r-fused/bert-nmt/fairseq/binarizer.py
- นอกจากนี้เราต้องเปลี่ยนโทเค็นเริ่มต้น
(<s>) และสิ้นสุด (</s>) ในไฟล์เหล่านี้ตามรูปแบบภาษาใหม่
4. ระบบพื้นฐาน NMT
4.1 การฝึกอบรมพื้นฐานระบบ NMT
- ฝึกอบรมระบบพื้นฐานที่ใช้หม้อแปลงด้วยสคริปต์นี้
- มันจะสะสมการไล่ระดับสีเพื่อสร้างขนาดแบทช์ที่มีประสิทธิภาพมากขึ้น batch size = (จำนวน GPUs) * ( -MAX-TOKENS ) * ( -UPDATE-FREQ )
- มันใช้กลยุทธ์การตรวจสอบความถูกต้องในช่วงต้นด้วย -ความสามารถ ในการกำหนดจำนวนจุดตรวจสูงสุดด้วยคะแนน Bleu ที่ลดลง
- งานของเราใช้สถาปัตยกรรม Transformer: Transformer_iwslt_de_en เป็นค่าเริ่มต้น ระบบ XLM-R-fused จะคืนค่าพารามิเตอร์จากระบบพื้นฐานดังนั้นสถาปัตยกรรมของพวกเขาควรจับคู่ นอกจากนี้เรายังสามารถใช้สถาปัตยกรรมขนาดใหญ่อื่น ๆ สำหรับระบบพื้นฐาน แต่เราจำเป็นต้องให้สถาปัตยกรรมพื้นฐานเดียวกันสำหรับระบบ XLM-R-fused เช่นกัน ตรวจสอบไฟล์นี้สำหรับสถาปัตยกรรมเพิ่มเติมที่ใช้ฟิวชั่นที่ใช้ความสนใจ
- จะบันทึกจุดตรวจที่ Baseline_nmt_CheckPoints_dir
4.2 การประเมินระบบ NMT พื้นฐาน
- ประเมินระบบพื้นฐานด้วยสคริปต์นี้
- เราจำเป็นต้องประเมินไฟล์ทดสอบ BPED ด้วยจุดตรวจที่ดีที่สุด ใช้ -remove-bpe = sentencepiece เพื่อลบการแบ่งส่วน BPE ออกจากไฟล์เอาต์พุต
- ใช้ indic nlp หรือโมเสสเพื่อแยกแยะไฟล์เอาต์พุตดังแสดงในสคริปต์
- สคริปต์นี้จะคำนวณคะแนน Bleu สุดท้ายโดยใช้ Sacrebleu โดยใช้ไฟล์ทดสอบที่ไม่มีใครแตะต้องของภาษาเป้าหมาย
5. ระบบ NMT XLM-R-fused
5.1 การฝึกอบรมระบบ NMT XLM-R-fused
- ฝึกอบรมระบบ XLM-R-fused ด้วยสคริปต์นี้ซึ่งจะใช้ระบบในตำแหน่งนี้
- bert_name เก็บเส้นทางไปยังตัวแปร XLM-R ที่ใช้กับระบบนี้ เราสามารถใช้ตัวแปรที่ผ่านการฝึกอบรมมาก่อนหรือได้รับการฝึกฝนไว้ล่วงหน้าที่นี่
- สคริปต์นี้คัดลอกจุดตรวจที่ดีที่สุดจากระบบพื้นฐานและเรียกคืนพารามิเตอร์สำหรับการฝึกอบรมเพิ่มเติมด้วยระบบ XLM-R-fused
- ระบบนี้ถูกสร้างขึ้นเหนือ Fairseq เวอร์ชันก่อนหน้าซึ่งไม่ได้ให้การหยุดเร็วดังนั้นสคริปต์นี้จะบันทึกจุดตรวจทั้งหมดสำหรับขั้นตอนการฝึกอบรม -สูงสุด-สูงสุด ซึ่งจะได้รับการประเมินในภายหลัง
- สำหรับความสนใจฟิวชั่นที่ทั้งตัวเข้ารหัสและตัวถอดรหัสให้ใช้ -arch เป็น transformer_s2_iwslt_de_en ในขณะที่สำหรับฟิวชั่นตัวถอดรหัสเท่านั้นใช้ transformer_iwslt_de_en
- ตรวจสอบให้แน่ใจว่าใช้อัตราการเรียนรู้เล็กน้อยเนื่องจากพารามิเตอร์อยู่ใกล้กับระดับที่เหมาะสมแล้ว
5.2 การประเมินระบบ NMT XLM-R-fused
- ประเมินระบบ XLM-R-fused ด้วยสคริปต์นี้ซึ่งคล้ายกับสคริปต์ที่ใช้สำหรับระบบพื้นฐาน
- สคริปต์นี้ใช้จุดตรวจสอบเฉพาะเพื่อคำนวณคะแนน BLEU ในขณะที่สคริปต์อื่นขยายเพื่อคำนวณคะแนนสำหรับจุดตรวจทั้งหมด
- เหมือนที่กล่าวไว้ก่อนหน้านี้ไม่มีคุณสมบัติการหยุดเร็วกับระบบนี้ ดังนั้นเราจึงบันทึกจุดตรวจทั้งหมดทุกครั้งที่มีการตรวจสอบด้วยชุดตรวจสอบด้วยชุดตรวจสอบ จากนั้นจุดตรวจสอบที่ดีที่สุดสามารถตั้งค่าได้โดยใช้ best_checkpoint ในสคริปต์เดิมสำหรับการประเมินชุดทดสอบ
- มันใช้พา ธ ไปยังไฟล์ทดสอบสองไฟล์ที่ใช้โดยส่วนประกอบที่แตกต่างกันของระบบ NMT XLM-R-fused Test_SRC_BPED ชี้ไปที่ไฟล์ที่ใช้โดยมาตรฐาน NMT-encoder ในขณะที่ Test_SRC_RAW ชี้ไปยังไฟล์ต้นฉบับ RAW ซึ่งใช้โดยองค์ประกอบ XLM-R ไฟล์ RAW เป็นสิ่งจำเป็นโดย XLM-R เนื่องจากใช้ tokenization ภายในของตัวเองโดยใช้ tokenizer ที่จัดทำโดยห้องสมุด HuggingFace Transformers ตรวจสอบให้แน่ใจว่า BERT_NAME ชี้ไปที่ไดเรกทอรี XLM-R ที่สอดคล้องกันเพื่อให้สามารถเข้าถึงโทเค็นที่สอดคล้องกันได้
6. FINETUNING XLM-R
6.1 ตัวแปรหลายภาษาและภาษาเดียว
- เราได้ปรับรุ่น XLM-R เพื่อสร้างตัวแปรหลายภาษาและภาษาเดียวของรุ่นที่ผ่านการฝึกอบรมมาก่อน
- Indo-Aryan-XLM-R-Base เป็นตัวแปรหลายภาษาซึ่งสร้างขึ้นโดยฐาน XLM-R Finetuning กับภาษาที่เกี่ยวข้อง-ภาษาฮินดี, คุชราต, มาราธีและเบงกาลี มันใช้ประโยชน์จากความคล้ายคลึงกันของวากยสัมพันธ์สัณฐานวิทยาออร์โธกราฟและคำศัพท์
- Gujarati-XLM-R-Base และ Gujarati-XLM-R-Large เป็นตัวแปร monolingual finetuned ด้วยชุดข้อมูล Gujarati เดี่ยว นอกจากนี้ Gujarati-Dev-XLM-R-Base ถูกสร้างขึ้นด้วยภาษาคุชราตที่แปลงเป็นสคริปต์ Devanagari รุ่นเหล่านี้ได้รับการปล่อยตัวที่ HuggingFace Hub ซึ่งมีอยู่ที่นี่
- เราใช้ตัวแปร Pytorch ของ XLM-R ที่มีอยู่ที่นี่เป็นรุ่นที่ผ่านการฝึกอบรมมาก่อน
6.2 การเตรียมข้อมูล
- เราทำตามบทช่วยสอนนี้เป็นหลักซึ่งเราสนับสนุนให้คุณไปเยี่ยมชมก่อนดำเนินการต่อไป
- ใช้สคริปต์นี้เพื่อเตรียมข้อมูล มันเตรียมไฟล์การฝึกอบรมและการตรวจสอบความถูกต้องสำหรับชุดข้อมูล monolingual เดียวที่มีการตั้งค่าเส้นทางโดยใช้ RAW_MONO_SOURCE จากนั้นมันจะถูกประมวลผลล่วงหน้าโดยใช้ไลบรารี NLP indic ที่ทำไว้สำหรับไฟล์การฝึกอบรมด้านบน
- ในสคริปต์นี้ BERT_NAME ชี้ไปที่โมเดล XLM-R แบบดั้งเดิมซึ่งใช้ในการเข้าถึงพจนานุกรม
- จากนั้นมันจะถูก binarised โดยใช้ห้องสมุด Fairseq อื่นที่มีอยู่ที่นี่ มันใช้ Tokenizer XLM-R ซึ่งทำให้มั่นใจได้ว่าข้อมูลของเรานั้นถูกทำให้เป็นไปได้ในลักษณะเดียวกับข้อมูลต้นฉบับที่ทำขึ้นเพื่อทำการปรับแต่ง XLM-R
- (ไม่บังคับ) หากคุณต้องการที่จะปรับรูปแบบภาษาที่สวมหน้ากากอื่น ๆ คุณต้องนำเข้าโมเดลภาษานั้นในไฟล์นี้ ทำการเปลี่ยนแปลงต่อไปนี้:
- นำเข้า tokenizer ที่เกี่ยวข้องแทน xlmrobertatokenizer เริ่มต้นของเรา
from transformers import XLMRobertaTokenizer
BertTokenizer = XLMRobertaTokenizer
- แทนที่ชื่อรุ่นที่นี่
dict = BertTokenizer.from_pretrained("xlm-roberta-base")
- แทนที่โทเค็นเริ่มต้นและสิ้นสุดที่คล้ายกับคำแนะนำในการประมวลผลล่วงหน้า
- ในทำนองเดียวกันเตรียมข้อมูลสำหรับภาษาอื่น ๆ หากคุณต้องการสร้างแบบจำลองหลายภาษา
6.3 การฝึกอบรมและการประเมินแบบจำลอง
- ใช้สคริปต์นี้เพื่อ finetune ตัวแปร monolingual
- มันใช้ระบบ NMT พื้นฐานเดียวกันซึ่งใช้ในขั้นตอนที่ 4.1 เพื่อปรับรุ่น ที่นี่ RESTORE_POINT ชี้ไปที่จุดตรวจสอบรุ่นก่อนที่ได้รับการฝึกอบรม ใช้ -งาน เป็น masked_lm สำหรับตัวแปร monolingual
- Similalrly ใช้สคริปต์นี้เพื่อสร้างตัวแปรหลายภาษา มันใช้ --task เป็น multilingual_masked_lm ซึ่งรวมข้อมูลจากภาษาต่าง ๆ
- นอกจากนี้ยังรวมตัวกันใหม่เพื่อลดผลกระทบของความไม่สมดุลของข้อมูลที่ชุดข้อมูลขนาดใหญ่เอาชนะข้อมูลที่เล็กกว่า ใช้ -multilang-sampling-alpha เพื่อปรับอัตราส่วนการสุ่มตัวอย่าง ดูกระดาษ XLM-R ดั้งเดิม [1] สำหรับรายละเอียด
- เราบันทึกจุดตรวจในช่วงเวลาปกติและเลือกแบบจำลองด้วยการสูญเสียการตรวจสอบขั้นต่ำ
6.4 การทำให้จุดตรวจสอบ Pytorch เข้ากันได้กับ Transformers HuggingFace
- เราจำเป็นต้องแปลงจุดตรวจ Pytorch ที่บันทึกไว้เป็นเวอร์ชันอื่นที่เข้ากันได้กับไลบรารี HuggingFace Transformers
- เราคิดว่าคุณได้ติดตั้งไลบรารี Transformers ในไดเรกทอรีแพ็คเกจแล้ว จากนั้นใช้คำสั่งต่อไปนี้
python packages/transformers/src/transformers/convert_roberta_original_pytorch_checkpoint_to_pytorch.py --roberta_checkpoint_path best_ck_dir/ --pytorch_dump_folder_path ./
- ที่นี่ best_ck_dir มีจุดตรวจสอบ XLM-R Finetuned ชื่อเป็น model.pt , dict.txt และ sentencepiece.bpe.model ไฟล์หลัง 2 ไฟล์เหมือนกันสำหรับทั้งรุ่นที่ผ่านการฝึกอบรมมาก่อนและแบบ Finetuned ซึ่งสามารถเข้าถึงได้ที่นี่ pytorch_dump_folder_path หมายถึงไดเรกทอรีที่ต้องบันทึกเวอร์ชัน pytorch ที่เข้ากันได้ของหม้อแปลง
- โปรดทราบว่าไลบรารี Transformers มีปัญหาบางอย่างกับไฟล์ Convert_roberta_original_pytorch_CheckPoint_to_pytorch.py ซึ่งเราได้แก้ไขและเพิ่มลงในไดเรกทอรี UTILS แทนที่ไฟล์นี้และสร้างไลบรารีใหม่
- (ไม่บังคับ) เราสามารถใช้คู่มือ HuggingFace โดยตรงเพื่อ finetune รุ่นโดยไม่ต้องใช้ไลบรารี Fairseq ก่อน เราพบว่าวิธีนี้ช้ามากเนื่องจากการสนับสนุนหลาย GPU ที่ไม่ดีจัดทำโดย HuggingFace พวกเขาใช้มัลติเธรดผ่านการประมวลผลหลายครั้งซึ่งทำให้เกิดการใช้ GPU ที่ไม่สมดุล Fairseq ใช้โมดูลของตัวเองเพื่อจัดการสิ่งนี้ซึ่งมีการกล่าวถึงที่นี่
- หลังจาก Finetuning เพียงแค่ใช้รุ่น Pytorch สุดท้ายเพื่อแทนที่โมเดลที่ผ่านการฝึกอบรมมาก่อนดั้งเดิมสำหรับการฝึกอบรมและประเมินระบบ XLM-R-fused
7. การแปลงสคริปต์
- เราใช้กลยุทธ์การแปลงสคริปต์บางอย่างซึ่งเราพยายามใช้ประโยชน์จากความคล้ายคลึงกันของคำศัพท์ระหว่างภาษาที่เกี่ยวข้องโดยใช้สคริปต์ทั่วไป เราใช้ไลบรารี NLP indic เพื่อแปลงเดียวกัน
- ในขณะที่ระบบ XLM-R-fused ประมวลผลประโยคอินพุตเดียวกันใน XLM-R เช่นเดียวกับ NMT-encoder เราได้ลองชุดค่าผสมที่แตกต่างกันของสคริปต์สำหรับโมดูลเหล่านี้ ตัวอย่างเช่นสำหรับคู่ Gujarati-Hindi เราผ่านประโยคสคริปต์ Gujarati ไปยังโมดูล XLM-R แต่ Gujarati ในสคริปต์ Devanagari ไปยัง NMT-encoder เพื่อเพิ่มการทับซ้อนของคำศัพท์ด้วยภาษาเป้าหมาย
- ประโยคในสคริปต์ที่แตกต่างกันมีความหมายทางความหมายเหมือนกันดังนั้นฟิวชั่นที่ใช้ความสนใจของพวกเขาจึงเป็นไปได้ ตรวจสอบวิทยานิพนธ์สำหรับรายละเอียดเพิ่มเติม
- ฟังก์ชั่นนี้สามารถใช้กับระบบ XLM-R-fused โดยการเปลี่ยนไฟล์ต้นฉบับเป็น binarsied สำหรับ XLM-R สามารถทำได้โดยใช้สคริปต์นี้ซึ่งแปลงไฟล์เหล่านี้เป็นสคริปต์เป้าหมาย
- ในทำนองเดียวกันสคริปต์สามารถใช้ในการแปลงสคริปต์ของไฟล์ต้นฉบับที่จะส่งผ่านไปยัง XLM-R เช่นเดียวกับ NMT-encoder มาตรฐาน
- จากนั้นฝึกอบรมระบบ NMT พื้นฐานและ XLM-R-fused เช่นเดียวกับก่อนที่จะใช้สคริปต์การฝึกอบรมเบื้องต้น
- ประเมินระบบเหล่านี้ก่อนที่จะใช้สคริปต์การประเมินเบื้องต้น หากภาษาเป้าหมายถูกแปลงเป็นสคริปต์ของภาษาต้นฉบับก็จะต้องถูกแปลงกลับเป็นสคริปต์เริ่มต้นเป็นขั้นตอนการประมวลผลหลังการประมวลผล สิ่งนี้สามารถทำได้โดยใช้สคริปต์การประเมินที่มีอยู่ในไดเรกทอรี สคริปต์แบบแปลง ภายในภายในไดเรกทอรีสคริปต์ของสคริปต์พื้นฐานและ XLM-R-fused
8. การวิเคราะห์ทางไวยากรณ์
โปรดทำความคุ้นเคยกับงานของ [3] ซึ่งมีรหัสที่นี่ งานของเราขยายออกไปเพื่อติดตามการถ่ายโอนความรู้ทางวากยสัมพันธ์ในระบบ XLM-R-fused
8.1 การเตรียมข้อมูล
- การประมวลผลชุดข้อมูล Universal Dependencies (UD)
- เราใช้ชุดข้อมูลภาษาฮินดี UD [5] [6] สำหรับการวิเคราะห์วากยสัมพันธ์
- ใช้สคริปต์นี้เพื่อประมวลผลรถไฟ UD RAW และไฟล์ทดสอบ มันจะแยกหัวไวยากรณ์และความสัมพันธ์ทางไวยากรณ์ที่สอดคล้องกันจากไฟล์ UD
- จากนั้นใช้สคริปต์นี้เพื่อแปลงไฟล์ด้านบนเป็นรูปแบบ JSON โดยใช้คำแนะนำที่นี่
- ในที่สุดแยกประโยคดิบออกจากไฟล์ด้านบนโดยใช้สคริปต์นี้
- การประมวลผลไฟล์ต้นฉบับสำหรับการอนุมาน FairSeq
- ใช้ไฟล์ด้านบนด้วยประโยคดิบเป็นไฟล์ทดสอบต้นฉบับ เราประเมินจุดตรวจสอบพื้นฐานของระบบ XLM-R-fused ที่ดีที่สุดของเราด้วยไฟล์เหล่านี้
- ประมวลผลไฟล์เหล่านี้ล่วงหน้าตามที่กล่าวไว้ในขั้นตอนที่ 3 (การประมวลผลล่วงหน้า) และเตรียมไฟล์ binarised สำหรับ fairseq เนื่องจากเราไม่มีข้อมูลด้านเป้าหมายใด ๆ ที่นี่เราจึงใช้สคริปต์การประมวลผลล่วงหน้าที่แก้ไขแล้วเพื่อประมวลผลเฉพาะไฟล์ด้านแหล่งที่มา
8.2 การสกัดแผนที่ความสนใจจากระบบพื้นฐานและระบบ XLM-R-fused
- ใช้ข้อมูล binarsied ด้านบนเพื่อแยกแผนที่ความสนใจจากระบบ XLM-R-fused โดยใช้สคริปต์การประเมินผล ในทำนองเดียวกันใช้สคริปต์นี้เพื่อแยกแผนที่ออกจากระบบพื้นฐาน
- สคริปต์เหล่านี้ใช้ระบบที่แตกต่างกันสองระบบที่สร้างขึ้นเหนือระบบ NMT พื้นฐานและระบบ NMT XLM-R-fused ซึ่งสามารถเข้าถึงได้ที่นี่และที่นี่ตามลำดับ
- ระบบเหล่านี้สกัดแผนที่การใส่ใจในตนเองสำหรับหัวความสนใจทั้งหมดที่มีอยู่ในเลเยอร์เครื่องเข้ารหัสหม้อแปลงทั้งหมด นอกจากนี้ระบบที่สร้างขึ้นเหนือ XLM-R-fused ยังแยกแผนที่ Bert-Attention ซึ่งเป็นผลมาจากการหลอมรวมความสนใจของการเป็นตัวแทน XLM-R และการเป็นตัวแทนของ NMT-encoder
- ใช้พารามิเตอร์เพิ่มเติม -SAVE_ATTN_MAPS เพื่อให้เส้นทางเพื่อบันทึกแผนที่ความสนใจ สร้างโฟลเดอร์ - ตัวเอง เบิร์ต และ batch_sentences ภายในเพื่อจัดเก็บแผนที่ที่เกี่ยวข้อง batch_sentences เก็บประโยคที่เกี่ยวข้องในลำดับที่แผนที่ความสนใจจะถูกสกัด ไฟล์นี้สามารถใช้เพื่อตรวจสอบลำดับของประโยคที่ประมวลผล
- แผนที่เหล่านี้จะถูกบันทึกไว้ในอาร์เรย์ NumPy ที่ไฟล์เดียวมีจำนวนประโยคเช่นเดียวกับขนาดแบทช์
- ใช้สคริปต์นี้เพื่อประมวลผลแผนที่ความสนใจเพิ่มเติม
- มันสร้างวัตถุดองโดยใช้แผนที่ความสนใจและไฟล์ JSON
- จากนั้นจะแปลงแผนที่ความสนใจสำหรับโทเค็นระดับ BPE เป็นระดับคำ ตรวจสอบวิทยานิพนธ์สำหรับรายละเอียดเพิ่มเติม
- สำหรับการทดสอบรหัสของเราคุณสามารถใช้ไฟล์ดองของเราสำหรับทั้งระบบพื้นฐานและระบบ XLM-R-fused ซึ่งมีอยู่ที่นี่ ดาวน์โหลดและแยกไฟล์บีบอัดที่ตำแหน่งนี้ ไฟล์ดองเหล่านี้จะทำงานร่วมกับข้อมูลที่ประมวลผลล่วงหน้าของภาษาฮินดี UD ได้แล้วที่ตำแหน่งดังกล่าว
8.3 การแสดงภาพแผนที่ความสนใจและตัวแยกประเภทการตรวจสอบตามความสนใจ
- เรียกใช้สมุดบันทึกการวิเคราะห์วากยสัมพันธ์ที่นี่ Point Train_Path และ dev_path ไปยังไฟล์รถไฟและทดสอบดองด้านบน ที่นี่ไฟล์ dev และ test ของเราเหมือนกันเพราะเราไม่ได้ใช้พารามิเตอร์ไฮเปอร์
- น้ำหนักที่ได้จากระบบพื้นฐานและระบบ XLM-R-fused ถูกนำมาใช้เพื่อกำหนดหัวไวยากรณ์ที่ถูกต้องในเลเยอร์และหัวความสนใจที่แตกต่างกัน
- มันมีตัวอย่างเชิงคุณภาพบางอย่างที่คาดการณ์หัวไวยากรณ์ได้สำเร็จ
- ในที่สุดมันก็ให้คะแนน UAS ขั้นสุดท้ายโดยการฝึกอบรมและประเมินความสนใจจากตัวจําแนกโดยใช้ความสนใจ มันต้องใช้การผสมผสานถ่วงน้ำหนักของน้ำหนักตัวเองที่กำหนดโดยเลเยอร์และหัวความสนใจทั้งหมดเพื่อให้การวัดโดยรวมของความรู้ทางวากยสัมพันธ์
9. ข้อมูลเพิ่มเติม
- ใบอนุญาต: โปรดทราบว่างานของเราได้รับใบอนุญาตภายใต้ใบอนุญาต MIT แต่เราใช้งานและชุดข้อมูลอื่น ๆ ที่มีใบอนุญาตของตัวเอง โดยเฉพาะอย่างยิ่งระบบทั้งหมดที่ใช้ไลบรารี Fairseq มีใบอนุญาตที่สอดคล้องกันอยู่ในไดเรกทอรีที่เกี่ยวข้อง นอกจากนี้โปรดตรวจสอบใบอนุญาตสำหรับชุดข้อมูลคู่ขนานภาษาอังกฤษ-ฮินดิไอไอทีบอมเบย์และชุดข้อมูลการพึ่งพาสากลของภาษาฮินดีโดยใช้ลิงก์ที่กำหนดในไฟล์ readme ในทำนองเดียวกันตรวจสอบใบอนุญาตสำหรับไลบรารี HuggingFace Transformers ในขณะที่เราแก้ไขไฟล์ใดไฟล์หนึ่งตามที่กล่าวไว้ใน ReadMe
- เพิ่มปัญหาหากคุณต้องการความช่วยเหลือใด ๆ หากคุณพบว่างานนี้มีประโยชน์อย่าลังเลที่จะใช้และโปรดอ้างอิงวิทยานิพนธ์ของฉันเช่นกัน
10. ข้อมูลอ้างอิง
[1] Conneau, Alexis, et al. "การเรียนรู้การเป็นตัวแทนข้ามภาษาที่ไม่ได้รับการดูแลในระดับ" arxiv preprint arxiv: 1911.02116 (2019)
[2] Zhu, Jinhua, et al. "การรวมเบิร์ตเข้ากับการแปลของเครื่องประสาท" การประชุมนานาชาติเกี่ยวกับการเป็นตัวแทนการเรียนรู้ 2019
[3] Clark, K. , Khandelwal, U. , Levy, O. , & Manning, CD (2019, August) เบิร์ตดูอะไร? การวิเคราะห์ความสนใจของเบิร์ต ในการดำเนินการของ 2019 ACL Workshop BlackBoxNLP: การวิเคราะห์และตีความเครือข่ายประสาทสำหรับ NLP (หน้า 276-286)
[4] Anoop Kunchukuttan, Pratik Mehta, Pushpak Bhattacharyya IIT Bombay English-Hindi Parallel Corpus การประชุมทรัพยากรภาษาและการประเมินผล 2018.
[5] Riyaz Ahmad Bhat, Rajesh Bhatt, Annahita Farudi, Prescott Klassen, Bhuvana Narasimhan, Martha Palmer, Owen Rambow, Dipti Misra Sharma, Ashwini Vaidya, Sri Ramagurumurthy Vishnu โครงการ Hindi/Urdu Treebank ในคู่มือของคำอธิบายประกอบภาษาศาสตร์ (แก้ไขโดย Nancy Ide และ James Pustejovsky), Springer Press 2558.
[6] Martha Palmer, Rajesh Bhatt, Bhuvana Narasimhan, Owen Rambow, Dipti Misra Sharma, Fei Xia ไวยากรณ์ภาษาฮินดี: การพึ่งพาคำอธิบายประกอบการพึ่งพาคำอธิบายประกอบโครงสร้างคำสั่งของคำคัดเลือกและโครงสร้างวลี ในการประชุมนานาชาติครั้งที่ 7 เรื่องการประมวลผลภาษาธรรมชาติไอคอน 2542 ไฮเดอราบัดอินเดีย 14-17 ธ.ค. 2552