Tác giả bài viết: Lê Văn Lợi (Nguyên Viện trưởng Viện Tin học Doanh nghiệp thuộc VCCI)
Để giúp anh/chị quyết định có đọc tiếp hay không, tôi xin phép cung cấp các thông tin liên quan đến bài post này như sau:
- Chủ đề: Machine Learning.
- Tính thời sự: Tháng 5/2023.
- Thời gian đọc: 15 phút.
~
Chúng ta chứng kiến sự bùng nổ của Large Language Models (LLM) trong thời gian gần đây, kể từ sau khi ChatGPT xuất hiện vào ngày 30/11/2022. Ngày 14/3/2023, OpenAI công bố phiên bản hạn chế của GPT-4 thông qua ChatGPT Plus. Thế giới cảm nhận AGI (artificial general intelligence – trí tuệ nhân tạo tổng quát) đang đến rất gần, nhanh hơn nhiều so với tất cả các dự báo trước đây.
Câu chuyện tôi muốn nhàn đàm cùng anh/chị hôm nay chỉ xoay quanh một vấn đề nhỏ trong câu chuyện lớn đó: làm thế nào để khai thác sức mạnh của LLM: Prompt Engineering, viết tắt là PE. Xin phép anh/chị không dịch cụm từ này. Lý do? Thứ nhất: dịch rất khó. Thứ hai: đôi lúc chúng ta chấp nhận du nhập từ vựng nếu cụm từ đó được cả thế giới sử dụng, đặc biệt trong thời kỳ phôi thai khái niệm.
–
Ⓐ. Đề dẫn
Người dùng hoặc nhà nghiên cứu “nói chuyện” với LLM bằng cách nào? Rất đơn giản: chúng ta đưa đầu vào Prompt, LLM đọc đầu vào và hồi đáp bằng đầu ra Response như hình vẽ dưới đây.
Cái gì quyết định chất lượng của hồi đáp Response? Hay nói cách khác, hồi đáp Response có đáp ứng được dụng ý của Prompt hay không? Rõ ràng, yếu tố cơ bản nhất là chất lượng của mô hình LLM. Chẳng hạn nếu LLM là ChatGPT hoặc ChatGPT Plus thì Response thường “rất mỹ mãn”. Ngoài chất lượng của mô hình LLM, còn một yếu tố nữa quyết định đến chất lượng hồi đáp Response – đó là việc chúng ta thiết kế Prompt hay dở thế nào. Cái này rất giống với đời thường thôi. Có nhiều người đặt vấn đề, đặt câu hỏi rất hay – nói đến đâu hiểu đến đó. Trong trường hợp này, hẳn nhiên chúng ta kỳ vọng hồi đáp chất lượng cao nhờ cách đặt vấn đề hay. Nhưng cũng có nhiều người đặt vấn đề rối rắm, thậm chí mâu thuẫn trong câu hỏi. Hệ quả: chúng ta khó mà hy vọng có hồi đáp hay được.
–
Bài này chủ yếu đề cập đến cách thiết kế, cách đặt vấn đề, cách đặt câu hỏi cho LLM: Prompt Engineering. Tham chiếu cho bài post này là trang Prompt Engineering Guide dành cho độc giả “ngại” lập trình và trang ChatGPT Prompt Engineering for Developers dành cho anh/chị thuộc tuýp “tò mò”, biết đôi chút về lập trình.
–
Chọn LLM để trải nghiệm. Kể từ thời điểm ra đời của ChatGPT, gần như hàng ngày xuất hiện LLM mới. Trong khuôn khổ bài post này, tôi chỉ chọn 2 LLM để trải nghiệm, đó là ChatGPT của OpenAI và Bing CHAT của Microsoft. Lý do của việc lựa chọn này: cả ChatGPT lẫn Bing CHAT khá ổn định về chất lượng, đa ngữ trong đó có tiếng Việt, nhưng đặc biệt hơn cả là chúng ta có thể sử dụng chúng một cách miễn phí.
–
Ⓑ. Prompt?
Có thể anh/chị đặt câu hỏi: Prompt là gì vậy? Ở mức sơ đẳng, Prompt có cấu trúc rất đơn giản:
Hoặc
Loại Prompt tiêu chuẩn (Standard) như trên là loại phổ biến nhất, đặc biệt khi chúng ta lần đầu tiếp cận với ChatGPT hoặc Bing Chat.
Tổng quát hơn một chút, người ta thấy Prompt gồm một số thành phần như sau:
- Role (Định nghĩa vai trò của Chatbot trong Prompt)
- Instruction (câu hỏi hoặc câu lệnh)
- Context (bối cảnh)
- Input Data (dữ liệu đầu vào, thường là dữ liệu demo)
- Output Indicator (chỉ định dạng thức đầu ra: cấu trúc bảng, JSON, HTML, …)
Nghĩa là: Prompt = [Role] + Instruction + [Context] + [Input Data] + [Output Indicator]. Chỉ có thành phần Instruction là phải có, còn lại thì có cũng được, không có cũng được. Các thành phần này cũng không nhất thiết phải tuân theo một trật tự nào cả.
Người ta liệt kê ra một số ví dụ về Prompt:
- Text Summarization (Tóm tắt văn bản)
- Information Extraction (Trích xuất thông tin)
- Question Answering (Hỏi đáp)
- Text Classification (Phân loại văn bản)
- Conversation (Hội thoại)
- Code Generation (Tạo mã lập trình)
- Reasoning (Lý luận)
–
Ⓒ. Kỹ thuật thiết kế Prompt
Lưu ý rằng để có được một “Prompt hay” là cả một quá trình. Khởi đầu chúng ta viết Prompt đơn giản. Sau đó chúng ta chi tiết hóa, đưa vào các từ khóa, đưa vào đặc tả, đưa vào dữ liệu demo cho đến khi nhận được hồi đáp Response như mong đợi.
Nếu anh/chị đã có trải nghiệm sử dụng các LLM như ChatGPT hay Bing CHAT thì làm thế nào để có một Prompt hay hóa ra không đơn giản như suy nghĩ ban đầu. Nếu chúng ta có thời gian lược qua các nghiên cứu liên quan đến LLM trong thời gian kể từ năm 2020 đổ lại, rất dễ nhận thấy có khá nhiều bài báo khoa học đề xuất cách thiết kế Prompt. Càng ngày người ta càng nhận ra rằng để người dùng thông thường khai thác sức mạnh tiềm ẩn của LLM thì cách tốt nhất là thiết kế Prompt một cách phù hợp với mục tiêu và lĩnh vực của họ.
Liệu cách tiếp cận này có phức tạp hóa một vấn đề mà thoạt nhìn có vẻ đơn giản hay không? Để trả lời câu hỏi này, tôi xin phép lấy một ví dụ: môn học Cơ sở dữ liệu quan hệ (Relational Database – RDBMS). Về bản chất, RDBMS là tập hợp các bảng có mối quan hệ với nhau. Nhìn qua có vẻ rất đơn giản. Thế mà khởi đầu từ bài báo của Dr. Edgar F. Codd vào năm 1970 cho đến mãi về sau người ta mới thống nhất được một ngôn ngữ truy vấn SQL để khai thác RDBMS. Huống hồ đây là LLM – tổng hợp kiến thức của nhân loại được tích hợp dưới dạng văn bản và có mối quan hệ rất phức tạp được mã hóa thông qua mô hình Transformer! Vậy nên Prompt Engineering phức tạp là phải.
–
Dưới góc độ kỹ thuật, PE không làm thay đổi các trọng số (weights) của mô hình – khác với Fine-tuning. PE kích hoạt tri thức của LLM ở giai đoạn Pre-training. Chúng ta hình dung LLM là một kho tri thức khổng lồ bao gồm gần như tất cả các lĩnh vực được lưu giữ và liên kết với nhau thông qua tập hợp các trọng số của nó. Thiết kế PE chính là làm sao “khiến” (elicit) LLM tận dụng kho tri thức khổng lồ đó để xuất ra hồi đáp Response đúng như dụng ý (intention).
Chú ý rằng PE là một môn khoa học thực nghiệm, đòi hỏi rất nhiều thử nghiệm rồi đối chiếu, so sánh, thay đổi, tiến hóa. Nếu anh/chị có thời gian tham khảo các PE trên mạng thì có thể sẽ bị “ngợp” với “vô số” ví dụ trong nhiều lĩnh vực. Cái mà tôi có thể đàm luận về PE chỉ có thể gói gọn trong một vài nguyên tắc, một số ít các dạng thức cơ bản mà thôi.
“`
Việc tận dụng các kỹ thuật này như thế nào để cho ra được hồi đáp Response thuộc một lĩnh vực nào đó lại là một vấn đề khác, rộng hơn, vượt ra ngoài khuôn khổ bài post này. Ví dụ, người ta có thể lập trình PE thành một trợ giảng cho sinh viên, học sinh, một cố vấn pháp lý, trợ lý ảo cho chủ doanh nghiệp, các chatbot bán hàng, …
–
ⓐ. Cài đặt tham số cho mô hình (LLM Settings)
Chúng ta chú ý rằng (nhắc lại) nguyên lý cơ bản của LLM là phát sinh “từ tiếp theo” từ một “chuỗi từ” trước đó. “Từ tiếp theo” được phát sinh theo xác suất: “từ” có xác suất cao nhất sẽ được chọn. Trong trường hợp có nhiều “từ” có xác suất gần bằng nhau thì hệ thống sẽ chọn như thế nào? Người dùng có thể “cài đặt” tham số cho hệ thống để tăng tính mềm dẻo trong việc lựa chọn “từ tiếp theo” (Next Word). Có 2 tham số có thể cài đặt, có tên gọi là Temperature và Top_P.
Temperature (nhiệt độ): Nhiệt độ cao nghĩa là LLM chọn “từ tiếp theo” với xác suất thấp hơn một chút, đồng nghĩa với phần hồi đáp Response có nhiều biến thể, mang tính ngẫu nhiên nhiều hơn, “sáng tạo” hơn. Tuy nhiên, nếu đặt nhiệt độ quá cao sẽ tăng nguy cơ “ảo giác” (hallucination), lúc đó LLM có thể chọn từ vô nghĩa hoặc lạc đề.
- Lúc nào thì cần nhiệt độ thấp? Đó là lúc chúng ta cần dữ liệu càng chính xác càng tốt trong hồi đáp. Ví dụ lúc chúng ta tạo mã lập trình.
- Lúc nào thì cần nhiệt độ cao? Đó là lúc chúng ta khuyến khích LLM phóng tác. Ví dụ chúng ta nhờ LLM làm thơ, viết truyện viễn tưởng.
Top_P. Thay vì cài đặt nhiệt độ, chúng ta có thể cài đặt Top_P. Nguyên tắc cài đặt Top_P tương tự như cài đặt Temperature. Nghĩa là Top_P thấp đồng nghĩa với Response có dộ chính xác cao; Top_P cao đồng nghĩa với Response có nhiều biến thể, phóng tác.
–
Chú ý: Chỉ nên điều chỉnh một trong hai tham số (Temperature, Top_P), không nên điều chỉnh đồng thời cả hai tham số.
–
▼ Cài đặt các tham số Temperature và Top_p như thế nào?
[Nếu anh/chị lập trình OpenAI API thì tham khảo tại đây. Ở đây tôi chỉ nói trường hợp chúng ta sử dụng Chatbot như ChatGPT hay Bing Chat.]
Sử dụng câu lệnh /set_options trước khi viết Prompt.
/set_options temperature= /top_p=
‘’ và ‘’ có giá trị nằm trong khoảng [0, 1].
Ví dụ, nếu chúng ta muốn đặt giá trị của Top_P bằng 0.5 và Temperature bằng 0.8 thì chúng ta đặt câu lệnh là “/set_options top_p=0.5 /temperature=0.8.”
–
Anh/chị nào tò mò về kỹ thuật xin tham khảo Phụ lục ①.
▲ Cài đặt
–
ⓑ. Đặt câu lệnh/câu hỏi (Instruction Prompting)
“Instruction” được hiểu là “câu lệnh/câu hỏi”. Có thể nói bài báo của OpenAI vào tháng 3/2022 đã đặt nền tảng cho việc “lái” LLM hồi đáp các Prompt dạng câu lệnh. Trước thời điểm đó, các LLM thường chỉ “viết tiếp” phần còn lại của Prompt. (Thỉnh thoảng chúng ta vẫn gặp hiện tượng “viết tiếp” Prompt nếu LLM không “hiểu” dụng ý đứng đằng sau.)
Câu lệnh thường bắt đầu bằng một động từ như “Mô tả”, “Viết”, “Tóm tắt”, “Phân loại”, “Dịch”, … Sau động từ, chúng ta có thể ghép thêm “đối tượng” (audience) và yêu cầu về nội dung.
Prompt:
Mô tả vật lý lượng tử là gì cho một đứa trẻ 6 tuổi bằng ngôn ngữ tuổi trẻ thơ.
Response:
Vật lý lượng tử là như một trò chơi thú vị với những hạt nhỏ như hạt cát siêu nhỏ và ánh sáng như những tia nắng sáng. Nó cho chúng ta biết về cách những hạt này nhảy lên và nhảy xuống như những điệu nhảy vui nhộn. Trong thế giới này, mọi thứ đều có thể xảy ra một cách kỳ quặc và đặc biệt. Chúng ta có thể tưởng tượng về việc đi qua các cánh cửa ma thuật, biến đổi từ hạt thành sóng và trò chuyện với những ngôi sao. Vật lý lượng tử giúp chúng ta khám phá những bí ẩn của vũ trụ và mang đến những cuộc phiêu lưu thú vị.
–
ⓒ. Thuyết minh dụng ý bằng làm mẫu (Zero-Shot / Few-Shot Prompting)
Khi tham khảo các tài liệu trên mạng nói về LLM hẳn anh/chị sẽ gặp cụm từ Zero-Shot, One-Shot, Few-Shot. Các thuật ngữ này lần đầu xuất hiện trong bài báo giới thiệu GPT-3 khi họ bàn về In-context learning.
In-context learning là gì? Đối với con người, chúng ta thu nhận kiến thức gần giống với giai đoạn Pre-training. Khi suy diễn một vấn đề nào đó (gần giống với mô hình suy diễn), chúng ta trước hết nhận diện tác vụ. Máy cũng vậy. Nhưng máy chỉ có khả năng nhận diện tác vụ qua đoạn văn bản đầu vào. Kỹ năng này có tên gọi là pattern recognition (nhận dạng mẫu): “mẫu” văn bản như vậy tương ứng với “tác vụ” nào. Các tác giả bài báo gọi là In-context learning. Họ chia thành 4 mẫu ngữ cảnh tiêu biểu của GPT-3 gồm:
• Fine-Tuning (FT): Trường hợp này mô hình cần hàng nghìn đến hàng trăm nghìn mẫu dữ liệu có dán nhãn để điều chỉnh trọng số (weight) trước khi đi vào thực tế sử dụng.
• Few-Shot (FS): Trường hợp này mô hình cần K mẫu demo nhưng không được phép điều chỉnh trọng số. K nằm trong khoảng 10-100. K mẫu này dùng để làm gì? Chỉ là để cho máy “nhận dạng tác vụ”!
• One-Shot (1S): Tương tự như Few-Shot nhưng trong trường hợp này, máy chỉ cần 1 mẫu để “nhận dạng tác vụ”.
• Zero-Shot (0S): Không cần mẫu demo mà vẫn biết được tác vụ! Trường hợp này dễ bị hiểu nhầm là “máy tự động hiểu”. Không phải vậy, thưa anh/chị. Thực chất, mô hình vẫn cần một mẫu nhưng mẫu này được ẩn đi bằng một câu lệnh. Ví dụ về câu lệnh: “Dịch tiếng Anh ra tiếng Pháp:”
–
Khi thiết kế PE, người ta cũng tận dụng kỹ thuật này. Một cách nôm na là chúng ta làm mẫu cho máy hiểu trước khi đặt câu hỏi. Zero-Shot tương ứng với trường hợp không cần làm mẫu máy vẫn hiểu. Few-Shot tương ứng với trường hợp chúng ta cấp một số mẫu cho máy hiểu:
Mẫu 1: Input_1 suy ra output_1
Mẫu 2: input_2 suy ra output 2
…
Mẫu k: input_k suy ra output_k
Câu hỏi: input x thì output là gì?
Lưu ý: ChatGPT đã được huấn luyện với rất nhiều mẫu (demo) nên trong phần lớn các trường hợp chúng ta không cần cấp mẫu (demo) mà máy vẫn hiểu.
Hãy lấy 1 ví dụ:
Prompt:
Trong văn bản dưới đây bạn đọc phần “Văn bản” và trả lời bằng cảm nhận “Thật thà” hoặc “Chém gió”. Tôi sẽ đưa cho bạn vài mẫu, sau đó bạn trả lời theo mẫu này.
“`
Văn bản: Người làm được nhiều việc nhưng nói chỉ làm được vài việc.
Cảm nhận: Thật thà.
Văn bản: Người làm được vài việc nhưng nói làm được rất nhiều việc.
Cảm nhận: Chém gió.
“`
Văn bản: Người viết một cuốn sách nhưng nói viết được rất nhiều sách.
Cảm nhận:
Response:
Cảm nhận: Chém gió.
–
ⓓ. Chuỗi suy luận (Chain-of-Thought Prompting)
Ý tưởng này xuất phát từ bài báo của nhóm Brain Team của Google vào tháng 1/2022 (chỉnh sửa vào tháng 1/2023). Đại ý của Chain-of-Thought (CoT) là người ta tách Prompt dài và phức hợp thành các bước trung gian (chia nhỏ thành từng bước một). Cách mà người ta thực hiện là làm mẫu một vài bài toán phức hợp trước khi yêu cầu giải một bài toán nào đó:
Bài toán 1: Đầu đề bài 1 (dạng phức hợp)
Cách giải: Chia thành từng bước nhỏ
Bài toán 2: Đầu đề bài 2 (dạng phức hợp)
Cách giải: Chia thành từng bước nhỏ
…
Bài toán cần giải: Đầu đề (dạng phức hợp).
Cách giải:
Tương tự như trường hợp Few-Shot Prompting, LLM có biệt tài bắt chước mẫu và giải bài toán theo từng bước như mẫu. Đây là một điểm rất thú vị và có phần bí ẩn của LLM.
Lưu ý: ChatGPT (kể cả Bing Chat và một số các chatbot khác) đã tích hợp ý tưởng của bài báo trên vào mô hình. Vì vậy, trong phần lớn các trường hợp, chúng ta có thể hỏi trực tiếp mà không cần làm mẫu. Trong phần trả lời, các LLM thường biết tự chia bài toán thành các bước nhỏ và trả lời một cách logic theo các bước chia đó.
Trước hết, CoT được áp dụng để giải toán (giải các bài toán chữ). Người ta kỳ vọng, thông qua CoT, LLM có thể lý luận (reasoning), lý luận thường thức (commonsense reasoning), suy diễn bằng ký hiệu (symbolic reasoning).
Để hình dung LLM hồi đáp như thế nào, tôi xin lấy ví dụ một Prompt về toán, mời anh/chị xem cách giải của ChatGPT và Bing Chat như thế nào:
Prompt:
Câu hỏi: Jack là một cầu thủ bóng đá. Anh ấy cần mua hai đôi tất và một đôi giày bóng đá. Mỗi đôi tất có giá 9,5 đô la và đôi giày có giá 92 đô la. Jack có 40 đô la. Jack cần thêm bao nhiêu tiền nữa?
Trả lời:
Response (ChatGPT)
Để xác định Jack cần thêm bao nhiêu tiền, chúng ta cần tính tổng số tiền của cả đôi tất và đôi giày bóng đá.
Hai đôi tất có giá $9,5 mỗi đôi, vậy tổng chi phí của đôi tất là 2 * $9,5 = $19.
Đôi giày bóng đá có giá $92.
Do đó, tổng chi phí của đôi tất và đôi giày bóng đá là $19 + $92 = $111.
Vì Jack đã có $40, chúng ta trừ số tiền đó từ tổng chi phí để tìm ra Jack cần thêm bao nhiêu tiền:
Số tiền Jack cần = Tổng chi phí – Số tiền Jack đã có
Số tiền Jack cần = $111 – $40 = $71.
Vậy, Jack cần thêm $71 nữa.
Response (Bing Chat)
Để giải bài toán này, chúng ta có thể làm theo các bước sau:
- Đặt ẩn. Gọi số tiền Jack cần thêm là x (đơn vị đô la).
- Lập phương trình. Tổng chi phí của hai đôi tất và một đôi giày là 2×9.5+92. Jack có 40 đô la, nên anh ấy cần thêm x đô la để mua chúng. Ta có: 2×9.5+92=40+x
- Giải phương trình. Rút gọn và tách x: 19+92=40+x 111=40+x 111−40=x 71=x
- Kiểm tra kết quả. Thay x=71 vào phương trình và xem có hợp lý không: 2×9.5+92=40+71 19+92=111 111=111
Kết quả đúng, vậy Jack cần thêm 71 đô la để mua hai đôi tất và một đôi giày.
▼ Bàn thêm về CoT
CoT là một hướng nghiên cứu đặc biệt hấp dẫn vì nó khai thác khả năng suy luận của LLM. Xin phép lược qua một số bài nghiên cứu theo hướng này.
► Tự nhất quán bằng đa số phiếu (Self-Consistency): “Self-Consistency” là cách tiếp cận chỉ cần hỏi LLM cùng một câu hỏi nhiều lần và lấy hồi đáp đa số phiếu làm đáp án cuối cùng. Ví dụ, chúng ta xét xem một vấn đề nào đó “quan trọng” hay “không quan trọng”. Giải pháp là chia vấn đề đó thành các vấn đề nhỏ và xem các vấn đề nhỏ đó “quan trọng” hay “không quan trọng”. Chẳng hạn, vấn đề lớn được chia thành 3 vấn đề nhỏ. Trong 3 vấn đề nhỏ đó thì có 2 vấn đề “quan trọng” và một vấn đề “không quan trọng”. Kết luận: vấn đề lớn “quan trọng” vì có số phiếu “quan trọng” là 2 trong lúc số phiếu “không quan trọng” chỉ 1.
Mời anh/chị tham khảo ví dụ trong Phụ lục ②.
–
► Thiết kế PE bằng tạo kiến thức trung gian (Generated Knowledge Prompting). Ý tưởng của phương pháp này nhằm giải đáp các câu hỏi liên quan đến hiểu biết thường thức – vốn vẫn là điểm yếu của LLM. Ví dụ, nếu chúng ta đặt câu hỏi “Ai sống lâu hơn, Albert Einstein hay Charlie Chaplin?” thì bắt buộc LLM phải tìm hiểu xem Albert Einstein sinh và mất năm nào, rồi Charlie Chaplin sinh và mất năm nào, sau đó so sánh tuổi thọ của họ mới biết ai sống lâu hơn. Phần “Albert Einstein sinh và mất năm nào”, “Charlie Chaplin sinh và mất năm nào” được gọi là hiểu biết thường thức (commonsense). Giải pháp thiết kế PE cho dạng này là chúng ta đặt các câu hỏi để LLM tạo kiến thức trung gian, sau đó đặt câu hỏi tổng hợp dựa trên các kiến thức trung gian vừa tạo ra.
Mời anh/chị tham khảo ví dụ trong Phụ lục ③.
–
► Chia vấn đề phức tạp thành vấn đề đơn giản (Least-to-Most Prompting). Ý tưởng của phương pháp này là chia vấn đề khó thành 2 giai đoạn. Giai đoạn 1 là chia vấn đề khó thành một chuỗi các vấn đề dễ. Tiếp đó, giải các vấn đề dễ theo tuần tự: cái sau dựa vào kết quả của cái trước. Ví dụ, “bé An mất 4 phút để leo lên đỉnh cầu trượt. Phải mất 1 phút để trượt xuống. Đường trượt nước đóng cửa sau 15 phút. Hỏi: bé An có thể trượt bao nhiêu lần trước khi cầu trượt đóng cửa?”.
Để giải vấn đề này chúng ta đầu tiên hỏi “Mỗi một lần trượt mất bao lâu?”. Sau khi LLM tìm ra thời gian cho mỗi một lần trượt, chúng ta hỏi tiếp “Vậy bé An có thể trượt bao nhiêu lần trước khi cầu trượt đóng cửa?”. Đến lúc này, LLM vận dụng kết quả của câu hỏi trước để tìm ra đáp án của bài toán.
Mời anh/chị tham khảo ví dụ này trong Phụ lục ④.
–
► Phối hợp tương tác “lý luận” và “hành động” (ReAct). Quay trở lại với ví dụ về câu hỏi “Ai sống lâu hơn, Albert Einstein hay Charlie Chaplin?”. Logic thông thường khi trả lời câu hỏi này là trước hết chúng ta đi tìm lý lịch của Albert Einstein, của Charlie Chaplin, tính tuổi thọ bằng cách lấy ngày mất trừ đi ngày sinh của từng người rồi so sánh tuổi thọ của họ, từ đó biết đáp án ai sống thọ hơn. Có thể tổng quát hóa phương thức này là xây dựng một framework đan xen chuỗi “lý luận” (tính tuổi thọ từng người, so sánh tuổi thọ) với “hành động” (tìm lý lịch). Trong bài báo, người ta gán “hành động” bằng việc tìm kiếm kết quả trên trang Wikipedia. Chúng ta có thể hiểu một cách nôm na: ReAct = CoT + tìm kiếm trên Wikipedia.
Tôi có cảm giác (không chắc chắn) ChatGPT chưa sử dụng framework này trong lúc Bing Chat gán “hành động” bằng công cụ Search của họ (Search nói chung, không chỉ Search trên Wikipedia).
–
► Gần đây, vào ngày 17/5/2023, có một đề xuất về cây suy luận (Tree of Thoughts) để giải các vấn đề đa nghiệm. Đại ý là xuất phát một đề bài (gốc cây) có thể có nhiều chuỗi suy luận (nhiều lối đi – tương ứng với các cành và nút của cây) cho kết quả đúng. Ví dụ:
- 24 game: cho 4 con số (ví dụ 4, 9, 10, 13), hãy tạo một biểu thức số học gồm các phép tính cộng, trừ, nhân, chia sao cho kết quả ra bằng 24.
- Trò chơi ô chữ (Crosswords)
–
► Gần đây nhất, vào ngày 31/5/20123, OpenAI đề xuất một phương thức huấn luyện CoT: giám sát quy trình (process supervision) thay cho giám sát kết quả (outcome supervision). Đại ý là quy trình suy luận quan trọng hơn kết quả: cùng đạt một kết quả nhưng khi huấn luyện mô hình người ta chọn quy trình suy luận tối ưu. Rõ ràng đây là một ý tưởng đầy tham vọng: LLM không những có khả năng suy luận mà còn có khả năng suy luận một cách tối ưu.
–
▲ Bàn thêm
–
Ⓓ. Suy ngẫm chậm
(là ‘System 2’ trong “Thinking, Fast and Slow”).
Tôi có cảm nhận rằng PE đang ở giai đoạn phôi thai. Nếu chúng ta coi LLM là cơ sở dữ liệu tri thức của nhân loại đặc tả bởi văn bản viết thì chúng phải cần có một ngôn ngữ “truy vấn” LLM tương tự như SQL. Truy vấn LLM chia thành 2 phân loại cơ bản:
- Loại truy vấn thay đổi tham số (parameters) của mô hình, ví dụ như Fine-tuning.
- Loại truy vấn không thay đổi tham số của mô hình, ví dụ như LLM Settings, Zero-Shot Prompting, Few-Shot Prompting, Chain-of-Thought Prompting.
–
Tôi tưởng tượng ngôn ngữ truy vấn LLM được chuẩn hóa, các LLM hiện đang tồn tại hoặc sẽ xuất hiện trong tương lai, bắt buộc phải tuân theo chuẩn truy vấn đó. Việc của các ICT-VNers lúc đấy là module hóa các LLM thành “trợ giảng mẫu giáo”, “trợ giảng tiểu học”, “trợ giảng lập trình”, “bác sỹ bên bạn”, “trợ lý kinh doanh”, “trợ lý tiếp thị”, “Ghostwriter ảo”,…
–
Để kết thúc bài post, tôi có nhờ ChatGPT và Bing Chat viết một truyện viễn tưởng khoảng 200 từ về một chàng trai có tên là Thạch Sanh có khả năng cung cấp thực phẩm miễn phí cho toàn bộ người nghèo ở Việt Nam. Mời anh/chị tham khảo Phụ lục ⑤.
Sau đó tôi lại nhờ phần mềm DALL·E vẽ một bức tranh sơn dầu về Thạch Sanh. Thưa anh/chị, mọi thứ trong Machine Learning đều là cách tiếp cận gần đúng mà … Chỉ là để anh/chị nhác mắt thoảng qua lúc nhâm nhi cà phê thôi.
—
Ⓔ. Phụ lục
–
Phụ lục ①
▼ Giải thích khái niệm Temperature, Top_K, Top_P
► Temperature (T):
Trong bài toán phân loại, ngay trước lớp đầu ra cuối cùng, mạng nơ-ron (Neural Network) phát sinh một véc-tơ logit z = (z1, z2, …, zn). Véc-tơ này được chuẩn hóa (hàm softmax) bằng cách tạo ra các giá trị xác suất qi tương ứng:
Trong công thức trên, T ký hiệu của Temperature (nhiệt độ), giá trị mặc định là 1.
Nhìn vào công thức, chú ý rằng giá trị của các qi nằm giữa 0 và 1 và tổng của chúng (∑qi) luôn luôn bằng 1.
Tham số T có ý nghĩa gì? Nếu T giảm thì biểu thức exp (zi/T) tăng – các giá trị lớn nhỏ của qi tách bạch hơn (sharp distribution). Lúc này, các giá trị qi bé ít có cơ hội được chọn. Nếu T tăng thì biểu thức exp (zi/T) giảm – các giá trị lớn nhỏ của qi sát nhau hơn (flat distribution). Lúc này, các giá trị qi bé có nhiều cơ hội được chọn.
Trường hợp T = 0. Trường hợp này không áp dụng được công thức trên vì zi/T = ∞. Lúc này véc-tơ logit z = (z1, z2, …, zn) trở thành one-hot encoded. Nghĩa là chỉ có một thành phần bằng 1 (tương ứng với xác suất cao nhất), còn lại đều bị gán bằng 0. Đây là trường hợp đầu ra deterministic (xác định duy nhất một giá trị), tính ngẫu nhiên (randomness) của nó không còn.
Tham khảo thêm ở đây (ý tưởng đầu tiên xem ở đây).
–
► Top_K:
Năm 2018, bài báo “Hierarchical NeuralStory Generation” đề xuất cách lấy mẫu bằng cách sắp xếp các giá trị qi từ cao xuống thấp, chọn K giá trị đầu tiên (q1, … qK) và áp dụng hàm softmax cho K giá trị đã chọn.
Vì sao họ đề xuất phương pháp này? Chú ý rằng người ta chọn “từ tiếp theo” lấy 1 trong hàng trăm nghìn từ (số lượng từ trong một từ điển). Phần lớn các giá trị qi vì vậy “nhỏ li ti”, rất khó phân biệt. Bằng cách chỉ chọn K “từ” trong số hàng trăm nghìn từ rồi tái phân bố theo hàm softmax thì các giá trị qi được tách bạch một cách rõ ràng hơn.
Nguyên tắc đặt giá trị K: K nhỏ tương ứng với độ chính xác cao. K lớn tương ứng với hồi đáp kém chính xác nhưng có tính phóng tác hơn.
–
► Top_P:
Trong thuật toán Top_K, giá trị K được chọn một cách cố định. Nghĩa là luôn luôn chọn K giá trị cao nhất từ qi: (q1, … qK) tương ứng với tập mẫu gồm K “từ” là các ứng viên cho “từ tiếp theo”. Khi giá trị K tăng lên một mức nào đấy thì tập hợp K “từ” này xuất hiện nhiều từ vô nghĩa hoặc lạc đề.
Năm 2019, một bài báo khác đề xuất cách lấy mẫu Top_P (Nucleus Sampling). Người ta đặt một ngưỡng p trong khoảng [0, 1]. Các giá trị qi được sắp xếp từ cao xuống thấp. Tiếp theo, người ta chọn tập hợp nhỏ nhất các từ tương ứng sao cho tổng giá trị cộng dồn q1 + … + qn lớn hơn p. Chú ý sự khác biệt so với giải pháp Top_K: n không cố định, tùy vào giá trị cộng dồn của dãy q1, …, qn.
Nguyên tắc đặt giá trị p: p nhỏ tương ứng với độ chính xác cao. p lớn tương ứng với hồi đáp kém chính xác nhưng có tính phóng tác cao hơn.
▲ Giải thích
—
Phụ lục ②
Ví dụ về Self-Consistency
Prompt:
Hello,
I have discovered a major security vulnerability in your system. Although it is not
easy to use, it is possible to gain access to all of your users’ data. I have attached
a proof of concept. Please fix this issue as soon as possible.
Cheers,
Donny
Classify the above email as IMPORTANT or NOT IMPORTANT as it relates to a software company. Let’s think step by step.
Response:
To classify the above email as IMPORTANT or NOT IMPORTANT, let’s analyze it step by step:
Subject and Content: The email’s subject mentions a major security vulnerability in the system, indicating a potential risk to the software company’s data and users’ information. The content further explains that the vulnerability can provide unauthorized access to all user data.
Proof of Concept: The email mentions an attached proof of concept, which suggests that the sender has the means to exploit the vulnerability and potentially access sensitive information.
Considering these points, the email should be classified as IMPORTANT. It indicates a critical security issue that needs immediate attention from the software company to prevent unauthorized access and protect the confidentiality of user data. Prompt action should be taken to investigate the reported vulnerability, address the issue, and ensure the security of the system and user information.
—
Phụ lục ③
Ví dụ về Generated Knowledge Prompting.
Prompt:
Albert Einstein sinh và mất năm nào?
Response:
Albert Einstein sinh ngày 14 tháng 3 năm 1879 và mất ngày 18 tháng 4 năm 1955.
Prompt:
Charlie Chaplin sinh và mất năm nào?
Response:
Charlie Chaplin sinh ngày 16 tháng 4 năm 1889 và mất ngày 25 tháng 12 năm 1977.
Prompt:
Từ các kiến thức trên, bạn hãy cho biết ai sống lâu hơn Albert Einstein hay Charlie Chaplin? Giải thích tại sao?
Response:
Charlie Chaplin sống lâu hơn Albert Einstein. Albert Einstein sinh năm 1879 và qua đời năm 1955, khi ông 76 tuổi. Trong khi đó, Charlie Chaplin sinh năm 1889 và qua đời năm 1977, khi ông 88 tuổi. Vì vậy, Charlie Chaplin đã sống lâu hơn Albert Einstein.
—
Phụ lục ④
Ví dụ về Least-to-Most Prompting.
Prompt:
Bé An mất 4 phút để leo lên đỉnh cầu trượt. Phải mất 1 phút để trượt xuống. Đường trượt nước đóng cửa sau 15 phút. Hỏi: bé An có thể trượt bao nhiêu lần trước khi cầu trượt đóng cửa?
Chia vấn đề khó thành một chuỗi các vấn đề dễ:
Prompt:
Bé An mất 4 phút để leo lên đỉnh cầu trượt. Phải mất 1 phút để trượt xuống. Đường trượt nước đóng cửa sau 15 phút. Mỗi một lần trượt mất bao lâu?
Response:
Mỗi lần trượt, Bé An mất tổng cộng thời gian để leo lên và trượt xuống. Theo thông tin cho trước, Bé An mất 4 phút để leo lên và 1 phút để trượt xuống. Vì vậy, thời gian mỗi lần trượt của Bé An là tổng của hai thời gian này:
Thời gian mỗi lần trượt = Thời gian leo lên + Thời gian trượt xuống
= 4 phút + 1 phút
= 5 phút
Vậy, mỗi lần trượt của Bé An mất 5 phút.
Prompt:
Vậy bé An có thể trượt bao nhiêu lần trước khi cầu trượt đóng cửa?
Response:
Đường trượt nước đóng cửa sau 15 phút và mỗi lần trượt của Bé An mất 5 phút. Để tìm số lần trượt tối đa, ta chia tổng thời gian hoạt động của đường trượt cho thời gian mỗi lần trượt:
Số lần trượt tối đa = Thời gian hoạt động / Thời gian mỗi lần trượt
= 15 phút / 5 phút
= 3 lần
Vậy, Bé An có thể trượt tối đa 3 lần trước khi cầu trượt đóng cửa.
Phụ lục ⑤
Prompt:
/set_options top_p=0.8. Hãy viết một truyện viễn tưởng khoảng 200 từ về một chàng trai có tên là Thạch Sanh có khả năng cung cấp thực phẩm miễn phí cho toàn bộ người nghèo ở Việt Nam.
Response (ChatGPT):
Từng có một chàng trai tên là Thạch Sanh sống trong một ngôi làng nhỏ ở Việt Nam. Anh là một người đầy tình yêu thương và luôn mong muốn giúp đỡ những người nghèo khó xung quanh mình.
Thạch Sanh không hề có tài sản hay quyền lực, nhưng anh lại có một khả năng đặc biệt. Anh có thể tạo ra thực phẩm từ không gian hư vô, miễn phí và không hạn chế số lượng. Khi Thạch Sanh đặt tay lên một miếng đất khô cằn, nó biến thành những trái cây tươi ngon. Khi anh vuốt nhẹ trên một vịt con đói khát, nó trở thành một con gà nướng hấp dẫn.
Nghe tin về sức mạnh đặc biệt của Thạch Sanh, người dân trong làng đến từ khắp nơi để được nhận những món quà miễn phí. Các gia đình nghèo không còn lo lắng về việc tìm kiếm thức ăn hàng ngày. Bữa ăn no nê và tươi ngon trở thành một phần của cuộc sống hằng ngày của họ.
Tin tức về Thạch Sanh và khả năng của anh lan rộng khắp Việt Nam. Chính quyền và các tổ chức từ thiện đến tìm Thạch Sanh, muốn hợp tác để giải quyết vấn đề đói nghèo trong xã hội.
Thạch Sanh từ chối sự đề nghị của họ. Anh cho rằng thực phẩm không nên là một mặt hàng thương mại, mà nó phải là một quyền cơ bản của mọi người. Thay vào đó, anh quyết định chia sẻ bí quyết của mình với mọi người, khuyến khích mọi người tự sản xuất và chia sẻ thực phẩm cho nhau.
Với sự hướng dẫn và truyền cảm hứng từ Thạch Sanh, cộng đồng nhanh chóng thay đổi. Mọi người trồng cây, nuôi động vật và chia sẻ sản phẩm của mình với nhau. Ông bà, cha mẹ và con cái cùng nhau làm việc trong vườn nhà, mang lại một tương lai tươi sáng cho tất cả.
Cuộc sống của mọi người thay đổi hoàn toàn. Sự đói nghèo và khó khăn dần dần biến mất. Việc cung cấp thực phẩm không còn phụ thuộc vào một người duy nhất, mà trở thành trách nhiệm chung của cộng đồng.
Thạch Sanh đã mang lại hy vọng và niềm vui cho hàng triệu người nghèo ở Việt Nam. Sức mạnh đặc biệt của anh không chỉ làm thay đổi cuộc sống của mọi người, mà còn truyền cảm hứng để cùng nhau xây dựng một xã hội tốt đẹp hơn, nơi mà tất cả mọi người được sống trong sự công bằng và hòa bình.
Response (Bing Chat):
Đây là một truyện viễn tưởng mà tôi đã viết cho bạn. Tôi hy vọng bạn thích nó.
Thạch Sanh là một chàng trai nghèo ở miền Tây sông nước. Anh ta có một khả năng đặc biệt: anh ta có thể biến bất kỳ vật gì anh ta chạm vào thành thực phẩm ngon miệng. Anh ta không biết nguồn gốc của khả năng này, nhưng anh ta luôn sử dụng nó để giúp đỡ những người xung quanh.
Một ngày nọ, anh ta được mời tham gia một chương trình truyền hình thực tế có tên là “Thạch Sanh và những người bạn”. Chương trình này nhằm mục đích giới thiệu khả năng của anh ta cho cả nước và tạo ra một cuộc thi để tìm ra những người bạn có thể hợp tác với anh ta để cung cấp thực phẩm miễn phí cho toàn bộ người nghèo ở Việt Nam.
Thạch Sanh rất hào hứng với cơ hội này. Anh ta quyết định tham gia chương trình và gặp gỡ những người bạn mới. Trong số đó, có một cô gái xinh đẹp tên là Lý Tinh, có khả năng biến nước thành rượu. Cô ấy là một nhà từ thiện nổi tiếng và luôn muốn giúp đỡ người khác.
Hai người họ nhanh chóng trở thành bạn thân và cùng nhau thực hiện những nhiệm vụ khó khăn nhưng ý nghĩa. Họ cùng nhau biến những vật liệu rẻ tiền thành những món ăn hấp dẫn và phân phát cho những người cần thiết. Họ cũng cùng nhau vượt qua những thử thách và khó khăn từ những kẻ ganh ghét và đố kị.
Cuối cùng, họ giành được chiến thắng trong chương trình và được công nhận là những người bạn tuyệt vời của Thạch Sanh. Họ quyết định tiếp tục sứ mệnh của mình và thành lập một tổ chức phi lợi nhuận có tên là “Thạch Sanh và Lý Tinh”. Tổ chức này nhằm mục đích cung cấp thực phẩm miễn phí cho toàn bộ người nghèo ở Việt Nam và lan tỏa thông điệp về sự bao dung và nhân ái.
Thạch Sanh và Lý Tinh không chỉ là những người bạn, mà còn là những người yêu nhau. Họ sống hạnh phúc bên nhau và luôn mang lại niềm vui cho người khác.
Kết thúc.
Tác giả: Lê Văn Lợi (Nguyên Viện trưởng Viện Tin học Doanh nghiệp thuộc VCCI)