มารู้จักกับ Temperature และ Top Probability บน OpenAI ผ่าน Completion API
By @NexaByte Dispatches
ในการสร้างคำตอบนั้น AI จะเลือกคำที่เป็นไปได้ที่สุดสำหรับการตอบกลับตามคำสั่ง prompt ที่กำหนด ในการใช้งาน OpenAI จะมีการตั้งค่าสองอย่างคือ temperature และค่า top_p ซึ่งทั้ง 2 ค่านี้มีหน้าที่ควบคุมคำที่น่าสนใจและความหลากหลายของคำตอบที่ถูกสร้างออกมา เรามาดูตัวแรกกัน
Temperature
Temperature คือค่าตัวควบคุมคำตอบที่ถูกสร้างขึ้นให้มีลักษณะคำตอบที่เป็นได้ทั้งแบบคาดเดาได้ ตรงประเด็น, คำตอบแบบคงที่, คำตอบที่มีความหลากหลาย หรือเป็นคำตอบที่สร้างสรรค์
ตัวอย่างเปรียบเปรยนะครับ เช่นไล่ไปแบบนี้
คำตอบเดิมๆ คงที่ > คำตอบที่เป็นไปตามคาดหวัง > คำตอบที่สร้างสรรค์และหลากหลาย > คำตอบที่ดูเกินความเป็นจริงไปหน่อย
ผมยกตัวอย่างง่ายๆ ผมสั่งข้าวกระเพราเนื้อ
prompt: “ข้าวกระเพราเนื้อ”
[ค่า temperature = 0]: ข้าวกระเพราเนื้อใส่จานพลาสติก+พร้อมช้อนซ้อม
[ค่า temperature = 0.2]: ข้าวกระเพราเนื้อใส่จานพลาสติก+พร้อมช้อนซ้อม+มีแตงกวา
[ค่า temperature = 0.5]: ข้าวกระเพราเนื้อใส่จานพลาสติก+พร้อมช้อนซ้อม+มีแตงกวา+มีถ้วยพริกน้ำปลา
[ค่า temperature = 1]: ข้าวกระเพราเนื้อใส่ถาดใหญ่+มีไข่ดาวให้ 1 ใบ+พร้อมช้อนซ้อม+มีถ้วยน้ำซุปกระดูกหมู+มีแตงกวา+มีถ้วยพริกน้ำปลา
[ค่า temperature = 2]: ข้าวกระเพราเนื้อแกะจากออสเตรเลีย+ใส่จานทองคำ+มีไข่ดาวจากไก่ธิเบต+พร้อมช้อนซ้อมทำจากเพช+มีถ้วยน้ำซุปกระดูกเสือ+มีแตงกวาจากเทือกเขาหิมาลัย+มีถ้วยพริกน้ำปลาจากญี่ปุ่น
น่าจะพอช่วยให้เห็นภาพมากขึ้นนะครับ
การตั้งค่า temperature โดยปกติทาง OpenAI จะกำหนดค่า temperature
- default = 1
- max value = 2 คือเราสามารถกำหนดค่าได้สูงสุดไม่เกิน 2
และเราสามารถกำหนดค่าได้ตั้งแต่ 0–2 [0,0.1,0.2,…,2]
ปัญหาหลักแล้วจะตั้งค่า temperature อย่างไร
เพื่อให้ได้คำตอบแบบที่เราต้องการ วิธีการคือต้องทดสอบครับเพราะเราไม่สามารถกำหนดได้เลยว่า temperature ค่าไหนเหมาะสม มันขึ้นกับความต้องการของเราหรือความต้องการในเชิงธุรกิจที่เรากำลังทำอยู่
ดังนั้นผมเลยขอยกตัวอย่างในแต่ละเคสไล่กันดูครับ (สำหรับใครยังไม่เคยอ่านใน part 1 มาก่อนถึงวิธีการทดสอบ อ่านได้ที่นี้เลยครับ)
prompt: Explain the text completaion api.
กรณีที่ 1: กำหนดค่า temparature = 0
{
"model": "text-davinci-003",
"prompt": "Explain the text completaion api.",
"max_tokens": 1024,
"temperature": 0
}
เห็นไหมครับว่าถ้าเรากำหนดค่า temperature = 0 ไม่ว่าจะส่งคำสั่งไปกี่ครั้ง คำตอบก็จะได้เหมือนเดิมในครั้งแรก
กรณีที่ 2: กำหนดค่า temparature = 0.2
{
"model": "text-davinci-003",
"prompt": "Explain the text completaion api.",
"max_tokens": 1024,
"temperature": 0.2
}
จะเห็นว่าถ้าเรากำหนดค่า temperature = 0.2 ถึงแม้คำตอบจะไม่เหมือนกัน แต่เนื้อหาค่อนข้างใกล้เคียงกัน
กรณีที่ 3: กำหนดค่า temparature = 1
{
"model": "text-davinci-003",
"prompt": "Explain the text completaion api.",
"max_tokens": 1024,
"temperature": 1
}
จะเห็นว่าคำตอบไม่เหมือนกันและเนื้อหาก็แตกต่างกัน ถ้าสังเกตจะเห็นคำตอบเริ่มมียกตัวอย่างการใช้งานให้กับผู้ใช้งาน (User) ซึ่งผิดจากกรณีที่ 1 และ 2 จะมุ่งเน้นไปที่ผู้ใช้งานเป็น Developers โดยตรงเป็นหลัก
กรณีที่ 4: กำหนดค่า temparature = 2
{
"model": "text-davinci-003",
"prompt": "Explain the text completaion api.",
"max_tokens": 1024,
"temperature": 2
}
ฮ่าๆ จะเห็นว่าบันเทิงเลยครับกับคำตอบไปกันใหญ่เลย จินตนาการไปไกลมาก
สรุปเราก็คงต้องลองไปทดสอบดูกันนะครับว่า temperature ค่าไหนเหมาะสมกับการใช้งานของเราหรือขึ้นกับธุรกิจของเราด้วยครับว่าต้องการแบบไหน
Top Probability
top_p เป็นค่า parameter ที่ทาง OpenAI มีมาให้เพื่อควบคุมการสุ่ม (random) สร้างข้อความขึ้นมา โดยมีการกำหนดตัวเลขความน่าจะเป็นของคำที่ถูกหยิบมาพิจารณาก่อนที่จะสร้างคำออกมา ค่า top_p ที่สูงขึ้นหมายความว่าข้อความที่จะถูกสร้างขึ้นจะถูกพิจารณาตัดสินใจก่อนที่จะเลือกใช้คำนั้นเพื่อให้คำตอบมีความเป็นธรรมชาติมากที่สุด
ในปกติเราควรใช้ top_p ในการควบคุมการเชื่อมโยงกันของคำในการสร้างข้อความคำตอบ แต่ถ้าเราต้องการทั้งคำตอบที่สร้างสรรค์และมีความหลากหลาย คาดเดาไม่ได้ เราควรเลือกใช้ temperature
ซึ่งทาง OpenAI แนะนำให้เราใช้อย่างใดอย่างนึงระหว่าง top_p และ temperature และไม่ควรใช้คู่กัน
การตั้งค่า top_p โดยปกติทาง OpenAI จะกำหนดค่า top_p
- default = 1
- max value = 1 คือเราสามารถกำหนดค่าสูงสุดได้ไม่เกิน 1
และเราสามารถกำหนดค่าได้ตั้งแต่ 0–1 [0,0.1,0.2,…,1] นะครับ
ปัญหาหลักแล้วจะตั้งค่า top_p อย่างไร
เช่นเคยครับวิธีเดียวคือทดสอบครับเพราะเราไม่สามารถกำหนดได้เลยว่า top_p ค่าไหนเหมาะสม มันขึ้นกับความต้องการของเราหรือความต้องการในเชิงธุรกิจที่เรากำลังทำอยู่
เรามาดูตัวอย่างในแต่ละเคสกัน (สำหรับใครยังไม่เคยอ่านใน part 1 มาก่อนถึงวิธีการทดสอบ อ่านได้ที่นี้เลยครับ)
prompt: I love to eat.
กรณีที่ 1: กำหนดค่า top_p = 0
{
"model": "text-davinci-003",
"prompt": "I love to eat.",
"max_tokens": 100,
"top_p": 0
}
จะเห็นว่าครั้งที่ 1 และ 2 จะได้คำตอบเหมือนเดิม
กรณีที่ 2: กำหนดค่า top_p = 1
{
"model": "text-davinci-003",
"prompt": "I love to eat.",
"max_tokens": 100,
"top_p": 1
}
จะสังเกตเห็นว่าในกรณีที่ 2 (top_p = 1) จะได้คำตอบที่กระชับและดูเป็นธรรมชาติมากกว่ากรณีที่ 1 (top_p=0) และในกรณีที่ 2 นี้คำตอบจะไม่เหมือนเดิมเปลี่ยนใหม่ทุกครั้งที่มีการเรียกใช้งาน
สุดท้ายนี้ลองไปเล่นทดสอบกันดูนะครับ
ไว้คร่าวหน้าจะมาอธิบายส่วนสำคัญอื่นๆ ที่จำเป็นต้องรู้ในการนำไปใช้ต่อยอดในการพัฒนาเชิงธุรกิจต่อไปครับ