🆕อัพเดท! จากทีม Finetune (8 Apr)

8 Apr 2023

สวัสดีครับ ทุกท่าน 
ทางผม (ดร.ซี) และ ดร. สุเมธ (พี่เต้ย) มาขออัพเดทสถานการณ์ทีม Finetuning หน่อยครับ จากประชุมครั้งที่แล้ว เรามีเปลี่ยนทิศทางครับ TLDR; หลักๆคือ ปรับแผนครับบบ!! จาก RLHF -> Self-Instruct ครับ

InstructGPT ใช้ Data และ Labour เยอะมาก

เมื่อเดือนที่แล้ว เราจะทำ Model ออกมาด้วยเทคนิค InstructGPT ตาม Paper ของ OpenAI ครับ (https://arxiv.org/abs/2203.02155) ที่เป็นเทคนิคใช้เทรน ChatGPT ซึ่งการ Finetuning Model ประกอบไปด้วย 3 ส่วนหลักๆ

(1) Pre-training ภาษาที่ใหญ่พอและที่เทรนมามากพอ (2) Finetuning บน Dataset InstructGPT (3) RLHF ให้คุณภาพดีขึ้น โดยส่วนที่ (1) เราให้ทีม Pretraining LLM จัดการไปครับ ส่วนที่ (2) เราใช้ Dataset จาก ThaiInstructGPT ที่เอาคำถามมาจากเว็บไซด์ Pantip เป็นต้นแบบและเก็บคำตอบจาก ChatGPT ซึ่งส่วนมากจะเป็นคำถามองค์ความรู้ทั่วไป แต่ก็ยังขาดชุดคำถาม-คำตอบที่เป็นคำสั่งละเอียดๆ อาทิเช่น คำสั่งแปลภาษา, คำสั่งแก้โค้ด, คำสั่งให้ตอบข้อสอบองค์ความรู้จาก O-net, คำสั่งเขียนโค้ด, คำสั่งที่แสดงถึงความฉลาดต่างๆ, และคำสั่งที่เป็นแบบ Few-shot Learning ครับ

ในส่วนที่ (3) ก็มีปัญหาในการทำ RLHF ติดปัญหาอยู่ 2 อย่างครับ

​(1) เรายังสร้าง Reward Model ที่มีประสิทธิภาพไม่ได้ครับ เนื่องจากขาด Dataset ครับ ตามข้อ (2) ครับ

(2) ยังขาด Data Set ที่เป็นการ Ranking คำตอบที่มี ข้อความหน้าตาแตกต่างกันมากพอครับ

(2.1) Dataset ที่ทางเรา Gen ออกมาให้จากการ Train Thai Instruct Dataset version แรก โดยโมเดลที่ออกคำตอบมาแตกต่างกันนั้น 4 อัน และขอร้องให้ทีมอาสาสมัครมาช่วย Rank กันนั้น (ที่ให้เรียง A,B,C,D) คำตอบแตกต่างกันไม่มากพอครับ แทบจะเขียนเหมือนกันเลย จนคนยังแยกไม่ออกเลยว่า อันไหนดีกว่ากันครับ

(2.2) Dataset ที่ตอนนี้คนมา Tag ข้อมูลให้ที https://tag.openthaigpt.aieat.or.th/ มีความแตกต่างกันมากพอครับ เพราะใช้คนสร้างขึ้นมา แต่ยังมีปริมาณไม่เพียงพอครับ ประมาณ 100 กว่า Dataset ตัวอย่างเท่านั้นเอง (คงต้องกระตุ้นและหาคนมาช่วย Tag เพิ่มเติมครับ)

วิธีการใหม่ Self-Instruct

ในสัปดาห์ที่ผ่านมา ทางผมมาเจอ Paper Self-Instruct (https://arxiv.org/abs/2212.10560#) ซึ่งใน Paper นี้คือพื้นฐานกระบวนการสร้าง Stanford Alpaca Model ที่เปิดตัวเมื่อ 2 สัปดาห์ที่แล้วเลยครับ https://crfm.stanford.edu/2023/03/13/alpaca.html

Paper นี้กล่าวถึงวิธีการสร้าง Dataset Thai InstructGPT ที่ใช้พลังงานคนน้อยมากครับ และสามารถชุดคำถาม-คำตอบที่เป็นคำสั่งละเอียดๆ คำสั่งเขียนโค้ด คำสั่งที่แสดงถึงความสามารถ และคำสั่งที่เป็นแบบ Few-shot Learning ได้ทั้งหมดด้วย โอ้ แก้ปัญหาเราได้พอดิบพอดี ซึ่งต้องการแค่คนมาช่วยมาตรวจคุณภาพ Dataset ตอนสุดท้ายและลบอันที่มีปัญหาออกไป

ซึ่งทางนักพัฒนา Paper Self-Instruct แจ้งว่า ด้วยวิธีการนี้ ไม่ต้องทำวิธีการ RLHF อีกต่อไปแล้ว เพราะถ้า Dataset InstructGPT มีคุณภาพมากพอ ก็จะสามารถฝึก LLM ได้มีคุณภาพเทียบเท่า ChatGPT ได้เลยทีเดียว

วิธีการของสร้าง Instruct Dataset แบบ Self-Instruct

(1) เริ่มต้นให้คนเขียน Instruct Dataset ตัวอย่างครับ ที่เป็นภาษาไทย ผมขอเรียกว่า SEED Instruct Dataset เป็น Dataset เบื้องต้น 175 คู่ ซึ่งทางผมแปลด้วย Google Translate และ ทำการ Review นั่งแก้มือจนถูกต้องหมดทุกอย่างแล้ว (Human Reviewed) ดังภาพ

{"id":"seed_task_0",
"name":"breakfast_suggestion",
"instruction":"มีอะไรที่ฉันสามารถกินเป็นอาหารเช้าที่ไม่มีไข่ แต่มีโปรตีน และมีแคลอรีประมาณ 700-1,000 แคลอรีหรือไม่",
"instances":[
  {"input":"",
   "output":"ใช่ คุณสามารถมีโปรตีนกล้วยข้าวโอ๊ตปั่น 1 ชิ้นและเบคอน 4 แผ่น โปรตีนกล้วยข้าวโอ๊ตปั่นอาจประกอบด้วยข้าวโอ๊ต 1/2 ถ้วย ผงเวย์โปรตีน 60 กรัม กล้วยขนาดกลาง 1/2 ลูก น้ำมันเมล็ดแฟลกซ์ 1 ช้อนโต๊ะ และวัตต์ 1/2 ถ้วย รวมพลังงานประมาณ 550 แคลอรี เบคอน 4 แผ่นมีประมาณ 200 แคลอรี่"}
  ],"is_classification":false,"length":393}
{"id":"seed_task_1","name":"antonym_relation",
 "instruction":"ความสัมพันธ์ระหว่างคู่ที่กำหนดคืออะไร?",
 "instances":[{"input":"กลางคืน : วัน :: ขวา : ซ้าย",
  "output":"ความสัมพันธ์ระหว่างคู่ที่กำหนดคือ คู่ตรงข้าม"}],
  "is_classification":false,"length":138}

แน่นอน! ทุกท่านสามารถไปโหลด SEED Instruct Dataset ที่ผมนั่ง Clean ให้แล้ว ได้เลยครับที่นี้: https://drive.google.com/file/d/1-bz16ASSlFZBj8m-SlQIxLxj2ZdHo99y/view?usp=sharing

(2) Sample ตัวอย่างนี้ ยิงไปถาม OpenAI GPT-4 ให้เขียน Instruct Dataset แบบใหม่ออกมาใกล้เคียงแบบนี้ให้หน่อย โดยใช้ Prompt Engineering ดังตัวอย่างข้างล่าง

You are asked to come up with a set of 20 diverse task instructions in Thai language. These task instructions will be given to a GPT model and we will evaluate the GPT model for completing the instructions.
Here are the requirements:
1. Try not to repeat the verb for each instruction to maximize diversity.
2. The language used for the instruction also should be diverse. For example, you should combine questions with imperative instructions.
3. The type of instructions should be diverse. The list should include diverse types of tasks like open-ended generation, classification, editing, etc.
4. A GPT language model should be able to complete the instruction. For example, do not ask the assistant to create any visual or audio output. For another example, do not ask the assistant to wake you up at 5pm or set a reminder because it cannot perform any action.
5. The instructions should be in Thai.
6. The instructions should be 1 to 2 sentences long. Either an imperative sentence or a question is permitted.
7. You should generate an appropriate input to the instruction. The input field should contain a specific example provided for the instruction. It should involve realistic data and should not contain simple placeholders. The input should provide substantial content to make the instruction challenging but should ideally not exceed 100 words.
8. Not all instructions require input. For example, when a instruction asks about some general information, "what is the highest peak in the world", it is not necssary to provide a specific context. In this case, we simply put "<noinput>" in the input field.
9. The output should be an appropriate response to the instruction and the input. Make sure the output is less than 100 words.

List of 20 tasks:
###
1. Instruction: ขอกฎหมายที่ควบคุมค่าจ้างขั้นต่ำของรัฐแคลิฟอร์เนีย สหรัฐอเมริกา
1. Input:
<noinput>
1. Output:
ในระดับรัฐบาลกลาง ค่าจ้างขั้นต่ำอยู่ภายใต้พระราชบัญญัติมาตรฐานแรงงานที่เป็นธรรม ปัจจุบันกฎหมายของรัฐบาลกลางกำหนดค่าแรงขั้นต่ำไว้ที่ 7.25 ดอลลาร์ต่อชั่วโมง อย่างไรก็ตาม กฎหมายของรัฐบาลกลางอนุญาตให้รัฐและเมืองต่างๆ กำหนดค่าจ้างขั้นต่ำที่สูงกว่าอัตราของรัฐบาลกลาง 29 USC § 218(ก) รัฐแคลิฟอร์เนียได้กำหนดค่าแรงขั้นต่ำที่สูงกว่าอัตราของรัฐบาลกลาง ดังนั้นนายจ้างในรัฐแคลิฟอร์เนียจึงจำเป็นต้องจ่ายค่าจ้างขั้นต่ำที่กำหนดโดยกฎหมายของรัฐ (เว้นแต่เมืองหรือเคาน์ตีที่ตนดำเนินกิจการอยู่จะมีอัตราที่สูงกว่านั้น) ดู ด้านล่าง รหัสแรงงาน § 1182.12. ค่าจ้างขั้นต่ำของรัฐแคลิฟอร์เนียถูกกำหนดให้ค่อยๆ เพิ่มขึ้นเมื่อเวลาผ่านไป ในปี 2022 ค่าจ้างขั้นต่ำจะอยู่ที่ 14.50 ดอลลาร์ต่อชั่วโมง
###
2. Instruction: ความสัมพันธ์ระหว่างคู่ที่กำหนดคืออะไร?
2. Input:
กลางคืน : วัน :: ขวา : ซ้าย
2. Output:
ความสัมพันธ์ระหว่างคู่ที่กำหนดคือ คู่ตรงข้าม
###
3. Instruction: บุคคลและองค์กรจะลดอคติโดยไม่รู้ตัวได้อย่างไร?
3. Input:
<noinput>
3. Output:
จุดเริ่มต้นที่ดีคือการทำให้ช้าลง การตัดสินใจมักจะได้รับผลกระทบจากอคติโดยไม่รู้ตัวเมื่อทำอย่างรวดเร็วหรืออยู่ภายใต้ความเครียด บางวิธีในการหลีกเลี่ยงการตัดสินอย่างรวดเร็วและป้องกันอคติคือการแสวงหาความคิดเห็นและมุมมองที่แตกต่างกันก่อนที่จะทำการตัดสินใจในการจัดการความสามารถ รับสมัครผู้สมัครจากแหล่งต่างๆ ฝึกอบรมพนักงานข้ามสายงาน สร้างโปรแกรมการให้คำปรึกษาและพันธมิตร และตั้งค่าระบบสำหรับการรายงานโดยไม่เปิดเผยตัวตน ปัญหาและวัดความก้าวหน้า
###
4. Instruction:
  1. ส่งให้ OpenAI GPT-4 จะเขียนตอบกลับมาดังนี้

4. Instruction: ปรับปรุงเนื้อหาเพิ่มเติมความคิดเองในความพยายามในการออกกำลังกายของข้าวของผู้เขียน
4. Input:
ผมเริ่มทำยิมกันเมื่อ 2 เดือนนานแล้ว ผมรู้สึกดีขึ้นและกำลังยิมไปอย่างต่อเนื่อง เพื่อควบคุมสุขภาพ
4. Output:
ผมเริ่มทำยิมกันเมื่อ 2 เดือนนานแล้ว และฉันมีความพยายามที่จะรักษาสุขภาพและฟิตเนส ฉันได้พบว่าการออกกำลังกายอย่างสม่ำเสมอมีผลให้ร่างกายแข็งแรงและสุขภาพสมบูรณ์ โดยเฉพาะอย่างยิ่งเมื่อปรับเปลี่ยนวิธีการออกกำลังกายและเพิ่มความมืดเข้มของการฝึกฝน ไม่ว่าคุณจะเลือกทำคลายนมัสการ ยกน้ำหนักหรือนั่งเหงือก โอกาสที่คุณจะสามารถมีสุขภาพที่ดีขึ้นและสนุกกับกระบวนการยิ่งขึ้นเมื่อคุณมีความพยายามและมุ่งมั่นในการปรับปรุงตัวเองโดยตลอด
  1. เราก็จะเก็บเกี่ยว สิ่งที่ OpenAI GPT-4 เขียนตอบกลับมา แปลงเป็น JSON ดังภาพ

{
    "instruction": "ปรับปรุงเนื้อหาเพิ่มเติมความคิดเองในความพยายามในการออกกำลังกายของข้าวของผู้เขียน",
    "input": "ผมเริ่มทำยิมกันเมื่อ 2 เดือนนานแล้ว ผมรู้สึกดีขึ้นและกำลังยิมไปอย่างต่อเนื่อง เพื่อควบคุมสุขภาพ",
    "output": "ผมเริ่มทำยิมกันเมื่อ 2 เดือนนานแล้ว และฉันมีความพยายามที่จะรักษาสุขภาพและฟิตเนส ฉันได้พบว่าการออกกำลังกายอย่างสม่ำเสมอมีผลให้ร่างกายแข็งแรงและสุขภาพสมบูรณ์ โดยเฉพาะอย่างยิ่งเมื่อปรับเปลี่ยนวิธีการออกกำลังกายและเพิ่มความมืดเข้มของการฝึกฝน ไม่ว่าคุณจะเลือกทำคลายนมัสการ ยกน้ำหนักหรือนั่งเหงือก โอกาสที่คุณจะสามารถมีสุขภาพที่ดีขึ้นและสนุกกับกระบวนการยิ่งขึ้นเมื่อคุณมีความพยายามและมุ่งมั่นในการปรับปรุงตัวเองโดยตลอด",
}
  1. เราเปรียบเทียบ Instruct Dataset ที่ OpenAI เขียนมาให้ กับในคลังของเรา ถ้าในคลังมีคล้ายกับของใหม่มากเกินไป (คะแนน ROUGE มากกว่า 0.8) แม้แต่ 1 อัน ก็จะถูกปฏิเสธการเข้าคลัง ข้างล่างคือคะแนนความเหมือนของ Instruct อื่นๆ ของ Instruct Dataset อันใหม่ข้างต้น (จะเห็นได้ว่ามากสุดคือแค่ 0.18 เก็บเข้าคลังได้)

"most_similar_instructions": {
  "ให้คำแนะนำสี่ขั้นตอนในการดูแลดอกไม้ในบ้าน": 0.1818181818181818,
  "เปรียบเทียบหมาและแมวในเรื่องของการเลี้ยงสัตว์เลี้ยง": 0.1818181818181818,
  "อธิบายหลักประสงค์ของสายการบินในการปรับปรุงความปลอดภัยของการบิน": 0.17391304347826086,
  "ในความเห็นของคุณ อะไรคือคุณสมบัติของโค้ชกีฬาที่มีประสิทธิภาพ?": 0.16,
  "แปลข้อความเนื้อเพลงให้อยู่ในรูปของ \"กลุ่มคำสั่งในภาษาประจำงาน\" ที่สื่อความหมายของเนื้อเพลงแต่ไม่ได้เป็นเเบบเนื้อเพลง": 0.15384615384615383,
  "ให้คำแนะนำในการใช้น้ำหนักหัวให้ถูกต้องเมื่อเที่ยวบ้านในปืน Airsoft": 0.14814814814814814,
  "ขอความเห็นของคุณเกี่ยวกับการใช้โทรศัพท์มือถือในห้องเรียน ควรมีกฎหยุดใช้โทรศัพท์มือถือในห้องเรียนหรือไม่": 0.13333333333333333,
  "ในฐานะโค้ชกีฬาที่ได้รับการว่าจ้างใหม่ คุณมีแผนอย่างไรสำหรับ 30 วันแรกในการทำงาน": 0.13333333333333333,
  "ในงานนี้ คุณต้องเปรียบเทียบความหมายของประโยคทั้งสองและบอกว่ามันเหมือนกันหรือไม่ เอาต์พุตใช่หรือไม่": 0.12903225806451615,
  "ทำนายสภาพอากาศของวันนี้": 0.125
},
"avg_similarity_score": 0.04100189264641197

สิ่งที่เรากำลังทำอยู่และต้องการความช่วยเหลือ

1. ช่วยกรองข้อมูล Self-Instruct ให้ทีครับ

ตอนนี้ทางผมกำลังรัน Self-Instruct ด้วยวิธีการนี้อยู่ และกำลังผลิต Instruct Dataset ออกมาใหม่เรื่อยๆ เมื่อได้ครบซัก 10,000 คู่เป็นอย่างน้อยแล้วจะขอ Volunteer มาช่วยกันตรวจสิ่งที่ GPT-4 ช่วยสร้าง Instruct Dataset มาให้นะครับ โดยอยากจะให้ช่วยแยกแยะว่า Instruct Dataset ที่สร้างขึ้นมาใหม่นี้

  1. ความถูกต้องตามความเป็นจริง

  2. ไม่หลอน (Not Hallucinations)

  3. ไม่มีคำสะกดผิด

  4. ไม่มีคำใหม่ ที่ประดิษฐ์มาใหม่ ไม่เคยนิยามมาก่อน

  5. อ่านรู้เรื่อง

ซึ่งผมจะปล่อยผ่านทาง Google Sheet https://docs.google.com/spreadsheets/d/1BSHkpRyD5RH90E85tLWe4UzpgfDHZafE2rKxLincyWI/edit?usp=sharing รบกวนทุกท่านช่วยมา Tag ครับ ดังตัวอย่าง ตัวอย่างที่ 1: เป็นตัวอย่างที่ดี

 {
    "instruction": "คำนวณพื้นที่สี่เหลี่ยมผืนผ้า โดยทราบความยาวออก 10 เมตร และความกว้าง 15 เมตร",
    "input": "",
    "output": "พื้นที่สี่เหลี่ยมผืนผ้า = ความยาว x ความกว้าง\n= 10 เมตร x 15 เมตร\n= 150 ตารางเมตร",
  }

ตัวอย่างที่ 2: เป็นตัวอย่างที่ไม่ดี (แปลไม่ถูก)

{
    "instruction": "แปลงประโยคดังต่อไปนี้จากภาษาอังกฤษเป็นภาษาไทย",
    "input": "The early bird catches the worm.",
    "output": "นกตัวเต็มอุระจับยังมากินได้"
}

ตัวอย่างที่ 3: : เป็นตัวอย่างที่ไม่ดี (มีคำซ้ำมากเกินไป วิ่งวิ่งวิ่ง)

{
    "instruction": "หาคำคล้องทับที่มีคำว่า \"ความรัก\" เป็นข้อความหลัก",
    "input": "",
    "output": "ความรักก็เหมือนดวงดาว สว่างสดใสในท้องฟ้ามืดแสนไกลลวิ่งวิ่งวิ่งวิ่งวิ่งวิ่งวิ่งวิ่งวิ่งวิ่งวิ่-\n9",
}

เป็นต้น

ความช่วยเหลืออีกอันแต่ไม่เกี่ยวกันครับ

  1. อยากได้ข้อสอบ O-Net พร้อมเฉลยในรูปแบบ JSON Text ครับ แบบนี้ครับ ใครมีบ้างครับ ติดต่อผมได้เลยครับที่ kobkrit@aieat.or.th หรือ Discord kobkrit ครับผม

{
    "instruction": "ตอบข้อสอบ O-Net ดังต่อไปนี้ โดยตอบแค่ ก,ข,ค,ง เท่านั้น",
    "input": "กรุงเทพมหานครอยู่ภาคใด\n ก. ภาคกลาง\n ข. ภาคเหนือ\n ค. ภาคใต้\n ง. ภาคตะวันออกเฉียงเหนือ",
    "output": "ก"
}

Model OpenThaiGPT ที่ฉลาดพอจนสามารถทำ Few-Shot Learning ได้ใกล้เป็นจริงเข้ามาแล้วครับ ขอทุกคนช่วยสนับสนุนกันต่อไปนะครับ ขอบคุณมากครับ ดร. กอบกฤตย์ วิริยะยุทธกร ดร. สุเมธ ยืนยง

Last updated