Tác giả: Công Anh (Software Engineer | Got It AI)
Trong tech blog số này, Got It sẽ cùng bạn tìm hiểu về Prompt Engineering cũng như một số kỹ thuật cơ bản giúp đầu ra của Large Language Models (LLMs) tối ưu nhất có thể!
Mục lục
ChatGPT là gì? Hoạt động như thế nào?
Chúng ta đã quá quen thuộc với ChatGPT. Các model tương tự như GPT-3, GPT-4 của OpenAI hay PaLM của Google cũng không còn lạ lẫm. Nhưng cụ thể chúng là gì và hoạt động như thế nào, cùng tìm hiểu sâu hơn nhé!
Những khái niệm vừa được nhắc đến bên trên đều là Large Language Model (LLM) – một loại model xử lý ngôn ngữ tự nhiên. Chúng sử dụng rất nhiều dữ liệu văn bản đầu vào để phân tích và suy luận mối quan hệ giữa các từ trong văn bản đó. Dựa trên những thông tin “học” được và yêu cầu mà người dùng gửi lên, chúng sẽ đưa ra câu trả lời phù hợp nhất.
Vậy nên, lượng dữ liệu đầu vào càng nhiều, chất lượng dữ liệu càng cao thì chất lượng của model càng tốt, câu trả lời càng chính xác và phù hợp.
Prompt Engineering là gì?
Để model có thể thực hiện một nhiệm vụ cụ thể nào đó, chúng ta cần cung cấp cho nó ngữ cảnh, thông tin và yêu cầu, hay còn gọi là prompt
.
Tuy nhiên, biết viết prompt là chưa đủ. Chúng ta cần phát triển và tối ưu hoá prompt để model trả về kết quả phù hợp nhất với mong muốn của chúng ta. Đây chính là Prompt Engineering.
Nói chung, Prompt Engineering là một kỹ năng hữu dụng giúp chúng ta cải thiện chất lượng đầu ra của model và sử dụng nó một cách hiệu quả hơn.
Một prompt cơ bản
Hãy tưởng tượng một giao diện mà bạn có thể dùng để tương tác với model. Bạn có thể cung cấp một prompt và model sẽ sinh ra câu trả lời. Ví dụ:
- Prompt:
Neoclassicism is
- Câu trả lời:
a movement in art, architecture, and literature that emerged in the 18th century and reached its peak during the late 18th and early 19th centuries.
Trong trường hợp này, prompt không phải một câu hỏi, cũng không phải là một yêu cầu gì phức tạp, mà chỉ đơn giản là một câu chưa hoàn chỉnh. Vì thế, câu trả lời của model sẽ là những từ phù hợp nhất để có thể hoàn thiện câu đó.
Thành phần của một prompt
Một prompt có thể chứa các thành phần sau:
- Ngữ cảnh (Context)
- Yêu cầu (Instruction)
- Thông tin đầu vào (Input data)
- Chỉ thị đầu ra (Output indicator)
Bạn có chỉ ra được những thành phần trên trong ví dụ dưới đây không?
You're a research assistant who always classifies things as the opposite of what they should be.
Classify the following text into positive, neutral or negative.
Don't say anything other than the sentiment:
Text: The food at this restaurant sucks!
Sentiment:
Cùng phân tích thử nhé!
- Ngữ cảnh: “You’re a research assistant who always classifies things as the opposite of what they should be.”
- Yêu cầu: “Classify the following text into positive, neutral or negative. Don’t say anything other than the sentiment:”
- Thông tin đầu vào: “The food at this restaurant sucks!”
- Chỉ thị đầu ra: “Sentiment:”
Một số kỹ thuật Prompt Engineering cơ bản
Few-Shot
Ta có hai ví dụ sau:
- Ví dụ 1:
Prompt:
What is the sentiment of this sentence? I demand to see your manager!
Response:
Negative
- Ví dụ 2:
Prompt:
Is the sum of the following numbers an odd number? 14, 93, 12, 35
Response:
Yes, the sum of these numbers is 154, which is an odd number.
Khi prompt không đưa ví dụ nào cho model, ta gọi kỹ thuật này là Zero-Shot.
Cũng là 2 ví dụ trên, nhưng nếu cung cấp một vài ví dụ trong prompt để model có thể học theo, thì ta đang áp dụng một kỹ thuật gọi là Few-Shot.
- Ví dụ 1 sau khi áp dụng Few-Shot:
Prompt:
What is the sentiment of this sentence? This is awesome!
Happy
What is the sentiment of this sentence? Screw you
Angry
What is the sentiment of this sentence? Yay
Happy
What is the sentiment of this sentence? I demand to see your manager!
Response:
Angry
- Ví dụ 2 sau khi áp dụng Few-Shot:
Prompt:
Is the sum of the following numbers an odd number? 129, 295, 925, 229
No
Is the sum of the following numbers an odd number? 222, 13, 87, 61
Yes
Is the sum of the following numbers an odd number? 35, 76, 91, 38
No
Is the sum of the following numbers an odd number? 14, 93, 12, 35
Response:
Yes
Cùng phân tích một chút nhé! Có thể thấy, sau khi áp dụng kỹ thuật Few-Shot, đưa cho model một vài ví dụ bằng cách lặp lại thành phần What is the sentiment of this sentence?
(yêu cầu) và This is awesome. Happy
(dữ liệu đầu vào), model đã hiểu được cấu trúc câu trả lời và trả về từ hợp lệ.
Tuy nhiên, ở ví dụ 2 sau khi đã áp dụng Few-Shot, mặc dù chúng ta đã đưa cho model những ví dụ trả lời đúng, nhưng output cuối cùng của model vẫn sai. Điều này cho thấy một hạn chế của kỹ thuật Few-Shot: Model chưa trả lời đúng những yêu cầu mang tính suy luận cao như tính toán.
Chain-of-Thought Prompting
Khác với Few-Shot, kỹ thuật Chain-of-Thought Prompting giúp model có khả năng suy luận tốt hơn nhờ việc chỉ ra kỹ càng các bước tư duy.Với bài toán trong ví dụ 2 ở trên, khi yêu cầu model trả lời xem tổng các số là chẵn hay lẻ, ta có thể chia ra làm hai bước nhỏ hơn:
- Tính tổng các số.
- Xem xem tổng có chia hết cho 2 không. Nếu có thì số đó là chẵn, còn nếu không thì số đó là lẻ.
Prompt:
Is the sum of the following numbers an odd number? 129, 295, 925, 229
129 + 295 + 925 + 229 = 1578. 1578 is divisible by 2, so it is an even number. The answer is no.
Is the sum of the following numbers an odd number? 222, 13, 87, 61
222 + 13 + 87 + 61 = 383. 383 is not divisible by 2, so it is an odd number. The answer is yes.
Is the sum of the following numbers an odd number? 35, 76, 91, 38
35 + 76 + 91 + 38 = 240. 240 is divisible by 2, so it is an even number. The answer is no.
Is the sum of the following numbers an odd number? 14, 93, 12, 35
Response:
14 + 93 + 12 + 35 = 154. 154 is divisible by 2, so it is an even number. The answer is no.
Như vậy, việc kết hợp Few-Shot và Chain-of-Thought đã giúp model đưa ra câu trả lời chính xác cho yêu cầu phức tạp này.
Specifying Output Structure
Đôi khi, bạn cần model trả lời prompt của mình dưới một định dạng nhất định, chẳng hạn như JSON. Bạn có thể đạt được điều này bằng cách cho model biết format của output bạn muốn ngay trong prompt của mình.Ví dụ:
Prompt:
Given the following sentences:
The breathtaking sunset over the horizon filled my heart with joy.
Despite the rainy weather, the cozy atmosphere inside the café made me feel content.
Receiving that unexpected gift from my friend made me incredibly grateful.
Witnessing the act of kindness between strangers warmed my soul.
Output format:
{
"sentiment" : "",
"reason": ""
}
Response:
{
"sentiment" : "Joy",
"reason": "The breathtaking sunset over the horizon"
}
{
"sentiment" : "Contentment",
"reason": "The cozy atmosphere inside the cafe"
}
{
"sentiment" : "Gratefulness",
"reason": "Receiving that unexpected gift from my friend"
}
{
"sentiment" : "Warmth",
"reason": "Witnessing the act of kindness between strangers"
}
Adjusting Parameters
Khi viết prompt, bạn nên cân nhắc điều chỉnh một số tham số của model bởi vì với những thiết lập khác nhau, đầu ra của model có thể sẽ rất khác.
Hai tham số đáng chú ý nhất là temperature
và top_p
. Chúng điều khiển sự tất định (determinism) trong output của một model. temperature
luôn chứa giá trị từ 0 đến 2. Còn top_p
thì luôn chứa giá trị từ 0 đến 1.
temperature
điều khiển sự “sáng tạo” hay “ngẫu nhiên” của model. Với temperature
cao (ví dụ như 0.7) output sẽ trở nên sáng tạo và đa dạng hơn trong nội dung và câu từ. Ngược lại, khi temperature
thấp, output sẽ ngắn gọn và ít chi tiết hơn. Nếu temperature = 0
thì câu trả lời sinh ra luôn giống nhau.
top_p
điều khiển “bể” từ mà model có thể chọn ở mỗi bước khi sinh ra câu trả lời. . Khi top_p = 0
, model sẽ luôn chọn từ thích hợp nhất. Ngược lại, với top_p = 1
, tập hợp những từ mà model có thể dùng sẽ lớn lên đáng kể. Model chỉ được chọn những từ mà xác suất tích luỹ của chúng vượt quá giá trị của top_p
.
- Khi giá trị hai tham số thấp thì model sẽ sinh ra câu trả lời thực tế, ít cảm xúc hơn. Thiết lập này phù hợp cho những việc như: Trả lời câu hỏi, giải toán, soạn thảo văn bản,…
- Khi giá trị hai tham số cao thì model sẽ sinh ra câu trả lời đa dạng, ngẫu nhiên, phù hợp với những việc như viết văn, làm thơ,…
Lưu ý: Bạn chỉ nên thay đổi một trong hai tham số tại một thời điểm để hành vi của model trở nên phù hợp nhất với yêu cầu của mình.
- Ví dụ 1:
temperature = 0.1
,top_p = 1
Prompt:
Write a two-sentence news report on a volcano eruption in Italy
Response:
A volcano in Italy has erupted, spewing ash and smoke into the sky. The eruption has caused some disruption to air travel in the area.
- Ví dụ 2:
temperature = 0.9
,top_p = 1
Prompt:
Write a two-sentence news report on a volcano eruption in Italy
Response:
A massive volcano eruption occurred in the Italian peninsula overnight, sending a huge ash cloud high into the air and a stream of lava down the volcano's slopes. Parts of the region were evacuated and nearby villages were advised to take precautions against the ash.
Kết bài
Hy vọng qua bài viết này, bạn đã biết được Prompt Engineering là gì cũng như cách áp dụng một số kỹ thuật Prompt Engineering để cải thiện chất lượng đầu ra của model.
Nếu bạn thấy bài viết này hữu ích thì hãy lưu lại và chia sẻ tới bạn bè ngay nhé! Đừng quên theo dõi chuyên mục Tech Blog để cập nhật những kiến thức công nghệ, lập trình bổ ích được chia sẻ bởi chính những Software Engineers tại Got It!