Learn AI with Python · บทเรียน

การจำแนกข้อความด้วย BERT

ทรานส์ฟอร์เมอร์ของ HuggingFace, AutoTokenizer, AutoModelForSequenceClassification และการปรับจูนแบบละเอียด

บทเรียน 3 จาก 413 ขั้นตอน

การจำแนกข้อความด้วย BERT เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

ข้อจำกัดของการฝังคำแบบคงที่

Word2Vec และ GloVe ให้เวกเตอร์คงที่เพียงหนึ่งเวกเตอร์ต่อคำ แต่คำว่า "bank" มีความหมายต่างกันใน "river bank" และ "savings bank" โมเดล ตามบริบทอย่าง BERT ช่วยแก้ปัญหานี้

BERT คืออะไร

BERT เป็นโมเดลทรานส์ฟอร์เมอร์ที่อ่านทั้งประโยคพร้อมกันและสร้างการฝังคำที่คำนึงถึงบริบท โมเดลนี้ฝึกไว้ล่วงหน้าด้วยข้อความจำนวนมหาศาล และสามารถปรับให้เหมาะกับงานต่าง ๆ เช่น การจำแนกประเภทได้

ไลบรารี transformers ของ Hugging Face

ไลบรารี transformers ช่วยให้เข้าถึง BERT และโมเดลที่ฝึกไว้ล่วงหน้าหลายพันโมเดลได้ง่าย พร้อมคลาสที่มีรูปแบบสอดคล้องกันสำหรับตัวตัดโทเค็นและโมเดล

from transformers import AutoTokenizer, AutoModelForSequenceClassification

name = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(name)
model = AutoModelForSequenceClassification.from_pretrained(name)

AutoTokenizer

AutoTokenizer โหลดตัวตัดโทเค็นที่ถูกต้องสำหรับโมเดล โดยจะแบ่งข้อความเป็นโทเค็นย่อยและแปลงโทเค็นเหล่านั้นเป็นรหัสที่โมเดลต้องการ

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
print(tokenizer.tokenize("unbelievable"))
# subwords like ["un", "##bel", "##ievable"]

AutoModelForSequenceClassification

AutoModelForSequenceClassification โหลด BERT พร้อมส่วนหัวการจำแนกประเภทด้านบน และส่งออกคะแนนหนึ่งค่าต่อคลาสสำหรับลำดับทั้งหมด

from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased-finetuned-sst-2-english"
)

การตัดโทเค็นอินพุต

เรียกใช้ตัวตัดโทเค็นกับข้อความของคุณพร้อมด้วย truncation, padding และ return_tensors เพื่อรับเทนเซอร์ที่พร้อมให้โมเดลใช้งาน การตัดจะจำกัดอินพุตที่ยาวเกินไป ส่วนการเติมจะจัดความยาวของแต่ละชุดให้ตรงกัน

inputs = tokenizer(
    "This movie was fantastic!",
    truncation=True,
    padding=True,
    return_tensors="pt",
)
print(inputs["input_ids"].shape)

โทเค็นพิเศษ

BERT จะเพิ่มโทเค็นพิเศษโดยอัตโนมัติ: [CLS] ที่จุดเริ่มต้น (สถานะซ่อนของโทเค็นนี้สรุปลำดับทั้งหมด) และ [SEP] ระหว่างหรือหลังประโยค ตัวจำแนกจะอ่านข้อมูลจากการแทนค่าของ [CLS]

การเรียกใช้โมเดล

ส่งอินพุตที่ผ่านการตัดโทเค็นแล้วให้โมเดลเพื่อรับ ค่าลอจิต ซึ่งเป็นคะแนนดิบของคลาสที่ยังไม่ได้ปรับให้เป็นมาตรฐาน

import torch

with torch.no_grad():
    outputs = model(**inputs)
logits = outputs.logits
print(logits)

จากลอจิตสู่การทำนาย

ใช้ softmax กับค่าลอจิตเพื่อคำนวณความน่าจะเป็น จากนั้นใช้ argmax เพื่อหาดัชนีคลาสที่ทำนายได้ แล้วจับคู่ดัชนีนั้นกับป้ายกำกับ

import torch

probs = torch.softmax(logits, dim=-1)
pred = torch.argmax(probs, dim=-1).item()
print(model.config.id2label[pred])

การปรับ BERT ให้เหมาะกับงานของคุณ

สำหรับชุดข้อมูลแบบกำหนดเอง ให้ปรับ BERT โดยฝึกส่วนหัวการจำแนกประเภท (และอาจฝึกทั้งโมเดลด้วย) จากตัวอย่างที่มีป้ายกำกับ ส่วนติดต่อโปรแกรมประยุกต์ Trainer จะจัดการวงรอบการฝึกให้

from transformers import Trainer, TrainingArguments

args = TrainingArguments(output_dir="out", num_train_epochs=3)
trainer = Trainer(model=model, args=args, train_dataset=train_ds)
trainer.train()

ทางลัดของกระบวนการประมวลผล

สำหรับการอนุมานอย่างรวดเร็ว ตัวช่วย pipeline จะรวมการตัดโทเค็น การเรียกใช้โมเดล และการถอดรหัสไว้ในการเรียกใช้ครั้งเดียว เหมาะอย่างยิ่งสำหรับการสร้างต้นแบบ

from transformers import pipeline

clf = pipeline("sentiment-analysis")
print(clf("I love this product!"))
# [{"label": "POSITIVE", "score": 0.99...}]

ตรวจสอบความเข้าใจ

ทดสอบความรู้เกี่ยวกับ BERT ของคุณ

สรุป

สรุป: BERT สร้างการฝังคำที่คำนึงถึงบริบทผ่านทรานส์ฟอร์เมอร์ ใช้ AutoTokenizer เพื่อตัดโทเค็นด้วย truncation/padding/return_tensors และใช้ AutoModelForSequenceClassification เพื่อรับ ค่าลอจิต แปลงค่าลอจิตด้วย softmax แล้วจึงใช้ argmax ปรับโมเดลให้เหมาะกับงานด้วย Trainer หรือสร้างต้นแบบอย่างรวดเร็วด้วย pipeline

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
53
บทเรียน
225

คำถามที่พบบ่อย

บทเรียน “การจำแนกข้อความด้วย BERT” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจำแนกข้อความด้วย BERT” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจำแนกข้อความด้วย BERT”

ทรานส์ฟอร์เมอร์ของ HuggingFace, AutoTokenizer, AutoModelForSequenceClassification และการปรับจูนแบบละเอียด คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การจำแนกข้อความด้วย BERT” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม

ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Word2Vec: Skip-gram และ CBOW
  2. เวกเตอร์ฝัง GloVe และ FastText
  3. การจำแนกข้อความด้วย BERT
  4. ความคล้ายคลึงเชิงความหมายและเวกเตอร์ฝังประโยค
← กลับไปที่ Learn AI with Python