มารู้จักกับ Temperature และ Top Probability บน OpenAI ผ่าน Completion API

Paul Story
NexaByte Dispatches
3 min readApr 28, 2023

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 (ครั้งที่ 1)
temperature = 0 (ครั้งที่ 2)

เห็นไหมครับว่าถ้าเรากำหนดค่า 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 (ครั้งที่ 1)
temperature = 0.2 (ครั้งที่ 2)

จะเห็นว่าถ้าเรากำหนดค่า temperature = 0.2 ถึงแม้คำตอบจะไม่เหมือนกัน แต่เนื้อหาค่อนข้างใกล้เคียงกัน

กรณีที่ 3: กำหนดค่า temparature = 1

{
"model": "text-davinci-003",
"prompt": "Explain the text completaion api.",
"max_tokens": 1024,
"temperature": 1
}
temperature = 1 (ครั้งที่ 1)
temperature = 1 (ครั้งที่ 2)

จะเห็นว่าคำตอบไม่เหมือนกันและเนื้อหาก็แตกต่างกัน ถ้าสังเกตจะเห็นคำตอบเริ่มมียกตัวอย่างการใช้งานให้กับผู้ใช้งาน (User) ซึ่งผิดจากกรณีที่ 1 และ 2 จะมุ่งเน้นไปที่ผู้ใช้งานเป็น Developers โดยตรงเป็นหลัก

กรณีที่ 4: กำหนดค่า temparature = 2

{
"model": "text-davinci-003",
"prompt": "Explain the text completaion api.",
"max_tokens": 1024,
"temperature": 2
}
Request temperature = 2
Response 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
}
top_p = 0 (ครั้งที่ 1)
top_p = 0 (ครั้งที่ 2)

จะเห็นว่าครั้งที่ 1 และ 2 จะได้คำตอบเหมือนเดิม

กรณีที่ 2: กำหนดค่า top_p = 1

{
"model": "text-davinci-003",
"prompt": "I love to eat.",
"max_tokens": 100,
"top_p": 1
}
top_p = 1 (ครั้งที่ 1)
top_p = 1 (ครั้งที่ 2)

จะสังเกตเห็นว่าในกรณีที่ 2 (top_p = 1) จะได้คำตอบที่กระชับและดูเป็นธรรมชาติมากกว่ากรณีที่ 1 (top_p=0) และในกรณีที่ 2 นี้คำตอบจะไม่เหมือนเดิมเปลี่ยนใหม่ทุกครั้งที่มีการเรียกใช้งาน

สุดท้ายนี้ลองไปเล่นทดสอบกันดูนะครับ

ไว้คร่าวหน้าจะมาอธิบายส่วนสำคัญอื่นๆ ที่จำเป็นต้องรู้ในการนำไปใช้ต่อยอดในการพัฒนาเชิงธุรกิจต่อไปครับ

สำหรับเนื้อหาในส่วนของ Part 1 หากใครยังไม่ได้อ่านครับ

--

--