ไม่ใช่ผลิตภัณฑ์ของ Google อย่างเป็นทางการ
Bigbird เป็นหม้อแปลงที่ใช้ความเข้มข้นอย่างเบาบางซึ่งขยายโมเดลที่ใช้หม้อแปลงเช่นเบิร์ตไปจนถึงลำดับที่ยาวกว่ามาก ยิ่งไปกว่านั้น Bigbird มาพร้อมกับความเข้าใจทางทฤษฎีเกี่ยวกับความสามารถของหม้อแปลงที่สมบูรณ์ที่โมเดลเบาบางสามารถจัดการได้
เป็นผลมาจากความสามารถในการจัดการกับบริบทที่ยาวขึ้น Bigbird ปรับปรุงประสิทธิภาพการทำงานอย่างมากในงาน NLP ต่างๆเช่นการตอบคำถามและการสรุป
รายละเอียดเพิ่มเติมและการเปรียบเทียบสามารถพบได้ในงานนำเสนอของเรา
หากคุณพบว่ามีประโยชน์โปรดอ้างอิงกระดาษ Neurips 2020 ของเรา:
@article{zaheer2020bigbird,
title={Big bird: Transformers for longer sequences},
author={Zaheer, Manzil and Guruganesh, Guru and Dubey, Kumar Avinava and Ainslie, Joshua and Alberti, Chris and Ontanon, Santiago and Pham, Philip and Ravula, Anirudh and Wang, Qifan and Yang, Li and others},
journal={Advances in Neural Information Processing Systems},
volume={33},
year={2020}
}
ไดเรกทอรีที่สำคัญที่สุดคือ core มีสามไฟล์หลักใน core
การสาธิตการปรับจูนอย่างรวดเร็วสำหรับการจำแนกประเภทข้อความมีให้ใน imdb.ipynb
โปรดสร้างโครงการก่อนและสร้างอินสแตนซ์ในโซนที่มีโควต้าดังนี้
gcloud compute instances create
bigbird
--zone=europe-west4-a
--machine-type=n1-standard-16
--boot-disk-size=50GB
--image-project=ml-images
--image-family=tf-2-3-1
--maintenance-policy TERMINATE
--restart-on-failure
--scopes=cloud-platform
gcloud compute tpus create
bigbird
--zone=europe-west4-a
--accelerator-type=v3-32
--version=2.3.1
gcloud compute ssh --zone " europe-west4-a " " bigbird "
สำหรับภาพประกอบเราใช้ชื่ออินสแตนซ์ bigbird และ Zone europe-west4-a แต่อย่าลังเลที่จะเปลี่ยน รายละเอียดเพิ่มเติมเกี่ยวกับการสร้าง Google Cloud TPU สามารถพบได้ในเอกสารออนไลน์
git clone https://github.com/google-research/bigbird.git
cd bigbird
pip3 install -e .คุณสามารถค้นหาจุดตรวจสอบที่ได้รับการปรับแต่งและปรับแต่งได้ในถังเก็บข้อมูล Google Cloud ของเรา
ทางเลือกคุณสามารถดาวน์โหลดได้โดยใช้ gsutil เป็น
mkdir -p bigbird/ckpt
gsutil cp -r gs://bigbird-transformer/ bigbird/ckpt/ถังเก็บข้อมูลประกอบด้วย:
bigbr_base ) และขนาดใหญ่ ( bigbr_large ) มันสอดคล้องกับรุ่นเข้ารหัสเหมือน Bert/Roberta เท่านั้น หลังจากการใช้งาน Bert และ Roberta ดั้งเดิมพวกเขาเป็นหม้อแปลงที่มีการโพสต์ normalization, IE Layer norm กำลังเกิดขึ้นหลังจากเลเยอร์ความสนใจ อย่างไรก็ตามการติดตาม Rothe et al เราสามารถใช้บางส่วนในแฟชั่นตัวเข้ารหัส Decoder โดยการเชื่อมต่อพารามิเตอร์ตัวเข้ารหัสและตัวถอดรหัสดังที่แสดงในสคริปต์การเปิดตัว Bigbird/Summarization/Roberta_Base.shbigbp_large ) อีกครั้งหลังจากการใช้งานดั้งเดิมของเพกาซัสพวกเขาเป็นหม้อแปลงที่มีการทำให้เป็นปกติก่อน พวกเขามีชุดเครื่องเข้ารหัสแบบจำลองแบบแยกต่างหาก นอกจากนี้สำหรับชุดข้อมูลการสรุปเอกสารยาวเราได้แปลงจุดตรวจ Pegasus ( model.ckpt-0 ) สำหรับแต่ละชุดข้อมูลและยังให้จุดตรวจที่ปรับแต่งอย่างละเอียด ( model.ckpt-300000 ) ซึ่งทำงานบนเอกสารที่ยาวขึ้นtf.SavedModel ที่ปรับแต่งอย่างละเอียดสำหรับการสรุปเอกสารยาวซึ่งสามารถใช้โดยตรงสำหรับการทำนายและการประเมินผลตามที่แสดงใน colab nootebook สำหรับการเริ่มต้นอย่างรวดเร็วด้วย Bigbird หนึ่งสามารถเริ่มต้นด้วยการเรียกใช้รหัสการทดลองการจำแนกประเภทในไดเรกทอรี classifier เพื่อเรียกใช้รหัสเพียงแค่ดำเนินการ
export GCP_PROJECT_NAME=bigbird-project # Replace by your project name
export GCP_EXP_BUCKET=gs://bigbird-transformer-training/ # Replace
sh -x bigbird/classifier/base_size.shในการใช้ encoder โดยตรงแทน Say Bert Model เราสามารถใช้รหัสต่อไปนี้
from bigbird . core import modeling
bigb_encoder = modeling . BertModel (...)มันสามารถแทนที่ encoder ของ Bert ได้อย่างง่ายดาย
อีกทางเลือกหนึ่งสามารถลองเล่นกับเลเยอร์ของ Bigbird encoder
from bigbird . core import encoder
only_layers = encoder . EncoderStack (...) ธงและการกำหนดค่าทั้งหมดจะอธิบายใน core/flags.py ที่นี่เราอธิบายพารามิเตอร์การกำหนดค่าที่สำคัญบางอย่าง
attention_type ใช้เพื่อเลือกประเภทของความสนใจที่เราจะใช้ การตั้งค่าเป็น block_sparse เรียกใช้โมดูลความสนใจของ Bigbird
flags . DEFINE_enum (
"attention_type" , "block_sparse" ,
[ "original_full" , "simulated_sparse" , "block_sparse" ],
"Selecting attention implementation. "
"'original_full': full attention from original bert. "
"'simulated_sparse': simulated sparse attention. "
"'block_sparse': blocked implementation of sparse attention." ) block_size ใช้เพื่อกำหนดขนาดของบล็อกในขณะที่ num_rand_blocks ใช้เพื่อตั้งค่าจำนวนบล็อกสุ่ม ปัจจุบันรหัสใช้ขนาดหน้าต่าง 3 บล็อกและ 2 บล็อกทั่วโลก รหัสปัจจุบันรองรับเทนเซอร์แบบคงที่เท่านั้น
ประเด็นสำคัญที่ควรทราบ:
original_full ได้รับการแนะนำเนื่องจากไม่มีประโยชน์ในการใช้ความสนใจ Bigbird ที่กระจัดกระจาย เมื่อเร็ว ๆ นี้สนามกีฬาระยะยาวได้จัดทำเกณฑ์มาตรฐานหกงานที่ต้องใช้บริบทที่ยาวนานขึ้นและทำการทดลองเพื่อเปรียบเทียบมาตรฐานหม้อแปลงยาวที่มีอยู่ทั้งหมด ผลลัพธ์จะแสดงด้านล่าง โมเดล Bigbird ซึ่งแตกต่างจากคู่ของมันลดการใช้หน่วยความจำอย่างชัดเจนโดยไม่ต้องเสียสละประสิทธิภาพ
