Kỹ thuật tạo lệnh

Kỹ thuật tạo lệnh hoặc kỹ thuật ra lệnh (prompt engineering) là quá trình cấu trúc một văn bản đầu vào cho AI tạo sinh giải thích và diễn giải.
Một văn bản đầu vào (prompt), còn được gọi là lệnh nhắc, hoặc gợi ý, là văn bản ngôn ngữ tự nhiên mô tả nhiệm vụ mà một AI cần thực hiện: một lệnh nhắc cho mô hình ngôn ngữ lớn có thể là một truy vấn như "định lý nhỏ Fermat là gì?", một mệnh lệnh như "viết một bài thơ về lá rụng", hoặc một câu dài bao gồm ngữ cảnh, hướng dẫn, và lịch sử cuộc trò chuyện. Kỹ thuật tạo lệnh có thể liên quan đến việc diễn đạt một truy vấn, chỉ định một phong cách, hoặc giao cho AI một vai trò như "Hành động như một người bản xứ Pháp". Một lệnh nhắc có thể bao gồm một vài ví dụ để mô hình học hỏi, chẳng hạn như yêu cầu mô hình hoàn thành chuỗi "maison → house, chat → cat, chien → ... " (câu trả lời mong đợi là dog), phương pháp này được gọi là học với ít mẫu.

Khi giao tiếp với một mô hình chuyển văn bản thành hình ảnh hoặc mô hình chuyển văn bản thành âm thanh, một lệnh nhắc điển hình là mô tả đầu ra mong muốn như "một bức ảnh chất lượng cao của một phi hành gia cưỡi ngựa" hoặc "Lo-fi slow BPM electro chill với các mẫu âm thanh tự nhiên (tiếng chim hót, tiếng mưa, tiếng sóng vỗ)". Việc nhắc nhở một mô hình chuyển văn bản thành hình ảnh có thể liên quan đến việc thêm, loại bỏ, nhấn mạnh và sắp xếp lại các từ để đạt được đối tượng, phong cách, và thẩm mỹ mong muốn.

Học tập theo ngữ cảnh

Kỹ thuật tạo lệnh trở nên khả thi nhờ vào học theo ngữ cảnh (in-context learning). Đây là khi một mô hình có thể tạm thời học từ các nhắc lệnh mà nó được cung cấp. Khả năng học tập theo ngữ cảnh là một khả năng nổi bật của các mô hình ngôn ngữ lớn. Học tập theo ngữ cảnh cũng là một thuộc tính nổi bật của kích thước mô hình, có nghĩa là nó mạnh mẽ hơn khi mô hình lớn hơn. Nó gây ra các đứt gãy trong cách các mô hình mở rộng, khi mà các mô hình lớn hơn cải thiện theo những cách mà các mô hình nhỏ hơn không thể. Kết quả này của "tối ưu hóa mesa" bên trong các lớp transformer là một dạng của học siêu cấp (Meta-learning) hoặc "học cách học".

Lịch sử
Năm 2018, các nhà nghiên cứu lần đầu tiên đề xuất rằng tất cả các nhiệm vụ riêng biệt trước đây trong NLP, chẳng hạn như dịch máy, tóm tắt văn bản và phân tích tình huống, có thể được dồn vào một mô hình duy nhất và có thể xử lý câu trả lời theo ngữ cảnh. Ngoài ra, họ đã huấn luyện một mô hình đa nhiệm đầu tiên duy nhất để trả lời bất kỳ câu hỏi liên quan đến nhiệm vụ nào như là "Tâm trạng là gì" hoặc "Dịch câu này sang tiếng Đức" hoặc "Ai là tổng thống?"

Năm 2021, các nhà nghiên cứu đã tinh chỉnh một mô hình đã được huấn luyện trước (T0) để thực hiện 12 nhiệm vụ NLP (sử dụng 62 tập dữ liệu, vì mỗi nhiệm vụ có thể có nhiều tập dữ liệu khác nhau). Mô hình đã cho thấy hiệu suất tốt trên các nhiệm vụ mới, vượt qua các mô hình được huấn luyện trực tiếp chỉ để thực hiện một nhiệm vụ (không có huấn luyện trước). Để giải quyết một nhiệm vụ, T0 được cung cấp nhiệm vụ trong một lệnh nhắc có cấu trúc như sau, Nếu là đúng, liệu nó cũng có đúng với ? ||| ., là lệnh nhắc được sử dụng để làm cho T0 giải quyết suy diễn (logical consequence).

Một kho lưu trữ dành cho lệnh nhắc có hơn 2.000 lệnh nhắc công khai cho khoảng 170 tập dữ liệu đã có sẵn vào tháng 2 năm 2022.

Năm 2022, kỹ thuật nhắc chuỗi tư duy (chain-of-thought prompting technique) đã được các nhà nghiên cứu từ Google đề xuất.

Năm 2023, một số cơ sở dữ liệu lệnh nhắc (prompt database) từ văn bản sang văn bản và từ văn bản sang hình ảnh đã có sẵn công khai cho người dùng.

Văn bản thành văn bản
Chuỗi tư duy
Chuỗi tư duy (Chain-of-thought - CoT) là một kỹ thuật cho phép mô hình ngôn ngữ lớn (LLM) giải quyết một vấn đề như một chuỗi các bước trung gian trước khi đưa ra câu trả lời cuối cùng. Kỹ thuật tạo lệnh theo chuỗi tư duy cải thiện khả năng lý luận bằng cách khiến mô hình trả lời một vấn đề bằng nhiều bước mà các bước lý luận này đều theo dòng suy nghĩ. Nó cho phép các mô hình ngôn ngữ lớn vượt qua khó khăn với một số nhiệm vụ đòi hỏi lý luận logic (logical reasoning) và cần nhiều bước để giải quyết, chẳng hạn như các câu hỏi về toán học hoặc lý luận thông thường (commonsense reasoning).

Ví dụ, với câu hỏi "H: Nhà ăn có 23 quả táo. Nếu họ dùng 20 quả để làm bữa trưa và mua thêm 6 quả nữa, họ còn bao nhiêu quả táo?", một lệnh nhắc CoT có thể khiến LLM trả lời "Đ: Cả nhà ban đầu có 23 quả táo. Họ đã dùng 20 quả để làm bữa trưa. Vậy họ còn 23 - 20 = 3. Họ đã mua thêm 6 quả táo nữa, vì vậy họ có 3 + 6 = 9. Câu trả lời là 9." cũng đã được chứng minh là hiệu quả, vì vậy nó cũng khiến CoT trở thành một kỹ thuật tạo lệnh không mẫu (zero-shot). Điều này cho phép mở rộng tốt hơn vì người dùng không còn cần phải xây dựng nhiều ví dụ Hỏi & Đáp CoT cụ thể.

Khi được áp dụng cho PaLM, một mô hình ngôn ngữ có 540 tỷ tham số, lệnh nhắc CoT đã hỗ trợ đáng kể cho mô hình, cho phép nó hoạt động tương đương với các mô hình tinh chỉnh (fine-tuning model) theo nhiệm vụ cụ thể trên một số nhiệm vụ, đạt được kết quả hiện đại nhất vào thời điểm đó trên kiểm chuẩn lý luận toán học GSM8K (GSM8K mathematical reasoning benchmark).

Ví dụ:

Lệnh nhắc chuỗi ký hiệu (CoS)

Lệnh nhắc chuỗi ký hiệu (Chain of Symbol - CoS) kết hợp với lệnh nhắc CoT giúp các mô hình ngôn ngữ lớn (LLM) giải quyết khó khăn trong lý luận không gian trong văn bản. Nói cách khác, việc sử dụng các ký hiệu tùy ý như ' / ' giúp LLM diễn giải khoảng cách trong văn bản. Điều này hỗ trợ trong lý luận và tăng hiệu suất của LLM.

Ví dụ: trước tiên yêu cầu mô hình tạo ra các sự kiện liên quan để hoàn thành lệnh nhắc, sau đó tiếp tục hoàn thành lệnh nhắc. Chất lượng hoàn thành thường cao hơn, vì mô hình có thể được điều kiện hóa dựa trên các sự kiện liên quan.

Ví dụ: gợi ý cho mô hình liệt kê các vấn đề phụ của một vấn đề trước, sau đó giải quyết chúng theo trình tự, sao cho các vấn đề phụ sau có thể được giải quyết với sự trợ giúp từ các câu trả lời của các vấn đề phụ trước.

Ví dụ: thực hiện nhiều chuỗi suy nghĩ, sau đó chọn ra kết luận thường được đạt đến nhất từ tất cả các chuỗi suy nghĩ. Nếu các chuỗi suy nghĩ khác nhau quá nhiều, có thể hỏi con người để có được chuỗi suy nghĩ chính xác.

Lệnh nhắc dựa trên độ phức tạp
Lệnh nhắc dựa trên độ phức tạp (Complexity-based prompting) thực hiện nhiều chuỗi suy nghĩ, sau đó chọn những chuỗi có chuỗi suy nghĩ dài nhất, và sau đó chọn ra kết luận thường được đạt đến nhất từ những chuỗi đó.

Tự hoàn thiện
Kỹ thuật tự hoàn thiện (Self-refine) ban đầu cho LLM giải quyết vấn đề, sau đó yêu cầu LLM phê bình giải pháp của mình, rồi bảo LLM giải quyết lại vấn đề dựa trên chúng. Quá trình này được lặp lại cho đến khi dừng lại, có thể do hết token, thời gian, hoặc LLM xuất ra một token "dừng".

Ví dụ về phê bình: tổng quát hóa chuỗi suy nghĩ (chain-of-thought) bằng cách yêu cầu mô hình tạo ra một hoặc nhiều "bước tiếp theo có thể xảy ra", sau đó chạy mô hình trên từng bước tiếp theo có thể xảy ra tiếp sau đó bằng phương pháp tìm kiếm theo chiều rộng, beam (beam search), hoặc một số phương pháp tìm kiếm cây khác.

Lệnh nhắc Maieutic
Lệnh nhắc Maieutic tương tự như tree-of-thought. Mô hình được yêu cầu trả lời một câu hỏi kèm theo giải thích. Sau đó, mô hình tiếp tục được yêu cầu giải thích các phần của lời giải thích, và cứ thế tiếp tục. Những cây giải thích không nhất quán sẽ bị cắt bỏ hoặc loại bỏ. Điều này cải thiện hiệu suất trong việc lý luận phức tạp về kiến thức thông thường.

Ví dụ: bao gồm một gợi ý hoặc dấu hiệu, chẳng hạn như từ khóa mong muốn, để hướng dẫn mô hình ngôn ngữ đến đầu ra mong muốn.

Ví dụ: và do đó sự không chắc chắn của đầu ra mô hình có thể được ước tính trực tiếp bằng cách đọc ra các điểm hợp lý của dự đoán từ (token prediction).

Tuy nhiên, nếu không thể truy cập được các điểm này (chẳng hạn như khi truy cập mô hình qua API), sự không chắc chắn vẫn có thể được ước tính và tích hợp vào đầu ra của mô hình. Một phương pháp đơn giản là kích thích mô hình sử dụng từ ngữ để ước tính sự không chắc chắn. Một phương pháp khác là kích thích mô hình từ chối trả lời nếu đầu vào không thỏa mãn các điều kiện.

Tự động tạo lệnh nhắc
Tạo văn bản có hỗ trợ truy xuất
(word embedding) dày đặc và mô hình Ngôn ngữ Lớn (LLM) để tạo câu trả lời]]
Tạo văn bản có hỗ trợ truy xuất (Retrieval-augmented generation - RAG) là một quy trình hai pha liên quan đến truy xuất tài liệu và tạo câu trả lời bởi một mô hình Ngôn ngữ Lớn (LLM). Giai đoạn ban đầu sử dụng các vectơ từ (word embedding) dày đặc để truy xuất tài liệu. Việc truy xuất này có thể dựa trên nhiều định dạng cơ sở dữ liệu khác nhau tùy theo trường hợp sử dụng, chẳng hạn như một cơ sở dữ liệu vector (vector database), chỉ mục tóm tắt (summary index), chỉ mục cây (tree index), hoặc bảng chỉ mục từ khóa (keyword table index).

Khi nhận được truy vấn, công cụ truy xuất tài liệu sẽ chọn ra các tài liệu liên quan nhất. Mức độ liên quan này thường được xác định bằng cách mã hóa cả truy vấn và các tài liệu thành các vectơ, sau đó xác định các tài liệu có vectơ gần nhất về khoảng cách Euclid so với vectơ truy vấn. Sau khi truy xuất tài liệu, LLM sẽ tạo ra một đầu ra kết hợp thông tin từ cả truy vấn và các tài liệu đã truy xuất. Phương pháp này đặc biệt hữu ích cho việc xử lý thông tin độc quyền hoặc động mà không được bao gồm trong các giai đoạn đào tạo hoặc tinh chỉnh ban đầu của mô hình. RAG cũng nổi bật với việc sử dụng "học ít mẫu", nơi mô hình sử dụng một số lượng nhỏ các ví dụ, thường được tự động truy xuất từ cơ sở dữ liệu, để định hướng cho các đầu ra của nó.

Truy xuất qua đồ thị tăng cường tạo sinh (Graph retrieval-augmented generation)

GraphRAG, được Microsoft Research tạo ra, mở rộng RAG theo cách thay vì chỉ dựa vào độ tương đồng vectơ (như trong hầu hết các phương pháp RAG), GraphRAG sử dụng đồ thị tri thức (knowledge graph) do LLM tạo ra. Đồ thị này cho phép mô hình kết nối các mẩu thông tin rời rạc, tổng hợp lại các kiến thức và hiểu một cách toàn diện các khái niệm ngữ nghĩa được tóm tắt trên các bộ dữ liệu lớn.

Các nhà nghiên cứu đã chứng minh hiệu quả của GraphRAG khi sử dụng các bộ dữ liệu như Violent Incident Information from News Articles (VIINA). Bằng cách kết hợp đồ thị tri thức do LLM tạo ra với học máy trên đồ thị, GraphRAG cải thiện đáng kể cả tính toàn diện và đa dạng của các câu trả lời được tạo ra cho các câu hỏi tổng hợp theo ngữ cảnh toàn cầu.

Công việc trước đó đã chỉ ra hiệu quả của việc sử dụng một đồ thị tri thức cho việc trả lời câu hỏi bằng cách sử dụng tạo sinh truy vấn từ văn bản. Những kỹ thuật này có thể được kết hợp để thực hiện tìm kiếm trên cả dữ liệu không có cấu trúc và có cấu trúc, cung cấp ngữ cảnh mở rộng và cải thiện xếp hạng.

Sử dụng mô hình ngôn ngữ để tạo ra các lệnh nhắc
Các mô hình ngôn ngữ lớn (LLM) có thể được sử dụng để tạo ra các lệnh nhắc cho chính các mô hình ngôn ngữ lớn khác.

Thuật toán kỹ sư lệnh nhắc tự động (automatic prompt engineer algorithm) sử dụng một LLM để tìm kiếm beam (beam search) qua các lệnh nhắc cho một LLM khác:

Có hai LLM. Một là LLM mục tiêu, và một là LLM tạo lệnh nhắc.
LLM tạo lệnh nhắc được cung cấp các cặp ví dụ đầu vào-đầu ra, và được yêu cầu tạo ra các lệnh (instruction) mà nếu một mô hình tuân theo các lệnh đó có thể tạo ra đầu ra, dựa trên đầu vào.
Mỗi lệnh được tạo ra sẽ được sử dụng để nhắc nhở LLM mục tiêu, sau đó là mỗi đầu vào. Logarit xác suất của các đầu ra được tính toán và cộng lại. Đây là điểm số của lệnh.
Các lệnh có điểm số cao nhất sẽ được cung cấp cho LLM tạo lời nhắc để tạo ra các biến thể tiếp theo.
Quá trình lặp lại cho đến khi đạt đến tiêu chí dừng, sau đó xuất ra các lệnh có điểm số cao nhất.
Ví dụ CoT có thể được tạo ra bởi chính LLM. Trong "auto-CoT", một thư viện câu hỏi được chuyển thành các vectơ bởi một mô hình như BERT. Các vectơ câu hỏi được phân tích cụm. Các câu hỏi gần với tâm của mỗi cụm sẽ được chọn. Một LLM thực hiện CoT zero-shot trên mỗi câu hỏi. Các ví dụ CoT kết quả sẽ được thêm vào tập dữ liệu. Khi được nhắc với một câu hỏi mới, các ví dụ CoT gần nhất với câu hỏi đó có thể được truy xuất và thêm vào lệnh nhắc.

Văn bản thành hình ảnh

Vào năm 2022, các mô hình văn bản thành hình ảnh (text-to-image) như DALL-E 2, Stable Diffusion, và Midjourney đã được phát hành công khai cho người dùng. Các mô hình này nhận các lệnh nhắc văn bản làm đầu vào và sử dụng chúng để tạo ra hình ảnh trí truệ nhân tạo (AI art). Các mô hình text-to-image thường không hiểu ngữ pháp và cấu trúc câu theo cùng cách như các mô hình ngôn ngữ lớn khác, vì nó yêu cầu một tập lệnh nhắc khác biệt.

Định dạng lệnh nhắc

Một lệnh nhắc text-to-image thường bao gồm mô tả về chủ đề của nghệ thuật (chẳng hạn như hoa anh túc màu cam sáng), phương tiện mong muốn (chẳng hạn như tranh kỹ thuật số hoặc nhiếp ảnh), phong cách (chẳng hạn như siêu thực hoặc pop-art), ánh sáng (chẳng hạn như ánh sáng rìa hoặc tia sáng lúc hoàng hôn), màu sắc và kết cấu.

Tài liệu của Midjourney khuyến khích sử dụng các lệnh nhắc ngắn gọn để mô tả, thay vì "Hãy cho tôi xem một bức tranh với nhiều hoa anh túc nở rộ ở California, làm chúng tươi sáng với màu cam rực rỡ, và vẽ chúng theo phong cách minh họa bằng bút chì màu", một lệnh hiệu quả hơn có thể là "Hoa anh túc California màu cam sáng được vẽ bằng bút chì màu".

Lệnh nhắc phủ định

}}

Các mô hình text-to-image không tự nhiên hiểu được phủ định. Lệnh nhắc "một bữa tiệc không có bánh" có khả năng tạo ra một hình ảnh bao gồm cả bánh. Một phương pháp phổ biến là bao gồm các thuật ngữ không mong muốn chung như xấu xí, nhàm chán, giải phẫu sai trong lệnh nhắc phủ định cho một hình ảnh.

Văn bản thành video
Văn bản thành video (text-to-video - TTV) là một công nghệ mới nổi, cho phép tạo ra video trực tiếp từ các lệnh nhắc văn bản. Lĩnh vực này có tiềm năng biến đổi việc sản xuất video, hoạt hình, và kể chuyện. Bằng cách sử dụng sức mạnh của trí tuệ nhân tạo, TTV cho phép người dùng bỏ qua các công cụ chỉnh sửa video truyền thống và chuyển đổi ý tưởng của họ thành hình ảnh động.

Các mô hình bao gồm:

Runway Gen-2 – Cung cấp giao diện thân thiện với người dùng và hỗ trợ nhiều phong cách video khác nhau
Lumiere – Được thiết kế cho việc tạo video độ phân giải cao
Make-a-Video – Tập trung vào việc tạo ra các video chi tiết và đa dạng
Sora của OpenAI – Chưa được phát hành, nhưng được cho là có thể tạo video độ phân giải cao

Lệnh không phải văn bản

Một số phương pháp tiếp cận bổ sung hoặc thay thế các lệnh văn bản tự nhiên bằng các đầu vào không phải văn bản.

Đảo ngược văn bản và vectơ từ
Đối với các mô hình chuyển văn bản thành hình ảnh, "đảo ngược văn bản" (textual inversion) thực hiện một quy trình tối ưu hóa để tạo ra một vectơ từ (word embedding) mới dựa trên một tập hợp các hình ảnh mẫu. Vectơ từ này hoạt động như một "pseudo-word" (từ giả) và có thể được đưa vào một lệnh nhắc để thể hiện nội dung hoặc phong cách.

Lệnh hình ảnh
Vào năm 2023, Meta đã phát hành Segment Anything, một mô hình thị giác máy tính có thể thực hiện phân vùng ảnh bằng cách sử dụng lệnh. Thay vào lệnh văn bản, Segment Anything có thể sử dụng các hộp giới hạn (bounding box), mặt nạ phân đoạn (segmatation mask), và điểm tiền cảnh/bối cảnh (foreground/background).

Sử dụng suy giảm độ dốc để tìm kiếm lệnh
Trong "prefix-tuning", "prompt tuning" hoặc "soft prompting", các vectơ giá trị số thực (floating-point-valued vector) được tìm kiếm trực tiếp bằng suy giảm độ dốc (gradient descent) để tối đa hóa xác suất logarith hàm hợp lý (log-likelihood) trên các đầu ra.

Về mặt hình thức, hãy để \mathbf{E} = \{\mathbf{e_1}, \dots, \mathbf{e_k}\} là một tập hợp các token lệnh mềm (embedding có thể điều chỉnh), trong khi \mathbf{X} = \{\mathbf{x_1}, \dots, \mathbf{x_m}\} và \mathbf{Y} = \{\mathbf{y_1}, \dots, \mathbf{y_n}\} là các token embedding của đầu vào và đầu ra tương ứng. Trong quá trình huấn luyện, các embedding có thể điều chỉnh, đầu vào, và các token đầu ra được nối thành một chuỗi duy nhất \text{concat}(\mathbf{E};\mathbf{X};\mathbf{Y}) và đưa vào các mô hình ngôn ngữ lớn (LLM). Các hàm mất mát được tính trên các token \mathbf{Y}; các gradient được truyền ngược đến các tham số riêng của lệnh: trong prefix-tuning, chúng là các tham số liên quan đến các token lệnh ở mỗi lớp; trong prompt tuning, chúng chỉ là các token mềm được thêm vào từ vựng.

Về mặt hình thức hơn, đây là prompt tuning. Hãy để một LLM được viết là LLM(X) = F(E(X)) , trong đó X là một chuỗi các token ngôn ngữ, E là hàm chuyển token thành vectơ, và F là phần còn lại của mô hình. Trong prefix-tuning, ta cung cấp một tập hợp các cặp đầu vào-đầu ra \{(X^i, Y^i)\}_i, sau đó sử dụng suy giảm độ dốc để tìm kiếm \arg\max_{\tilde Z} \sum_i \log Pr[Y^i | \tilde Z \ast E(X^i)]. Nói cách khác, \log Pr[Y^i | \tilde Z \ast E(X^i)] là xác suất logarith hàm hợp lý (log-likelihood) của việc xuất ra Y^i, nếu mô hình trước tiên mã hóa đầu vào X^i thành vectơ E(X^i), sau đó tiền tố vectơ với tiền vectơ (prefix vector) \tilde Z, rồi áp dụng F.

Đối với prefix tuning, nó tương tự, nhưng tiền vectơ \tilde Z được chèn vào các trạng thái ẩn trong mỗi lớp của mô hình.

Kết quả trước đó sử dụng cùng ý tưởng tìm kiếm suy giảm độ dốc, nhưng được thiết kế cho các mô hình ngôn ngữ bị che như BERT, và chỉ tìm kiếm trên các chuỗi token, thay vì các vectơ số học. Về mặt hình thức, nó tìm kiếm \arg\max_{\tilde X} \sum_i \log Pr[Y^i | \tilde X \ast X^i] trong đó \tilde X được giới hạn trong các chuỗi token có độ dài nhất định.

Tiêm lệnh nhắc

Tiêm lệnh nhắc (Prompt injection) là một phương pháp khai thác lợi dụng kẽ hở của khai thác bảo mật máy tính được thực hiện bằng cách khiến một mô hình học máy (chẳng hạn như một LLM được huấn luyện để tuân theo các chỉ dẫn do con người cung cấp) phải tuân theo các chỉ dẫn được cung cấp bởi người dùng độc hại. Điều này trái ngược với hoạt động dự định của các hệ thống tuân theo chỉ dẫn, trong đó mô hình học máy được dự định chỉ tuân theo các chỉ dẫn đáng tin cậy (lệnh nhắc) do người điều hành mô hình học máy cung cấp.

Xem thêm
Tấn công phi kỹ thuật

Tham khảo