ซอร์สโค้ดสำหรับ ACL 2022 Paper "การเพิ่มความเชื่อมโยง: เมื่อรูปแบบภาษาที่ผ่านการฝึกฝนของคุณไม่ได้ให้ความสนใจเพียงพอ" (arxiv, ACL กวีนิพนธ์)
การเชื่อมโยงความหมายระยะยาวยังคงเป็นความท้าทายในการสร้างภาษาอัตโนมัติและความเข้าใจ เราแสดงให้เห็นว่าแบบจำลองภาษาขนาดใหญ่ได้เรียนรู้ผลกระทบของคำที่อยู่ห่างไกลอย่างไม่เพียงพอต่อการทำนายครั้งต่อไป เรานำเสนอ การเชื่อมโยงการ เชื่อมโยงการเพิ่มขั้นตอนการอนุมานที่เพิ่มการมุ่งเน้นของ LM ในบริบทที่ยาวนาน เราแสดงให้เห็นถึงประโยชน์ของการเชื่อมโยงกันที่เพิ่มขึ้นด้วยแบบจำลองที่ผ่านการฝึกฝนโดยการวิเคราะห์แบบกระจายของการตอบสนองข้อความและกล่องโต้ตอบทั่วไปที่สร้างขึ้น นอกจากนี้ยังพบว่าการเชื่อมโยงกันซึ่งเพิ่มขึ้นด้วยโมเดลที่ทันสมัยสำหรับงาน NLP แบบศูนย์การยิงที่หลากหลายทำให้ได้ผลการเพิ่มประสิทธิภาพโดยไม่มีการฝึกอบรมเพิ่มเติม
หากคุณพบว่ากระดาษและรหัสมีประโยชน์โปรดแสดงความกรุณา repo นี้และอ้างอิงกระดาษ ขอบคุณมาก!
@inproceedings { malkin-etal-2022-coherence , title = " Coherence boosting: When your pretrained language model is not paying enough attention " , author = " Malkin, Nikolay and Wang, Zhen and Jojic, Nebojsa " , booktitle = " Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) " , month = may, year = " 2022 " , address = " Dublin, Ireland " , publisher = " Association for Computational Linguistics " , url = " https://aclanthology.org/2022.acl-long.565 " , doi = " 10.18653/v1/2022.acl-long.565 " , pages = " 8214--8236 " }เรานำเสนอโปรแกรมสาธิตเพื่อแสดงให้เห็นถึงการขาดการเชื่อมโยงกันใน LMS ที่ผ่านการฝึกอบรมมาก่อนที่มีอยู่เช่นล้มเหลวในการทำนายโทเค็นถัดไปที่ได้รับบริบทซึ่งต้องการความเข้าใจที่ห่างไกล ข้อผิดพลาดดังกล่าวสามารถแก้ไขได้โดย การเพิ่มการเชื่อมโยงการเชื่อมโยง ที่เราเสนอซึ่งคาดการณ์โทเค็นถัดไปโดยการผสมล็อกเชิงเส้นสองการแจกแจงจากบริบททั้งหมดและบริบทบางส่วน
> >> from cb_demo import contrasting > >> contrasting ( model_name = 'gpt2' , context = ' Ballad metre is "less regular and more conversational" than common metre' , - - partial_length = 8 , - - alpha = 0.5 ) [ out ] Top tokens based on full context : Ballad metre is "less regular and more conversational" than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.405 9.03 % 2 Ġin - 3.900 2.02 % 3 . - 3.978 1.87 % 4 , - 4.097 1.66 % 5 Ġpractice - 4.287 1.37 % ... ... ... ... 13 Ġmetre ** - 5.098 0.610609 % * * Target Token Top tokens based on partial context : regular and more conversational " than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.547 7.83 % 2 ĠEnglish - 3.352 3.50 % 3 . - 3.427 3.25 % 4 Ġconversation - 3.445 3.19 % 5 , - 3.634 2.64 % ... ... ... ... 14103 Ġmetre ** - 13.450 0.000144 % * * Target Token Contrastive next token prediction : Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġmetre ** - 0.923 39.74 % 2 Ġsense - 2.334 9.69 % 3 Ġmeter - 2.785 6.17 % 4 Ġin - 3.210 4.03 % 5 Ġfoot - 3.220 3.99 % * * Target Tokenคุณสามารถทำซ้ำผลลัพธ์สำหรับตัวอย่างบางส่วนในรูปที่ 1 ของกระดาษด้วยรหัสต่อไปนี้:
python cb_demo . py - - context = ' Ballad metre is "less regular and more conversational" than common metre' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Isley Brewing Company: Going Mintal — a minty milk chocolate stout' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Other times anxiety is not as easy to see, but can still be just as debilitating' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5Lambada นั้นคล้ายคลึงกับตัวอย่างที่แสดงไว้ข้างต้นโดยที่แบบจำลองคาดว่าจะทำนายคำสุดท้ายในข้อความของประโยคหลายประโยค ชุดข้อมูลนี้เป็นเกณฑ์มาตรฐานมาตรฐานในการประเมินโมเดล Langauge ที่ทันสมัย (ตัวอย่าง)
ที่สำคัญกว่านั้นงานนี้ต้องใช้เหตุผลอย่างชัดเจนในบริบทที่กว้าง: มนุษย์สามารถคาดเดาคำสุดท้ายได้อย่างน่าเชื่อถือเมื่อได้รับข้อความทั้งหมด แต่ไม่ใช่เมื่อได้รับเพียงประโยคสุดท้ายเท่านั้น สถานที่ให้บริการดังกล่าวทำให้เกณฑ์มาตรฐานนี้เป็นแบบทดสอบที่สมบูรณ์แบบเพื่อประเมินประสิทธิภาพของ การเพิ่มการเชื่อมโยงการเชื่อมโยง ที่เราเสนอ
ในการเรียกใช้การทดลอง Lambada เพียงเรียกใช้คำสั่งต่อไปนี้:
python main . py - - tasks = 'lambada' - - models = 'gpt2-small' - - use_val = False - - alpha_start = 1 - - alpha_end = 1 - - alpha_step = 0.1 - - slen_start = 10 - - slen_end = 10อาร์กิวเมนต์ python main.py --help สำคัญ
--models : ชื่อของโมเดลภาษาที่ผ่านการฝึกอบรมมาก่อน, แยกโดย semicolon หากคุณต้องการเรียกใช้หลายรุ่นในเวลาเดียวกันเช่น 'gpt2-small;gpt2-medium' ; หากคุณต้องการใช้รุ่น GPT-3 ให้ดูบันทึกเกี่ยวกับ GPT-3--use_val : ไม่ว่าจะใช้ชุดการตรวจสอบเพื่อเลือกสองพารามิเตอร์ alpha และ slen แทนค่าสัมประสิทธิ์การเพิ่มและความยาวสำหรับบริบทบางส่วนalpha --alpha_start --alpha_end --alpha_step--slen_start --slen_end --slen_step ค้นหา GRID slen ไฮเปอร์พารามิเตอร์; โปรดทราบว่าการตั้งค่าพารามิเตอร์ทั้งสองมีอิทธิพลต่อความเร็วการอนุมานสำหรับงาน Lambadaเราประเมิน การเชื่อมโยง ที่เสนอในงาน NLU ต่อไปนี้
| งาน | ปิดงาน | คำถามการตอบรับ | ข้อความการจำแนกข้อความ | NLI | ข้อเท็จจริงความรู้เรื่องการดึงข้อมูลการดึง |
|---|---|---|---|---|---|
| ข้อมูล | StoryCloze Hellaswag Copa | Commonsenseqa OpenBookqa อาร์คง่าย/ท้าทาย Piqa | SST-2/5 ผู้ที่ได้รับการแต่งตั้ง agnews | rte CB Boolq | Lama |
ชุดข้อมูลส่วนใหญ่สามารถโหลดได้โดยชุดข้อมูลของ Hugginface; มีเพียงไม่กี่คนเท่านั้นที่ต้องการดาวน์โหลดด้วยคำแนะนำด้วยตนเองเมื่อคุณเรียกใช้รหัส
ในการเรียกใช้การทดลอง NLU เพียงเรียกใช้คำสั่งต่อไปนี้:
python main . py - - tasks = 'storycloze;csqa;openbookqa' - - models = 'gpt2-small;gpt2-medium;gpt2-large' - - alpha_start = 2 - - alpha_end = - 3 - - alpha_step = 0.01python main.py --help
--models : ชื่อของโมเดลภาษาที่ผ่านการฝึกอบรมมาก่อน, แยกโดย semicolon ถ้าคุณต้องการเรียกใช้หลายรุ่นในเวลาเดียวกันเช่น 'gpt2-small;gpt2-medium'--alpha_end --alpha_start--use_val alpha slen ใช้การตรวจสอบความถูกต้องเพื่อเลือกส่วนต่าง ๆ--alpha_step : พารามิเตอร์การค้นหากริดสำหรับ alpha ไฮเปอร์พารามิเตอร์; โปรดทราบว่ารหัสแคชระดับกลางและคุณมีอิสระที่จะเปลี่ยนพารามิเตอร์เหล่านี้หลังจากเรียกใช้การอนุมานเป็นครั้งเดียวapi_key.txtนอกเหนือจากงานก่อนหน้านี้ Codebase ของเรามีความยืดหยุ่นเพียงพอที่จะรวมชุดข้อมูลหลายตัวเลือกใหม่ใด ๆ ด้วยความพยายามขนาดเล็ก (ได้รับแรงบันดาลใจจากโครงการโอเพ่นซอร์ส LM-Evaluation-Harness) มีสามขั้นตอน:
__init__.py ในโฟลเดอร์ tasksMultipleChoiceTask ด้วยฟังก์ชั่นการประมวลผลข้อมูลล่วงหน้า (เช่น load_data , standardize )get_contrast_ctx ซึ่งเป็นที่ที่คุณกำหนดพรอมต์ฟรีของคุณเอง
เรามีเครื่องห่อหุ้มรุ่นรุ่นที่เข้ากันได้กับห้องสมุด HuggingFace transformers ใน generation/generation.py คุณสามารถสร้างตัวแปรที่เชื่อมโยงกันได้ของ LM Autoregressive ใด ๆ โดยใช้คลาสในสคริปต์ตัวอย่าง
> >> boosted_model = generation . BoostedModel ( base_model , k = 8 , alpha_long = 1.5 , alpha_short = - 0.5 )boosted_model นั้นสามารถใช้กับฟังก์ชัน generate ได้อย่าง
> >> ins = T . LongTensor ([ tokenizer . encode ( 'Once upon a midnight dreary,' )]) > >> outputs = boosted_model . generate ( input_ids = ins , do_sample = True , max_length = 100 , top_p = 0.95 ) > >> tokenizer . decode ( outputs [ 0 ]) "Once upon a midnight dreary, while I pondered over these things, I suddenly became aware of a strange and terrible noise. I turned round, and saw that the old man was standing near me. He was wearing a black suit, with a black tie, and a black hat. He had a long, thin, black beard, and his eyes were black. His hair was of a dark brown colour, and was very long. His face was rather large, and his lips were somewhat"ยาว สำหรับสถานการณ์ที่บริบทสั้นเป็นข้อความที่สร้างขึ้นในปัจจุบันลบคำนำหน้าของความยาวที่แน่นอน ( เช่น เทิร์นก่อนหน้าในการสนทนา) โดยการตั้งค่าแบบไดนามิก boosted_model.k เป็นความยาวคำนำหน้าลบ
เรานำเสนอเอาต์พุตการสร้างแบบมีเงื่อนไขบางอย่าง ตัวชี้วัดการประเมินผลที่แสดงในตารางที่ 1 สามารถประเมินได้โดยใช้รหัสจากที่เก็บนี้สำหรับสี่คอลัมน์แรกหรือใช้รหัสที่นี่สำหรับตัวชี้วัดการเชื่อมโยงระยะยาวใหม่ที่เราแนะนำ
หากคุณมีคำถามใด ๆ โปรดติดต่อ Kolya (Nikolay.Malkin ที่ Mila.Quebec) และ Zhen (Wang.9215 ที่ OSU.edu)