ความฉงนสนเท่ห์ของรูปแบบภาษา

Nov 27 2022
ความฉงนสนเท่ห์เป็นตัววัดการประเมินที่วัดคุณภาพของรูปแบบภาษา ในโพสต์นี้ เราจะพูดถึงความฉงนสนเท่ห์และวิธีการคำนวณสำหรับรุ่นยอดนิยม GPT2

ความฉงนสนเท่ห์เป็นตัววัดการประเมินที่วัดคุณภาพของรูปแบบภาษา ในโพสต์นี้ เราจะพูดถึงความฉงนสนเท่ห์และวิธีการคำนวณสำหรับรุ่นยอดนิยม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 สูตรสำหรับความฉงนฉงายคือเลขชี้กำลังของค่าเฉลี่ยของความเป็นไปได้ในการบันทึกของคำทั้งหมดในลำดับการป้อนข้อมูล

สูตรแห่งความงุนงงจาก HuggingFace

ตอนนี้ให้เราเปรียบเทียบความฉงนสนเท่ห์ของสองประโยคกับ 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 ที่วัดความสามารถในการเข้าใจภาษาทั่วไปของโมเดลภาษายอดนิยม

อ้างอิง