ความฉงนสนเท่ห์ของรูปแบบภาษา
ความฉงนสนเท่ห์เป็นตัววัดการประเมินที่วัดคุณภาพของรูปแบบภาษา ในโพสต์นี้ เราจะพูดถึงความฉงนสนเท่ห์และวิธีการคำนวณสำหรับรุ่นยอดนิยมGPT2 .
โมเดลภาษาคืออะไร?
คุณอาจเคยได้ยินโมเดลภาษาขนาดใหญ่ (LLM) เช่น BERT, GPT2 เป็นต้น ซึ่งได้เปลี่ยนโฉมหน้าของการประมวลผลภาษาธรรมชาติ โมเดลภาษามีหลายประเภท เช่น โมเดลภาษาทางสถิติและโมเดลภาษาประสาท SLM อิงตามสถิติในข้อความที่กำหนด โดยที่โมเดลภาษาประสาทได้รับการฝึกอบรมโดยใช้สถาปัตยกรรมโครงข่ายประสาทเทียม
โดยพื้นฐานแล้ว โมเดลภาษา (LM) เป็นเพียงการแจกแจงความน่าจะเป็นของชุดคำซึ่งเรียกว่าคำศัพท์ของโมเดล มันบอกความน่าจะเป็นของคำบางคำในคำศัพท์ที่เกิดขึ้นจากคำก่อนหน้าทั้งหมด โดยปกติแล้ว คำใดก็ตามที่มีความน่าจะเป็นสูงสุดจะถูกเลือกเป็นคำทำนายถัดไปในลำดับ
ความน่าจะเป็นนี้สามารถคำนวณได้โดยการคูณลำดับของความน่าจะเป็นแบบมีเงื่อนไขสำหรับแต่ละคำที่กำหนดคำก่อนหน้าซึ่งให้ความเป็นไปได้ของลำดับนี้
ตัวอย่างเช่น ความน่าจะเป็นร่วมกันของประโยคตัวอย่าง “มันเป็นวันที่สวยงาม” เขียนได้ดังภาพด้านล่าง การคำนวณความน่าจะเป็นนี้ช่วยให้เราคาดการณ์คำถัดไปหรือคำที่ขาดหายไปในลำดับ และโมเดลจะเรียนรู้ความแตกต่างของภาษา — ด้วยเหตุนี้จึงเรียกว่าโมเดลภาษา
P(It,is,a,beautiful,day) = P(day|beautiful, a, is, it) *
P(beautiful|a, is, it) * P(a|is, it) * P(is|it)
ในหัวข้อถัดไป เราจะพูดถึงคำศัพท์สำคัญบางคำที่ใช้ในการคำนวณ Perplexity
เอนโทรปี
เอนโทรปีเป็นตัววัดที่วัดปริมาณความไม่แน่นอนและได้มาจากค่าผกผันของความน่าจะเป็นของเหตุการณ์หนึ่งที่เกิดขึ้น ยิ่งมีโอกาสสูง ความไม่แน่นอนก็ยิ่งน้อยลง ดังนั้น เป้าหมายของแบบจำลองภาษาคือเพื่อลดเอนโทรปีของการสร้างลำดับของคำที่คล้ายกับลำดับการฝึก สูตรการคำนวณเอนโทรปีมีดังต่อไปนี้ โดยที่ P(x) คือความน่าจะเป็นของคำว่า x
นี่คือวิดีโอที่ดีในการทำความเข้าใจเกี่ยวกับเอนโทรปีในรายละเอียดเพิ่มเติม:https://youtube.com/watch?v=YtebGVx-Fxw
ข้ามเอนโทรปี
Cross Entropy เปรียบเทียบการแจกแจงความน่าจะเป็นสองแบบ P(x) และ Q(x) ในบริบทของแบบจำลองภาษา เราเปรียบเทียบการแจกแจงความน่าจะเป็นที่คาดการณ์ไว้เหนือคำต่างๆ ด้วยการแจกแจงความน่าจะเป็นจริง ที่นี่ P(x) คือการแจกแจงความน่าจะเป็นจริง และ Q(x) คือการแจกแจงแบบจำลองที่ทำนายไว้ จากนั้นเอนโทรปีข้ามจะถูกคำนวณดังที่แสดงด้านล่างซึ่งสามารถใช้เป็นฟังก์ชันการสูญเสียเพื่อฝึกโมเดลภาษา
สมมติว่าเรามีโมเดลภาษาที่ได้รับการฝึกฝนด้วยคำศัพท์เพียง 5 คำคือ "แดด", "วัน", "สวยงาม", "ทิวทัศน์", "เมฆ" ตอนนี้ เราต้องการคำนวณความฉงนสนเท่ห์ของโมเดลเมื่อเห็นวลี “ทิวทัศน์สวยงาม”
ให้เราคำนวณครอสเอนโทรปีโดยใช้ตัวอย่างง่ายๆ ใน PyTorch
# Get the needed libraries
import torch
from torch.nn import functional as F
บันทึกเหล่านี้จะถูกส่งผ่านไปยัง ฟังก์ชัน softmaxที่ทำให้ค่าเป็นมาตรฐานและแปลงเป็นการกระจายความน่าจะเป็น นี่คือการแจกแจงความน่าจะเป็นที่คาดการณ์ไว้
tensor([[-0.7891, 1.3421, 0.4929, 0.0715, -0.0910],
[ 0.9024, -0.8675, 0.8498, -1.0331, 0.5531]])
F.softmax(input, dim = -1)
Predicted:
tensor([[0.0575, 0.4841, 0.2071, 0.1359, 0.1155],
[0.3369, 0.0574, 0.3196, 0.0486, 0.2375]])
Target/Actual: tensor([2, 3])
tensor([[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0]])
Loss for First Word:
(((- 0 * log(0.0575)) + (- 0 * log(0.4841)) + (- 1 * log(0.2071)) +
(- 0 * log(0.1359)) + (- 0 * log(0.1155))) = 1.5745535105805986
Loss for Second Word:
(((- 0 * log(0.3369)) + (- 0 * log(0.0574)) + (- 0* log(0.3196)) +
(- 1* log(0.0486)) + (- 0 * log(0.2375))) = 3.024131748075689
Loss = (1.5745535105805986 + 3.024131748075689)/2 = 2.299
loss = torch.nn.CrossEntropyLoss()
output = loss(input, target)
output
Loss: tensor(2.299)
ความฉงนสนเท่ห์หมายถึงความประหลาดใจโดยสัญชาตญาณ เราวัดว่าโมเดลรู้สึกประหลาดใจมากแค่ไหนเมื่อเห็นข้อมูลใหม่ ยิ่งความฉงนสนเท่ห์น้อยเท่าไหร่ การฝึกก็จะยิ่งดีขึ้นเท่านั้น
ความฉงนสนเท่ห์คำนวณเป็นเลขชี้กำลังของการสูญเสียที่ได้รับจากแบบจำลอง ในตัวอย่างข้างต้น เราจะเห็นว่าความฉงนสนเท่ห์ของโมเดลตัวอย่างของเราเกี่ยวกับวลี "ทิวทัศน์สวยงาม" คือ 9.97 สูตรสำหรับความฉงนฉงายคือเลขชี้กำลังของค่าเฉลี่ยของความเป็นไปได้ในการบันทึกของคำทั้งหมดในลำดับการป้อนข้อมูล
ตอนนี้ให้เราเปรียบเทียบความฉงนสนเท่ห์ของสองประโยคกับ GPT2 และดูว่ามีความฉงนสนเท่ห์เพียงใด ก่อนอื่นเราโหลดโทเค็นไนเซอร์และสาเหตุสำหรับโมเดล GPT2 จาก HuggingFace:
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
inputs = tokenizer("ABC is a startup based in New York City and Paris", return_tensors = "pt")
loss = model(input_ids = inputs["input_ids"], labels = inputs["input_ids"]).loss
ppl = torch.exp(loss)
print(ppl)
Output: 29.48
inputs_wiki_text = tokenizer("Generative Pretrained Transformer is an opensource artificial intelligence created by OpenAI in February 2019", return_tensors = "pt")
loss = model(input_ids = inputs_wiki_text["input_ids"], labels = inputs_wiki_text["input_ids"]).loss
ppl = torch.exp(loss)
print(ppl)
Output: 211.81
ความฉงนสนเท่ห์มักใช้เพื่อกำหนดว่าตัวแบบได้เรียนรู้ชุดการฝึกอบรมได้ดีเพียงใด เมตริกอื่นๆ เช่นBLEU , ROUGEเป็นต้น ใช้กับชุดทดสอบเพื่อวัดประสิทธิภาพการทดสอบ
ในโพสต์นี้ เราได้พูดคุยและคำนวณ Cross Entropy, Perplexity ของโมเดลภาษา ในโพสต์ถัดไป เราจะพูดถึงมาตรฐาน GLUE ที่วัดความสามารถในการเข้าใจภาษาทั่วไปของโมเดลภาษายอดนิยม