ตัวแยกวิเคราะห์ที่มีความแม่นยำสูงพร้อมโมเดลสำหรับ 11 ภาษาที่ใช้ใน Python ขึ้นอยู่กับการแยกเขตเลือกตั้งด้วยตัวเข้ารหัสด้วยตนเองจาก ACL 2018 โดยมีการเปลี่ยนแปลงเพิ่มเติมที่อธิบายไว้ในการแยกเขตเลือกตั้งหลายภาษาด้วยความพยายามด้วยตนเองและการฝึกอบรมก่อน
ใหม่กุมภาพันธ์ 2021: เวอร์ชัน 0.2.0 ของตัวแยกวิเคราะห์ประสาทของ Berkeley ได้ออกมาแล้วพร้อมกับรุ่นที่ผ่านการฝึกอบรมมาก่อนที่มีคุณภาพสูงสำหรับทุกภาษา การอนุมานตอนนี้ใช้ pytorch แทน tensorflow (การฝึกอบรมเป็น pytorch-only เสมอ) ลดลงรองรับ Python 2.7 และ 3.5 รวมถึงการสนับสนุนที่ได้รับการปรับปรุงสำหรับการฝึกอบรมและการใช้ตัวแยกวิเคราะห์ของคุณเองตามตัวเลือกของคุณในรูปแบบที่คุณได้รับการฝึกอบรมมาก่อน
หากคุณมีความสนใจในการฝึกอบรมแบบจำลองการแยกวิเคราะห์ของคุณเองให้ข้ามไปยังส่วนการฝึกอบรมของ readme นี้
ในการติดตั้งตัวแยกวิเคราะห์ให้เรียกใช้คำสั่ง:
$ pip install beneparหมายเหตุ: Benepar 0.2.0 เป็นการอัพเกรดที่สำคัญในเวอร์ชันก่อนหน้าและมาพร้อมกับรุ่นตัวแยกวิเคราะห์ที่มีคุณภาพใหม่และสูงกว่าทั้งหมด หากคุณยังไม่พร้อมที่จะอัพเกรดคุณสามารถตรึงเวอร์ชัน beneper ของคุณไว้ในรุ่นก่อนหน้า (0.1.3)
Python 3.6 (หรือใหม่กว่า) และ Pytorch 1.6 (หรือใหม่) เป็นสิ่งจำเป็น ดูเว็บไซต์ Pytorch สำหรับคำแนะนำเกี่ยวกับวิธีการเลือกระหว่าง Pytorch รุ่น GPU และ CPU เท่านั้น Benear จะใช้ GPU โดยอัตโนมัติหากพร้อมใช้งาน Pytorch
วิธีที่แนะนำในการใช้ benepar คือการรวมเข้ากับ Spacy หากใช้ Spacy คุณควรติดตั้งรูปแบบ Spacy สำหรับภาษาของคุณ สำหรับภาษาอังกฤษคำสั่งการติดตั้งคือ:
$ python -m spacy download en_core_web_mdแบบจำลอง Spacy ใช้สำหรับการแบ่งส่วนโทเค็นและการแบ่งส่วนประโยคเท่านั้น หากไม่จำเป็นต้องมีการวิเคราะห์เฉพาะภาษาที่นอกเหนือจากการแยกวิเคราะห์คุณอาจนำไปสู่รูปแบบเฉพาะภาษาและใช้โมเดลหลายภาษาที่ทำ tokenization และการแบ่งส่วนเท่านั้น รูปแบบหนึ่งที่เพิ่มเข้ามาใหม่ใน Spacy 3.0 ควรทำงานให้กับอังกฤษเยอรมันเกาหลีโปแลนด์และสวีเดน (แต่ไม่ใช่ภาษาจีนเพราะดูเหมือนจะไม่สนับสนุนการแบ่งส่วนคำภาษาจีน)
ต้องดาวน์โหลดโมเดลการแยกวิเคราะห์แยกกันโดยใช้คำสั่ง:
>> > import benepar
>> > benepar . download ( 'benepar_en3' )ดูส่วนโมเดลที่มีอยู่ด้านล่างสำหรับรายการทั้งหมดของรุ่น
วิธีที่แนะนำในการใช้ benepar คือการรวมเข้ากับ Spacy:
>> > import benepar , spacy
>> > nlp = spacy . load ( 'en_core_web_md' )
>> > if spacy . __version__ . startswith ( '2' ):
nlp . add_pipe ( benepar . BeneparComponent ( "benepar_en3" ))
else :
nlp . add_pipe ( "benepar" , config = { "model" : "benepar_en3" })
>> > doc = nlp ( "The time for action is now. It's never too late to do something." )
>> > sent = list ( doc . sents )[ 0 ]
>> > print ( sent . _ . parse_string )
( S ( NP ( NP ( DT The ) ( NN time )) ( PP ( IN for ) ( NP ( NN action )))) ( VP ( VBZ is ) ( ADVP ( RB now ))) (. .))
>> > sent . _ . labels
( 'S' ,)
>> > list ( sent . _ . children )[ 0 ]
The time for action เนื่องจาก Spacy ไม่ได้ให้การแยกเขตการเลือกตั้งอย่างเป็นทางการ API วิธีการทั้งหมดจึงสามารถเข้าถึงได้ผ่านการขยาย namespaces Span._ และ Token._ _
มีคุณสมบัติส่วนขยายต่อไปนี้:
Span._.labels : tuple ของฉลากสำหรับช่วงที่กำหนด ช่วงอาจมีป้ายกำกับหลายป้ายเมื่อมีโซ่ unary ในต้นไม้แยกวิเคราะห์Span._.parse_string : การแสดงสตริงของแผนผัง Parse สำหรับช่วงที่กำหนดSpan._.constituents : ตัววนซ้ำมากกว่าวัตถุ Span สำหรับ sub-constituents ในการข้ามการสั่งซื้อล่วงหน้าของต้นไม้แยกวิเคราะห์Span._.parent : ผู้ปกครอง Span ในต้นไม้แยกวิเคราะห์Span._.children : ตัววนซ้ำมากกว่าเด็ก Span s ในต้นไม้แยกวิเคราะห์Token._.labels Token._.parse_string , Token._.parent : สิ่งเหล่านี้ทำตัวเหมือนกับการเรียกใช้วิธีการที่สอดคล้องกันในช่วงความยาวหนึ่งอันที่มีโทเค็น วิธีการเหล่านี้จะเพิ่มข้อยกเว้นเมื่อเรียกว่าช่วงที่ไม่ได้เป็นส่วนประกอบในต้นไม้แยกวิเคราะห์ ข้อผิดพลาดดังกล่าวสามารถหลีกเลี่ยงได้โดยการสำรวจต้นไม้แยกวิเคราะห์เริ่มต้นที่ระดับประโยคทั้งสอง (โดยการวนซ้ำมากกว่า doc.sents ) หรือกับวัตถุ Token แต่ละตัว
นอกจากนี้ยังมีอินเทอร์เฟซ NLTK ซึ่งออกแบบมาเพื่อใช้กับชุดข้อมูลและ TreeBanks ที่ถูกตรึงไว้ล่วงหน้าหรือเมื่อรวมตัวแยกวิเคราะห์ลงในท่อ NLP ที่ทำโทเค็นและการแยกประโยค (อย่างน้อยที่สุด) สำหรับการแยกวิเคราะห์เริ่มต้นด้วยข้อความดิบคุณ ควร ใช้เครื่องรางและ benepar.BeneparComponent แทน
ตัวอย่างการใช้งานด้วย NLTK:
>> > import benepar
>> > parser = benepar . Parser ( "benepar_en3" )
>> > input_sentence = benepar . InputSentence (
words = [ '"' , 'Fly' , 'safely' , '.' , '"' ],
space_after = [ False , True , False , False , False ],
tags = [ '``' , 'VB' , 'RB' , '.' , "''" ],
escaped_words = [ '``' , 'Fly' , 'safely' , '.' , "''" ],
)
>> > tree = parser . parse ( input_sentence )
>> > print ( tree )
( TOP ( S ( `` `` ) ( VP ( VB Fly ) ( ADVP ( RB safely ))) (. .) ( '' '' ))) ไม่จำเป็นต้องมีฟิลด์ทั้งหมดของ benepar.InputSentence แต่อย่างน้อยหนึ่ง words และ escaped_words จะต้องระบุ ตัวแยกวิเคราะห์จะพยายามคาดเดาค่าสำหรับฟิลด์ที่หายไปเช่น:
>> > input_sentence = benepar . InputSentence (
words = [ '"' , 'Fly' , 'safely' , '.' , '"' ],
)
>> > parser . parse ( input_sentence ) ใช้ parse_sents เพื่อแยกวิเคราะห์หลายประโยค
>> > input_sentence1 = benepar . InputSentence (
words = [ 'The' , 'time' , 'for' , 'action' , 'is' , 'now' , '.' ],
)
>> > input_sentence2 = benepar . InputSentence (
words = [ 'It' , "'s" , 'never' , 'too' , 'late' , 'to' , 'do' , 'something' , '.' ],
)
>> > parser . parse_sents ([ input_sentence1 , input_sentence2 ])รุ่นตัวแยกวิเคราะห์บางรุ่นยังอนุญาตให้อินพุตข้อความ Unicode สำหรับการดีบัก/การใช้งานแบบโต้ตอบ แต่การส่งผ่านสตริงข้อความดิบนั้น ไม่ได้รับการสนับสนุนอย่างมาก สำหรับแอปพลิเคชันใด ๆ ที่การแยกวิเคราะห์ความแม่นยำมีความสำคัญ
>> > parser . parse ( '"Fly safely."' ) # For debugging/interactive use only. เมื่อแยกวิเคราะห์จากข้อความดิบเราขอแนะนำให้ใช้ Spacy และ benepar.BeneparComponent แทน เหตุผลก็คือโมเดลตัวแยกวิเคราะห์ไม่ได้จัดส่งด้วย tokenizer หรือตัวแยกประโยคและบางรุ่นอาจไม่รวม tagger ส่วนหนึ่งของคำพูดเช่นกัน ชุดเครื่องมือจะต้องใช้เพื่อเติมเต็มส่วนประกอบไปป์ไลน์เหล่านี้และ Spacy มีประสิทธิภาพสูงกว่า NLTK ในทุกพื้นที่เหล่านี้ (บางครั้งโดยระยะขอบขนาดใหญ่)
มีโมเดลตัวแยกวิเคราะห์ที่ผ่านการฝึกอบรมต่อไปนี้ ในการใช้การรวม Spacy คุณจะต้องติดตั้งรูปแบบ Spacy สำหรับภาษาที่เหมาะสม
| แบบอย่าง | ภาษา | ข้อมูล |
|---|---|---|
benepar_en3 | ภาษาอังกฤษ | 95.40 F1 ในชุดทดสอบ WSJ ที่แก้ไขแล้ว ข้อมูลการฝึกอบรมใช้การแก้ไขโทเค็นและคำอธิบายประกอบวากยสัมพันธ์ตามแนวทางเดียวกันกับทรีแบงก์เว็บของอังกฤษและ ontonotes ซึ่งตรงกับแนวทางปฏิบัติโทเค็นที่ทันสมัยในห้องสมุดเช่น Spacy ขึ้นอยู่กับ T5-small |
benepar_en3_large | ภาษาอังกฤษ | 96.29 F1 ในชุดทดสอบ WSJ ที่แก้ไขแล้ว ข้อมูลการฝึกอบรมใช้การแก้ไขโทเค็นและคำอธิบายประกอบวากยสัมพันธ์ตามแนวทางเดียวกันกับทรีแบงก์เว็บของอังกฤษและ ontonotes ซึ่งตรงกับแนวทางปฏิบัติโทเค็นที่ทันสมัยในห้องสมุดเช่น Spacy ขึ้นอยู่กับ T5 ขนาดใหญ่ |
benepar_zh2 | ชาวจีน | 92.56 F1 ในชุดทดสอบ CTB 5.1 การใช้งานกับ Spacy ช่วยให้รองรับการแยกวิเคราะห์จากข้อความดิบ แต่ NLTK API รองรับการแยกวิเคราะห์ประโยคที่มีโทเค็นก่อนหน้านี้เท่านั้น ขึ้นอยู่กับขนาดใหญ่ของจีน Electra-180g |
benepar_ar2 | ภาษาอาหรับ | 90.52 F1 บนชุดทดสอบ SPMRL2013/2014 รองรับเฉพาะการใช้ NLTK API สำหรับการแยกวิเคราะห์ประโยค tokenized ก่อนหน้านี้ ไม่รองรับการแยกวิเคราะห์จากข้อความดิบและการรวมตัวของ Spacy ขึ้นอยู่กับ XLM-R |
benepar_de2 | ชาวเยอรมัน | 92.10 F1 ในชุดทดสอบ SPMRL2013/2014 ขึ้นอยู่กับ XLM-R |
benepar_eu2 | เกี่ยวกับบาสก์ | 93.36 F1 ในชุดทดสอบ SPMRL2013/2014 การใช้งานกับ Spacy ก่อนต้องใช้การสนับสนุน Basque ใน Spacy ขึ้นอยู่กับ XLM-R |
benepar_fr2 | ภาษาฝรั่งเศส | 88.43 F1 ในชุดทดสอบ SPMRL2013/2014 ขึ้นอยู่กับ XLM-R |
benepar_he2 | ภาษาฮีบรู | 93.98 F1 ในชุดทดสอบ SPMRL2013/2014 รองรับเฉพาะการใช้ NLTK API สำหรับการแยกวิเคราะห์ประโยค tokenized ก่อนหน้านี้ ไม่รองรับการแยกวิเคราะห์จากข้อความดิบและการรวมตัวของ Spacy ขึ้นอยู่กับ XLM-R |
benepar_hu2 | ชาวฮังการี | 96.19 F1 บนชุดทดสอบ SPMRL2013/2014 การใช้งานกับ Spacy ต้องใช้แบบจำลองฮังการีสำหรับ Spacy NLTK API รองรับการแยกวิเคราะห์ประโยคที่ไม่ได้รับความสนใจก่อนหน้านี้เท่านั้น ขึ้นอยู่กับ XLM-R |
benepar_ko2 | เกาหลี | 91.72 F1 บนชุดทดสอบ SPMRL2013/2014 สามารถใช้กับโมเดลการแบ่งส่วนประโยคหลายภาษาของ Spacy (ต้องใช้ Spacy v3.0) NLTK API รองรับการแยกวิเคราะห์ประโยคที่ไม่ได้รับความสนใจก่อนหน้านี้เท่านั้น ขึ้นอยู่กับ XLM-R |
benepar_pl2 | ขัด | 97.15 F1 บนชุดทดสอบ SPMRL2013/2014 ขึ้นอยู่กับ XLM-R |
benepar_sv2 | ภาษาสวีเดน | 92.21 F1 ในชุดทดสอบ SPMRL2013/2014 สามารถใช้กับโมเดลการแบ่งส่วนประโยคหลายภาษาของ Spacy (ต้องใช้ Spacy v3.0) ขึ้นอยู่กับ XLM-R |
benepar_en3_wsj | ภาษาอังกฤษ | พิจารณาใช้ benepar_en3 หรือ benepar_en3_large แทน 95.55 F1 ในชุดทดสอบ WSJ Canonical ที่ใช้มานานหลายทศวรรษของสิ่งพิมพ์การแยกวิเคราะห์เขตเลือกตั้งภาษาอังกฤษ ขึ้นอยู่กับ Bert-Large ที่ไม่ได้ใช้งาน เราเชื่อว่าแนวทางคำอธิบายประกอบที่ได้รับการแก้ไขที่ใช้สำหรับการฝึกอบรม benepar_en3 / benepar_en3_large เหมาะสำหรับการใช้งานปลายน้ำมากขึ้นเพราะพวกเขาจัดการการใช้ภาษาในข้อความเว็บได้ดีขึ้นและสอดคล้องกับแนวทางปฏิบัติที่ทันสมัยในการแยกวิเคราะห์และห้องสมุด อย่างไรก็ตามเรามีโมเดล benepar_en3_wsj สำหรับกรณีที่ใช้การประชุม TreeBanking ที่แก้ไขแล้วไม่เหมาะสมเช่นการเปรียบเทียบโมเดลที่แตกต่างกันในชุดข้อมูลเดียวกัน |
การฝึกอบรมต้องใช้การโคลนนิ่งที่เก็บนี้จาก GitHub ในขณะที่รหัสโมเดลใน src/benepar มีการแจกจ่ายในแพ็คเกจ benepar บน PYPI สคริปต์การฝึกอบรมและการประเมินผลโดยตรงภายใต้ src/ ไม่ได้
benepar รวมถึง: NLTK 3.2, คบเพลิง-โครงสร้าง 0.4, Transformers 4.3.0 หรือเข้ากันได้make ภายใน EVALB/ ไดเรกทอรีเพื่อรวบรวมการทำงานของ evalb สิ่งนี้จะถูกเรียกจาก Python เพื่อการประเมินผล หากการฝึกอบรมเกี่ยวกับชุดข้อมูล SPMRL คุณจะต้องเรียกใช้ make Inside ภายใน EVALB_SPMRL/ ไดเรกทอรีแทน รุ่นใหม่สามารถได้รับการฝึกฝนโดยใช้คำสั่ง python src/main.py train ... ข้อโต้แย้งบางอย่างที่มีอยู่คือ:
| การโต้แย้ง | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
--model-path-base | ฐานเส้นทางสำหรับใช้สำหรับการบันทึกรุ่น | N/A |
--evalb-dir | เส้นทางไปยังไดเรกทอรี evalb | EVALB/ |
--train-path | เส้นทางสู่การฝึกต้นไม้ | data/wsj/train_02-21.LDC99T42 |
--train-path-text | โทเค็นแบบไม่ทำลายของข้อมูลการฝึกอบรม | เดาข้อความดิบ ดู --text-processing |
--dev-path | เส้นทางสู่การพัฒนาต้นไม้ | data/wsj/dev_22.LDC99T42 |
--dev-path-text | โทเค็นการพัฒนาแบบไม่ทำลายของข้อมูลการพัฒนา | เดาข้อความดิบ ดู --text-processing |
--text-processing | ฮิวริสติกสำหรับการคาดเดาข้อความดิบจากไฟล์ต้นไม้ tokenized แบบ descructively ดู load_trees() ใน src/treebanks.py | กฎเริ่มต้นสำหรับภาษาอื่นที่ไม่ใช่ภาษาอาหรับจีนและฮีบรู |
--subbatch-max-tokens | จำนวนโทเค็นสูงสุดในการประมวลผลแบบขนานในขณะที่การฝึกอบรม (ชุดเต็มอาจไม่พอดีกับหน่วยความจำ GPU) | ปี 2000 |
--parallelize | แจกจ่ายเลเยอร์แบบจำลองที่ผ่านการฝึกอบรมมาก่อน (เช่น T5) ใน GPU หลายตัว | ใช้ GPU มากที่สุด |
--batch-size | จำนวนตัวอย่างต่อการอัปเดตการฝึกอบรม | 32 |
--checks-per-epoch | จำนวนการประเมินการพัฒนาต่อยุค | 4 |
--numpy-seed | เมล็ดสุ่ม numpy | แบบสุ่ม |
--use-pretrained | ใช้ encoder ที่ผ่านการฝึกอบรมมาแล้ว | อย่าใช้เข้ารหัสที่ผ่านการฝึกอบรมมาล่วงหน้า |
--pretrained-model | แบบจำลองที่จะใช้ถ้า --use-pretrained ผ่าน อาจเป็นเส้นทางหรือรหัสโมเดลจาก HuggingFace Model Hub | bert-base-uncased |
--predict-tags | เพิ่มส่วนประกอบการติดแท็กส่วนหนึ่งและการสูญเสียเสริมลงในตัวแยกวิเคราะห์ | อย่าทำนายแท็ก |
--use-chars-lstm | ใช้การเป็นตัวแทน Word Charlstm ที่เรียนรู้ | อย่าใช้ Charlstm |
--use-encoder | ใช้เลเยอร์หม้อแปลงที่เรียนรู้บนโมเดลที่ผ่านการฝึกอบรมมาก่อนหรือ Charlstm | อย่าใช้เลเยอร์หม้อแปลงพิเศษ |
--num-layers | จำนวนเลเยอร์หม้อแปลงที่จะใช้ถ้า --use-encoder ใช้รหัสผ่าน | 8 |
--encoder-max-len | ความยาวประโยคสูงสุด (เป็นคำ) อนุญาตสำหรับเลเยอร์หม้อแปลงพิเศษ | 512 |
มีข้อโต้แย้งเพิ่มเติมสำหรับไฮเปอร์พารามิเตอร์อื่น ๆ ดู make_hparams() ใน src/main.py สิ่งเหล่านี้สามารถระบุได้ในบรรทัดคำสั่งเช่น --num-layers 2 (สำหรับพารามิเตอร์ตัวเลข) --predict-tags (สำหรับพารามิเตอร์บูลีนที่เริ่มต้นเป็นเท็จ) หรือ --no-XXX (สำหรับพารามิเตอร์บูลีน เป็นจริง)
สำหรับการประเมินผลการพัฒนาแต่ละครั้งจะมีการคำนวณคะแนน F ในชุดการพัฒนาและเปรียบเทียบกับที่ดีที่สุดก่อนหน้านี้ หากรุ่นปัจจุบันดีกว่ารุ่นก่อนหน้าจะถูกลบและรุ่นปัจจุบันจะถูกบันทึก ชื่อไฟล์ใหม่จะได้มาจากฐานรูปแบบที่ให้มาและการพัฒนาคะแนน F
ก่อนที่จะฝึกอบรมตัวแยกวิเคราะห์คุณจะต้องได้รับข้อมูลการฝึกอบรมที่เหมาะสมก่อน เราให้คำแนะนำเกี่ยวกับวิธีการประมวลผลชุดข้อมูลมาตรฐานเช่น PTB, CTB และข้อมูลงานที่ใช้ร่วมกัน SMPRL 2013/2014 หลังจากทำตามคำแนะนำสำหรับข้อมูล WSJ ภาษาอังกฤษคุณสามารถใช้คำสั่งต่อไปนี้เพื่อฝึกอบรมตัวแยกวิเคราะห์ภาษาอังกฤษโดยใช้ไฮเปอร์พารามิเตอร์เริ่มต้น:
python src/main.py train --use-pretrained --model-path-base models/en_bert_base
ดู EXPERIMENTS.md สำหรับตัวอย่างเพิ่มเติมของตัวเลือกไฮเปอร์พารามิเตอร์ที่ดี
แบบจำลองที่บันทึกสามารถประเมินได้ในคลังการทดสอบโดยใช้คำสั่ง python src/main.py test ... พร้อมอาร์กิวเมนต์ต่อไปนี้:
| การโต้แย้ง | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
--model-path | เส้นทางของโมเดลที่บันทึกไว้ | N/A |
--evalb-dir | เส้นทางไปยังไดเรกทอรี evalb | EVALB/ |
--test-path | เส้นทางสู่การทดสอบต้นไม้ | data/23.auto.clean |
--test-path-text | โทเค็นการทดสอบแบบไม่ทำลายของข้อมูลการทดสอบ | เดาข้อความดิบ ดู --text-processing |
--text-processing | ฮิวริสติกสำหรับการคาดเดาข้อความดิบจากไฟล์ต้นไม้ tokenized แบบ descructively ดู load_trees() ใน src/treebanks.py | กฎเริ่มต้นสำหรับภาษาอื่นที่ไม่ใช่ภาษาอาหรับจีนและฮีบรู |
--test-path-raw | เส้นทางอื่น ๆ ในการทดสอบต้นไม้ที่ใช้สำหรับ EvalB เท่านั้น (ใช้ในการตรวจสอบอีกครั้งว่าการประเมินผลของต้นไม้ที่ประมวลผลล่วงหน้าไม่มีข้อบกพร่องใด ๆ ) | เปรียบเทียบกับต้นไม้จาก --test-path |
--subbatch-max-tokens | จำนวนโทเค็นสูงสุดในการประมวลผลแบบขนาน (GPU มีหน่วยความจำไม่เพียงพอที่จะประมวลผลชุดข้อมูลเต็มรูปแบบในชุดเดียว) | 500 |
--parallelize | แจกจ่ายเลเยอร์แบบจำลองที่ผ่านการฝึกอบรมมาก่อน (เช่น T5) ใน GPU หลายตัว | ใช้ GPU มากที่สุด |
--output-path | เส้นทางที่จะเขียนต้นไม้ที่คาดการณ์ไว้ (ใช้ "-" สำหรับ stdout) | อย่าบันทึกต้นไม้ที่คาดการณ์ไว้ |
--no-predict-tags | ใช้แท็กส่วนหนึ่งของทองคำเมื่อเรียกใช้ EvalB นี่คือมาตรฐานสำหรับสิ่งพิมพ์และการละเว้นธงนี้อาจให้คะแนน F1 สูงผิดพลาด | ใช้แท็กส่วนหนึ่งที่คาดการณ์ไว้สำหรับ EvalB หากมีอยู่ |
ตัวอย่างเช่นคุณสามารถประเมินรูปแบบที่ผ่านการฝึกอบรมโดยใช้คำสั่งต่อไปนี้:
python src/main.py test --model-path models/en_bert_base_dev=*.pt
แพ็คเกจ benepar สามารถใช้จุดตรวจที่บันทึกไว้โดยตรงโดยแทนที่ชื่อรุ่นเช่น benepar_en3 ด้วยเส้นทางเช่น models/en_bert_base_dev_dev=95.67.pt อย่างไรก็ตามการปล่อยจุดตรวจไฟล์เดียวมีข้อบกพร่องเล็กน้อย:
ใช้ src/export.py เพื่อแปลงไฟล์จุดตรวจเป็นไดเรกทอรีที่ห่อหุ้มทุกอย่างเกี่ยวกับรูปแบบที่ผ่านการฝึกอบรม ตัวอย่างเช่น,
python src/export.py export
--model-path models/en_bert_base_dev=*.pt
--output-dir=models/en_bert_base
เมื่อส่งออกจะมีตัวเลือก --compress ที่ปรับน้ำหนักของรุ่นเล็กน้อยเพื่อให้สามารถบีบอัดไดเรกทอรีเอาต์พุตลงในไฟล์เก็บถาวรที่มีขนาดเล็กกว่ามาก เราใช้สิ่งนี้สำหรับรุ่นที่เป็นทางการของเราเพราะมันเป็นความยุ่งยากในการแจกจ่ายน้ำหนักรุ่นที่มีขนาด 2GB+ เมื่อใช้ตัวเลือก --compress แนะนำให้ระบุชุดทดสอบเพื่อตรวจสอบว่าการบีบอัดมีผลกระทบน้อยที่สุดต่อความแม่นยำในการแยกวิเคราะห์ ไม่แนะนำให้ใช้ข้อมูลการพัฒนาสำหรับการตรวจสอบเนื่องจากข้อมูลการพัฒนาถูกใช้ไปแล้วสำหรับเกณฑ์การเลือกแบบจำลองในระหว่างการฝึกอบรม
python src/export.py export
--model-path models/en_bert_base_dev=*.pt
--output-dir=models/en_bert_base
--test-path=data/wsj/test_23.LDC99T42
สคริปต์ src/export.py ยังมีคำสั่งย่อย test ที่คล้ายกับ python src/main.py test ยกเว้นว่ารองรับโมเดลที่ส่งออกและมีธงที่แตกต่างกันเล็กน้อย เราสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่าตัวแยกวิเคราะห์ภาษาอังกฤษของเราโดยใช้ Bert-Large-OcceSed ได้รับ 95.55 F1 ในชุดทดสอบ WSJ Canonical:
python src/export.py test --model-path benepar_en3_wsj --test-path data/wsj/test_23.LDC99T42
ดู EXPERIMENTS.md สำหรับคำแนะนำเกี่ยวกับวิธีการทำซ้ำการทดลองที่รายงานในเอกสาร ACL 2018 และ 2019 ของเรา
หากคุณใช้ซอฟต์แวร์นี้เพื่อการวิจัยโปรดอ้างอิงเอกสารของเราดังนี้:
@inproceedings{kitaev-etal-2019-multilingual,
title = "Multilingual Constituency Parsing with Self-Attention and Pre-Training",
author = "Kitaev, Nikita and
Cao, Steven and
Klein, Dan",
booktitle = "Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics",
month = jul,
year = "2019",
address = "Florence, Italy",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/P19-1340",
doi = "10.18653/v1/P19-1340",
pages = "3499--3505",
}
@inproceedings{kitaev-klein-2018-constituency,
title = "Constituency Parsing with a Self-Attentive Encoder",
author = "Kitaev, Nikita and
Klein, Dan",
booktitle = "Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)",
month = jul,
year = "2018",
address = "Melbourne, Australia",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/P18-1249",
doi = "10.18653/v1/P18-1249",
pages = "2676--2686",
}
รหัสในที่เก็บและบางส่วนของ readme นี้จะขึ้นอยู่กับ https://github.com/mitchellsterns/minimal-span-parser