คาตาลันอัลเบิร์ต (Lite Bert), Google ใช้เวลาเรียนรู้ด้วยตนเองเกี่ยวกับการเป็นตัวแทนภาษา
ได้รับการฝึกฝนเกี่ยวกับคลังข้อมูลของ คู่ประโยค 19.557.475 (มีคำที่ไม่ซ้ำกัน 729 ล้านคำ) สกัดจากชุดย่อยคาตาลันของชุดข้อมูลออสการ์ของ Inria เราใช้ชุดการตรวจสอบความถูกต้องของคู่ประโยค 833.259 เพื่อประเมินแบบจำลอง
คุณสามารถอ่านกระดาษอัลเบิร์ตต้นฉบับได้ที่นี่
พวกเขามีอยู่ที่หน้าฮับโมเดลของ HuggingFace
| แบบอย่าง | โค้ง. | ข้อมูลการฝึกอบรม | เล่นกับมัน | เห็นภาพมัน |
|---|---|---|---|---|
codegram / calbert-tiny-uncased | เล็ก (ไม่ได้ใช้) | ออสการ์ (ข้อความ 4.3 GB) | การ์ดบน Model Hub | เห็นภาพใน Exbert |
codegram / calbert-base-uncased | ฐาน (uncased) | ออสการ์ (ข้อความ 4.3 GB) | การ์ดบน Model Hub | เห็นภาพใน Exbert |
คุณเพียงแค่ต้องการห้องสมุด transformers ไม่มีอะไรจะโคลนหรือติดตั้ง
ในการเลือกรุ่นรุ่นที่จะใช้ ( tiny หรือ base ) พิจารณาว่ารุ่นที่เล็กกว่านั้นมีประสิทธิภาพน้อยกว่า แต่ nimbler และทรัพยากรที่หิวน้อยลง
pip install transformers from transformers import AutoModel , AutoTokenizer
tokenizer = AutoTokenizer . from_pretrained ( "codegram/calbert-base-uncased" )
model = AutoModel . from_pretrained ( "codegram/calbert-base-uncased" )
model . eval () # disable dropoutตอนนี้ไปยังสองกรณีการใช้งานหลักที่คุณสามารถทำได้
นี่เป็นกรณีการใช้งานที่ง่ายที่สุด แต่ก็ไม่มีประโยชน์มากที่สุด ยังนี่คือ! ไม่ว่าคำใดที่คุณต้องการหน้ากากให้ใช้โทเค็นพิเศษ [MASK] เพื่อระบุ แบบจำลองจะส่งออกผู้สมัครที่เป็นไปได้มากที่สุดสำหรับคำที่สวมหน้ากาก
from transformers import pipeline
calbert_fill_mask = pipeline ( "fill-mask" , model = "codegram/calbert-base-uncased" , tokenizer = "codegram/calbert-base-uncased" )
results = calbert_fill_mask ( "M'agrada [MASK] això" )
# results
# [{'sequence': "[CLS] m'agrada molt aixo[SEP]", 'score': 0.614592969417572, 'token': 61},
# {'sequence': "[CLS] m'agrada moltíssim aixo[SEP]", 'score': 0.06058056280016899, 'token': 4867},
# {'sequence': "[CLS] m'agrada més aixo[SEP]", 'score': 0.017195818945765495, 'token': 43},
# {'sequence': "[CLS] m'agrada llegir aixo[SEP]", 'score': 0.016321714967489243, 'token': 684},
# {'sequence': "[CLS] m'agrada escriure aixo[SEP]", 'score': 0.012185849249362946, 'token': 1306}]เวกเตอร์คุณลักษณะที่แยกออกมาสามารถใช้ในการจัดทำดัชนีเอกสารเป็นเวกเตอร์หนาแน่นใน Elasticsearch และดำเนินการค้นหาที่คล้ายคลึงกัน
กรณีการใช้งานอื่นคือ การทำความเข้าใจภาษาธรรมชาติ -การใช้เวกเตอร์เหล่านี้เป็นตัวแทนนามธรรมของเอกสาร/ประโยคที่สามารถใช้เป็นอินพุตไปยังโมเดลดาวน์สตรีมอื่น ๆ เช่นตัวแยกประเภท
นี่คือวิธีการแยกเวกเตอร์จากประโยคหรือเอกสาร:
import torch
# Tokenize in sub-words with SentencePiece
tokenized_sentence = tokenizer . tokenize ( "M'és una mica igual" )
# ['▁m', "'", 'es', '▁una', '▁mica', '▁igual']
# 1-hot encode and add special starting and end tokens
encoded_sentence = tokenizer . encode ( tokenized_sentence )
# [2, 109, 7, 71, 36, 371, 1103, 3]
# NB: Can be done in one step : tokenize.encode("M'és una mica igual")
# Feed tokens to Calbert as a torch tensor (batch dim 1)
encoded_sentence = torch . tensor ( encoded_sentence ). unsqueeze ( 0 )
embeddings , _ = model ( encoded_sentence )
embeddings . size ()
# torch.Size([1, 8, 768])
embeddings . detach ()
# tensor([[[-0.0261, 0.1166, -0.1075, ..., -0.0368, 0.0193, 0.0017],
# [ 0.1289, -0.2252, 0.9881, ..., -0.1353, 0.3534, 0.0734],
# [-0.0328, -1.2364, 0.9466, ..., 0.3455, 0.7010, -0.2085],
# ...,
# [ 0.0397, -1.0228, -0.2239, ..., 0.2932, 0.1248, 0.0813],
# [-0.0261, 0.1165, -0.1074, ..., -0.0368, 0.0193, 0.0017],
# [-0.1934, -0.2357, -0.2554, ..., 0.1831, 0.6085, 0.1421]]]) นี่เป็นส่วนหนึ่งของการวิจัยประยุกต์ที่เราทำที่ CodeGram (ใครจะขอบคุณสำหรับเวลาและการคำนวณ!)
นี่คงเป็นความเจ็บปวดมากมายที่จะสร้างโดยไม่ต้องกอดหม้อแปลงที่ทรงพลังของห้องสมุดและห้องสมุดโทเคนิเซอร์ ขอบคุณที่ทำให้ NLP ดีจริง ๆ ที่ได้ร่วมงาน!
นอกจากนี้ต้องขอบคุณ Google Research สำหรับการสร้างและเปิดการจัดหาอัลเบิร์ตตั้งแต่แรก
อัลเบิร์ตเป็นแบบจำลองภาษานั่นคือเครือข่ายประสาทที่สามารถเรียนรู้ลำดับด้วยโครงสร้างบางอย่างเช่นประโยคในภาษาธรรมชาติ (แต่ไม่เพียง แต่ภาษาธรรมชาติ!)
แต่พวกเขาเรียนรู้ภาษาได้อย่างไร? แบบจำลองภาษาที่แตกต่างกันได้รับการฝึกฝนด้วย งานข้ออ้าง ที่แตกต่างกันคือความท้าทายที่คุณให้พวกเขาเพื่อให้พวกเขาสามารถเรียนรู้วิธีการทำงานของภาษา ความคิดคือเพื่อให้ได้งานที่ดีในงานนี้พวกเขาจะต้องเรียนรู้ไวยากรณ์ของภาษาทางอ้อมและแม้แต่ความหมายและสไตล์
แบบจำลองภาษาแบบดั้งเดิม (หรือที่รู้จักกันในชื่อ สาเหตุ ) มักจะได้รับการฝึกฝนด้วยงาน ทำนายคำต่อไป ในลำดับเช่นนี้:
อย่างไรก็ตามอัลเบิร์ตเป็นอีกครอบครัวหนึ่งที่เรียกว่า โมเดลภาษาที่สวมหน้ากาก ในครอบครัวนี้งานข้ออ้างที่พวกเขาต้องเรียนรู้มีความคล้ายคลึงกัน แต่แทนที่จะทำนายคำสุดท้ายในลำดับเสมอคำบางคำในประโยคจะถูกสุ่มกลายเป็นช่องว่าง (หรือ สวมหน้ากาก ) เช่นนี้:
งานนี้ยากขึ้นเล็กน้อยและที่สำคัญกว่านั้นคือต้องเข้าใจบริบทรอบ ๆ ช่องว่างที่ดีกว่ามาก
ปรากฎว่าเมื่อรูปแบบภาษาได้รับจริง ๆ ดีจริงๆในงานข้ออ้างที่ไม่มีจุดหมายนี้มันสามารถนำกลับมาใช้ใหม่ได้อย่างง่ายดายสำหรับงานที่น่าสนใจมากขึ้น
เมื่อภาษาเรียนรู้ไวยากรณ์และความหมายมันสามารถกลายเป็นตัวจําแนกที่ดีมากของประโยคและแม้แต่เอกสารทั้งหมดเช่น
หากคุณสอนให้จำแนกทวีตหรือเอกสารเป็นหมวดหมู่ (หรือระบุความเชื่อมั่นหรือความเป็นพิษ) มันไม่ได้เห็นเพียงแค่ตัวละครที่สับสนอีกต่อไป แต่มันเป็น "การอ่าน" เอกสารในระดับที่เป็นนามธรรมมากขึ้น (หมายเหตุคำพูดของอากาศนี่ไม่ใช่เวทมนตร์ แต่อาจเป็นสิ่งที่ใกล้เคียงที่สุด)
เพราะไม่มีแบบจำลองภาษาในคาตาลัน! และมีข้อความคาตาลันจำนวนมากที่จะประมวลผล (ในคาตาโลเนีย)
สำหรับการจัดการการพึ่งพาเราใช้บทกวี (และนักเทียบท่าแน่นอน)
pip install -U poetry
poetry install
poetry shell ภาพการผลิตเพื่อฝึกอบรมแบบจำลองนั้นอยู่ภายใต้ docker/ และเรียกว่า codegram/calbert มันมีการอ้างอิงล่าสุดทั้งหมด แต่ไม่มีรหัส - DeepKit จะจัดส่งรหัสในการทดลองทุกครั้ง (อ่านเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ DeepKit)
การกำหนดค่าทั้งหมดอยู่ภายใต้ config ที่นั่นคุณสามารถควบคุมพารามิเตอร์ที่เกี่ยวข้องกับการฝึกอบรม tokenizing และทุกอย่างและแม้แต่เลือกรุ่นของรุ่นที่จะฝึกอบรม
การกำหนดค่าทั้งหมดสามารถ overridable เนื่องจากเป็นการกำหนดค่าไฮดรา ตรวจสอบเอกสารของพวกเขา
ชุดย่อยขนาดเล็กของชุดข้อมูลอยู่ภายใต้ dist/data เพื่อให้คุณสามารถฝึกอบรมรุ่นเล็ก ๆ และทำการทดลองอย่างรวดเร็วในเครื่อง
ในการดาวน์โหลดชุดข้อมูลเต็มรูปแบบและแยกมันโดยอัตโนมัติในการฝึกอบรม / การตรวจสอบความถูกต้องเพียงเรียกใช้คำสั่งนี้:
python -m calbert download_data --out-dir dataset tokenizers ที่ถูกปรับสภาพนั้นอยู่ที่ dist/tokenizer-{cased,uncased} พวกเขาได้รับการฝึกฝนเฉพาะในชุดการฝึกอบรมเต็มรูปแบบ
หากคุณต้องการฝึก tokenizer อีกครั้ง (โดยค่าเริ่มต้นที่ไม่ได้ใช้งาน):
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizerในการฝึกอบรม cased หนึ่งเพียงแทนที่การกำหนดค่าไฮดราที่เหมาะสม:
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizer vocab.lowercase=Falseเราใช้ DeepKit เพื่อเรียกใช้และติดตามการทดลอง ดาวน์โหลดฟรีสำหรับแพลตฟอร์มที่คุณเลือกหากคุณต้องการเรียกใช้ในพื้นที่หรือตรวจสอบเอกสารของพวกเขาเพื่อเรียกใช้กับเซิร์ฟเวอร์ชุมชนฟรีของพวกเขา
เพื่อให้แน่ใจว่าทุกอย่างทำงานได้ให้ฝึกอบรมแบบทดสอบด้วยภาพนักเทียบท่าจริงใน DeepKit:
deepkit run test.deepkit.ymlโดยค่าเริ่มต้นมันจะฝึกอบรมในอินสแตนซ์ DeepKit ในพื้นที่ของคุณโดยใช้ CPU ของคุณ อ่านเอกสารของพวกเขาเพื่อเรียนรู้วิธีปรับแต่งการวิ่งของคุณ
กำหนดค่าคลัสเตอร์ใน DeepKit ในพื้นที่ของคุณด้วยเครื่องอย่างน้อยหนึ่งเครื่องที่มี GPU
deepkit run --clusterเมื่อคุณมีแบบจำลองที่ผ่านการฝึกอบรมแล้วคุณสามารถส่งออกเพื่อใช้เป็นแบบจำลองมาตรฐาน HuggingFace Transformers
ตัวอย่างเช่นลองจินตนาการว่าคุณได้รับการฝึกฝนแบบ base-uncased และคุณต้องการส่งออก
ดาวน์โหลดโฟลเดอร์ export จากเอาต์พุตใน DeepKit Run ของคุณและเรียกใช้:
mv export calbert-base-uncased
transformers-cli login
transformers-cli upload exportmake test