ในบทที่แล้ว เราได้พูดคุยถึงศักยภาพของการใช้ LLM สำหรับการสร้างชุดข้อมูลสังเคราะห์เพื่อปรับแต่งโมเดลรีทรีฟเวอร์ในพื้นที่เพิ่มเติม วิธีการนี้เป็นไปได้เนื่องจากมีคลังเอกสารที่ไม่มีป้ายกำกับจำนวนมาก แต่ละเอกสารใช้เพื่อสร้างแบบสอบถามสังเคราะห์ตั้งแต่หนึ่งรายการขึ้นไป และสร้างคู่แบบสอบถาม-เอกสาร
แต่จะเกิดอะไรขึ้นถ้าการดึงข้อมูลไม่ใช่งานของคุณ? สมมติว่าคุณกำลังแก้ไขปัญหาการจัดประเภทเอกสารทางกฎหมาย แต่ไม่ได้รับอนุญาตให้ส่งข้อมูลใดๆ ไปยัง API ภายนอก ในสถานการณ์นี้ คุณจะต้องฝึกโมเดลท้องถิ่น อย่างไรก็ตามการรวบรวมข้อมูลอาจเป็นอุปสรรคสำคัญทำให้เกิดความล่าช้าในการพัฒนาผลิตภัณฑ์
เพื่อความง่าย สมมติว่าเป้าหมายคือการสร้างเรื่องราวของเด็ก งานนี้เป็นจุดเริ่มต้นสำหรับการวิจัยโดย Eldan et al. (2023) แต่ละเรื่องประกอบด้วย 2-3 ย่อหน้าซึ่งมีโครงเรื่องและธีมที่ตรงไปตรงมา ในขณะที่ชุดข้อมูลทั้งหมดครอบคลุมคำศัพท์และความรู้ข้อเท็จจริงของเด็ก
ภาษาไม่ใช่แค่ระบบกฎและสัญลักษณ์เท่านั้น มันสื่อและตีความความหมาย ความท้าทายหลักของการใช้แบบจำลองภาษาขนาดใหญ่เพื่อสร้างข้อมูลการฝึกอบรมคือการรับรองความหลากหลายของชุดข้อมูล แม้จะมีอุณหภูมิเจเนอเรชันสูงก็ตาม โมเดลสามารถสร้างชุดข้อมูลที่ซ้ำกันซึ่งขาดความหลากหลายที่จำเป็น (แม้แต่ภาษาของเด็กก็ตาม) การเชื่อมโยงกันและความเกี่ยวข้องเป็นความท้าทายในการสร้างภาษาธรรมชาติอื่นๆ
เพื่อจัดการกับปัญหาความหลากหลาย ผู้เขียนได้เตรียมคำศัพท์พื้นฐานประมาณ 1,500 คำ โดยสะท้อนคำศัพท์ของเด็กทั่วไป โดยแบ่งออกเป็นคำนาม กริยา และคำคุณศัพท์ ในแต่ละรุ่น มีการสุ่มเลือกคำกริยาหนึ่งคำ คำนามหนึ่งคำ และคำคุณศัพท์หนึ่งคำ จากนั้นโมเดลจะสร้างเรื่องราวที่รวมคำที่สุ่มเหล่านี้ไว้
เทคนิคนี้ขยายความหลากหลายของชุดข้อมูลได้อย่างมาก ทำให้มั่นใจได้ว่าเรื่องราวจะครอบคลุมคำศัพท์ทั้งหมดของเด็กและการผสมผสานแนวคิดที่หลากหลาย นอกจากนี้ ผู้เขียนยังได้รวมเอาคุณลักษณะของเรื่องราวที่เป็นไปได้ไว้ด้วย (เช่น บทสนทนา การหักมุมของโครงเรื่อง ตอนจบที่เลวร้าย หรือบทเรียนทางศีลธรรม) มีการเลือกชุดย่อยของคุณลักษณะเหล่านี้แบบสุ่มสำหรับแต่ละเรื่องราว และโมเดลได้รับแจ้งให้รวมไว้ด้วย
Prompt:
Write a short story (3-5 paragraphs) which only uses very simple words that a 3 year old child would likely understand. The story should use the verb ”{random.choice(verbs_list)}”, the noun ”{random.choice(nouns_list)}” and the adjective ”{random.choice(adjectives_list)}”. The story should have the following features: {random.choice(features_list)}, {random.choice(features_list)}. Remember to only use simple words!
สมมติว่าช่องว่างถูกเติมเต็มดังนี้:
Prompt:
Write a short story (3-5 paragraphs) which only uses very simple words that a 3 year old child would likely understand. The story should use the verb ”decorate”, the noun ”thunder” and the adjective ”ancient”. The story should have the following features: the story should contain at least one dialogue, the story has a bad ending. Remember to only use simple words!
Output:
Once upon a time, in an ancient house, there lived a girl named Lily. She loved to decorate her room with pretty things. One day, she found a big box in the attic. She opened it and saw many shiny decorations. Lily was very happy and decided to use them in her room. As Lily was decorating her room, the sky outside became dark. There was a loud thunder sound, and Lily got scared. She ran to her mom and said, ”Mommy, the thunder is so loud!” Her mom hugged her and said, ”Don’t worry, it will pass soon.” But the thunder did not stop. It got louder and louder, and the ancient house started to shake. Suddenly, the roof fell down on the pretty decorations. Lily was sad because her room was not pretty anymore. The end.
ที่นี่เราใช้โมเดลการสร้างข้อความล่าสุด (GPT-3.5 และ GPT-4) ซึ่งสามารถสร้างเนื้อหาสังเคราะห์จำนวนมหาศาลได้ตามคำแนะนำ เนื่องจากเรากำหนดข้อความแจ้งแบบสุ่มในแต่ละครั้ง และโมเดลก็ปฏิบัติตามอย่างแม่นยำ เรื่องราวจึงมีความหลากหลายอย่างไม่น่าเชื่อ การเล่าเรื่องจะแตกต่างไปจากเดิมอย่างสิ้นเชิงแม้ว่าคำหนึ่งหรือสองคำจะยังคงเหมือนเดิมก็ตาม โดยพื้นฐานแล้ว เราใช้เทคนิคนี้เพื่อแทรกการสุ่มเข้าไปในพรอมต์ เพื่อสร้างชุดข้อมูลที่หลากหลาย
คุณได้รับแนวคิด:
ระบุว่าพารามิเตอร์/เอนทิตีใดอาจแตกต่างกันระหว่างตัวอย่างต่างๆ ในชุดข้อมูลสังเคราะห์ของคุณ
สร้างหรือรวบรวมคอลเลกชันของเอนทิตีเหล่านี้ด้วยตนเองเพื่อเติมเต็มช่องว่าง
สร้างชุดข้อมูลโดยการสุ่มเลือกเอนทิตีเพื่อแทรก วิธีที่ดีที่สุดคือตั้งอุณหภูมิการสร้างให้สูงกว่าค่าเริ่มต้นแต่ต่ำกว่าค่าสูงสุด
ฝึกโมเดลท้องถิ่นเกี่ยวกับผลลัพธ์การสร้าง ChatGPT/GPT-4
สิ่งสำคัญคือต้องทราบว่าหนึ่งในเอนทิตีที่ใช้ในการเพาะรุ่นของคุณอาจเป็นป้ายกำกับระดับ ตัวอย่างเช่น ในงานการจัดประเภทความรู้สึก คุณสามารถพูดถึง "เชิงบวก" หรือ "เชิงลบ" ได้โดยตรงในพร้อมต์เพื่อรับข้อความที่สร้างขึ้นพร้อมป้ายกำกับที่เกี่ยวข้อง จากนั้น ตัวแยกประเภทเฉพาะจะได้รับการฝึกอบรมเกี่ยวกับข้อมูลนี้
รูปแบบสามารถทำให้ซับซ้อนมากขึ้นได้โดยใช้เอนทิตีเพิ่มเติม ซึ่งบางเอนทิตีถูกสร้างขึ้นล่วงหน้าโดย LLM เอง ตัวอย่างเช่น เราอาจเริ่มต้นด้วยการขอให้สร้างบทสรุปเรื่องราวและจดหนึ่งประโยคที่จะต้องปรากฏในเรื่อง หลังจากนั้น เพียงใช้ข้อมูลระดับกลางที่สร้างขึ้นในคำขอสุดท้าย
Prompt:
Summary: {a short summary generated by LLM, using the approach above}
Features: {copy the features from the initial prompt}
Sentence: {a sentence generated by LLM, which should be present in the story}
Words: {copy the words from the initial prompt}
Story:
ตัวอย่างข้อความแจ้งการกรอก:
Prompt:
Summary: Lily and Timmy build a sandcastle together and learn to compromise, but it gets knocked over by a gust of wind. They find beauty in the broken sandcastle and play happily with a butterfly.
Features: Dialogue, Foreshadowing, Twist
Sentence: One day, she went to the park and saw a beautiful butterfly.
Words: disagree, network, beautiful
Story:
Output:
Once upon a time, there was a little girl named Lily. She loved to play with her toys and her friends. One day, she went to the park and saw a beautiful butterfly. She tried to catch it, but it flew away. Lily’s friend, Timmy, came to play with her. They decided to build a sandcastle, but they disagreed on how to build it. Lily wanted to make it tall, while Timmy wanted to make it wide. They argued for a while, but finally agreed to make it both tall and wide. As they were building the sandcastle, they noticed a group of ants working together. They realized that the ants were building a network of tunnels. Suddenly, a gust of wind came and knocked over their sandcastle. They were sad, but then they saw the butterfly again. It landed on the remains of their sandcastle and they realized that it was still beautiful, even in its broken state. They smiled and played together happily.
ดังนั้นจึงเป็นไปได้ที่จะสร้างตัวอย่างที่หลากหลายมากหลายแสนตัวอย่างเพื่อฝึกโมเดล สมมติว่าคุณต้องฝึกตัวแยกประเภทเพื่อกำหนดว่าข้อความมีบทสนทนาหรือโครงเรื่องที่บิดเบี้ยว เนื่องจากพรอมต์เริ่มต้นมีป้ายกำกับ จึงทราบว่าค่าเป้าหมายใดที่ต้องคาดการณ์สำหรับตัวอย่างที่สร้างขึ้นแต่ละรายการ
คำถามสำคัญที่เกิดขึ้นจากแนวทางนี้คือ การสังเคราะห์ชุดข้อมูลสามารถให้ประโยชน์ได้อย่างแท้จริงหรือไม่เมื่อฝึกอบรมเครือข่ายสำหรับแอปพลิเคชันในโลกแห่งความเป็นจริง โชคดีที่ผู้เขียนตอบคำถามนี้โดยดำเนินการตรวจสอบและตรวจสอบประสิทธิภาพของการฝึกอบรมโมเดลภาษาเล็กๆ โดยใช้ข้อมูลสังเคราะห์ที่ได้มาจาก LLM ที่ล้ำสมัย
ในการศึกษาของพวกเขา Gunasekar et al. (2023) เน้นย้ำถึงความสำคัญของข้อมูลการฝึกอบรมคุณภาพสูงในแบบจำลอง พวกเขาแย้งว่าแบบจำลองภาษาจะมีประสิทธิภาพมากขึ้นหากได้รับการฝึกอบรมโดยใช้สื่อที่มีลักษณะคล้ายกับ "หนังสือเรียน" ที่ได้รับการยกย่อง ซึ่งได้แก่ ชัดเจน ครอบคลุม ให้ข้อมูล และไม่ลำเอียง
หลักการเหล่านี้เป็นพื้นฐานสำหรับการสร้างชุดข้อมูลกึ่งสังเคราะห์เพื่อฝึก LLM ที่เรียกว่า Phi-1 งานประเมินผลหลักคือการสร้างฟังก์ชัน Python ที่เป็นไปตามคำอธิบายข้อความหรือสตริงเอกสารที่กำหนด คุณภาพของแบบจำลองได้รับการประเมินโดยใช้เกณฑ์มาตรฐาน HumanEval (Chen et al., 2021).
ผู้เขียนเน้นย้ำถึงความสำคัญของความหลากหลายในแนวทางนี้ด้วยเหตุผลหลายประการ โดยจะทำให้โมเดลภาษาได้สัมผัสกับนิพจน์การเขียนโค้ดและวิธีการแก้ปัญหาที่หลากหลาย ลดความเสี่ยงในการติดตั้งมากเกินไปหรือการพึ่งพารูปแบบเฉพาะ และปรับปรุงความสามารถของโมเดลในการจัดการงานที่ไม่คุ้นเคยหรืองานที่เป็นนวัตกรรมใหม่
เพื่อจัดการกับความท้าทายในการเขียนโค้ด ผู้เขียนได้สร้างเอกสารที่มีลักษณะคล้ายตำราเรียนซึ่งมุ่งเน้นไปที่หัวข้อที่ส่งเสริมการใช้เหตุผลและทักษะอัลกอริทึมขั้นพื้นฐาน พวกเขาบรรลุถึงความหลากหลายโดยกำหนดข้อจำกัดเกี่ยวกับ:
topics (หัวข้อ)
target audience (กลุ่มเป้าหมาย)
น่าเสียดายที่ผู้เขียนไม่ได้ให้ข้อมูลเฉพาะเกี่ยวกับเทมเพลตพร้อมท์ที่ใช้ในการสร้างข้อมูลสังเคราะห์ อย่างไรก็ตาม พวกเขาก็แสดงให้เห็นถึงผลลัพธ์ที่ได้ พวกเขาเลือกใช้ ChatGPT (GPT-3.5) แทน GPT-4 และแม้แต่กลยุทธ์นี้ก็ให้ผลลัพธ์ที่ยอดเยี่ยมเนื่องจากพวกเขาปรับแต่งโมเดลอย่างละเอียดโดยใช้ข้อมูลสังเคราะห์
แหล่งที่มาของภาพ: Gunasekar et al. (2023)
สิ่งสำคัญคือต้องใส่ใจกับข้อจำกัดของกลุ่มเป้าหมาย การกำหนดกลุ่มเป้าหมายเป็นวิธีการที่ยอดเยี่ยมในการเพิ่มความหลากหลายของข้อมูลสังเคราะห์ นักเรียนมัธยมปลาย นักศึกษาระดับปริญญาตรีด้าน CS และผู้สมัครระดับปริญญาเอกใช้ถ้อยคำอธิบายและประมวลผลข้อมูลที่แตกต่างกันออกไป ส่งผลให้ข้อมูลที่สร้างขึ้นมีความหลากหลายมากยิ่งขึ้น ลองสร้างพรอมต์ขึ้นมาใหม่
Prompt:
Write an extract from a Computer Science textbook for a 1st-year bachelor. The coding language is Python 3.6.
This is an extract from the middle of the following topic: Singular matrices.
The extract starts with a high-level overview of the topic. Then, it presents an example and describes the solution in natural language. After that, it provides 1-2 code snippets, following the example. Each snippet has no more than 10 rows. There should be no text after code snippets.
Keep in mind that the extract should be concise and explain only one concept at a time. The code should represent a Python function & its call. All the common ML/DS libraries are available.
Don't be too verbose. The expected length of the extract is 2 paragraphs at most.
Output:
**Singular Matrices**
In linear algebra, a matrix is termed as "singular" if it doesn't have an inverse. Another equivalent definition is when the determinant of the matrix is zero. Singular matrices are crucial because they represent systems of linear equations that do not have a unique solution.
Consider a 2x2 matrix `[[a, b], [c, d]]`. If the product of `ad` and `bc` is the same (i.e., `ad = bc`), then this matrix is singular. Let's explore this with an example: given the matrix `[[2, 4], [1, 2]]`, you'll find that the product of the diagonals yields the same result (2 * 2 = 4 * 1), thus it's a singular matrix.
import numpy as np
def is_singular(matrix):
determinant = np.linalg.det(matrix)
return abs(determinant) < 1e-9
matrix_example = np.array([[2, 4], [1, 2]])
print(is_singular(matrix_example)) # returns True
ใกล้แล้ว!
โดยรวมแล้ว ผู้เขียนได้สร้างโทเค็น 1B เพื่อเพิ่มชุดการฝึกของโมเดล ทำให้โมเดลขนาดเล็ก (เพียงพารามิเตอร์ 1.5B) สามารถแข่งขันกับโมเดลได้สิบเท่าของขนาด (สำหรับรายละเอียด โปรดดูบทความ Gunasekar และคณะ (2023)).
แหล่งที่มาของภาพ: Gunasekar et al. (2023)
สำหรับงานของคุณ คุณอาจไม่ต้องการข้อมูลสังเคราะห์จำนวนมากเช่นนี้ (เนื่องจากผู้เขียนได้ศึกษาการฝึกอบรมล่วงหน้าซึ่งต้องใช้ทรัพยากรจำนวนมาก) อย่างไรก็ตาม แม้จะเป็นการประมาณการแล้ว ที่ราคา $0.002 ต่อโทเค็น 1,000 รายการ (ราคา ChatGPT มาตรฐาน) ก็จะมีราคา $2000 สำหรับโทเค็นที่สร้างขึ้นและมีมูลค่าเท่ากันโดยประมาณสำหรับ แจ้ง
โปรดทราบว่าการปรับแต่งข้อมูลสังเคราะห์อย่างละเอียดจะมีคุณค่ามากขึ้นเมื่อโดเมนมีความเฉพาะเจาะจงมากขึ้น โดยเฉพาะอย่างยิ่งหากภาษานั้นเบี่ยงเบนไปจากภาษาอังกฤษ (นอกเหนือจากปัจจัยอื่นๆ) นอกจากนี้วิธีนี้ยังทำงานได้ดีกับ Chain-of-Thought (CoT) ช่วยให้โมเดลท้องถิ่นปรับปรุงความสามารถในการให้เหตุผล เทคนิคการกระตุ้นเตือนอื่นๆ ก็ใช้ได้ผลเช่นกัน และอย่าลืมว่าโมเดลโอเพ่นซอร์สอย่าง Alpaca (Taori et al., (2023)) และ Vicuna (Zheng et al., (2023)) เก่งด้วยการปรับแต่งข้อมูลสังเคราะห์อย่างละเอียด