Nén prompt là quá trình rút ngắn độ dài của một prompt đầu vào trong khi vẫn giữ lại thông tin cốt lõi cần thiết để mô hình ngôn ngữ hiểu và tạo ra phản hồi phù hợp.
Trong bối cảnh trí tuệ nhân tạo phát triển nhanh chóng, tối ưu hóa các mô hình ngôn ngữ lớn (LLM) không chỉ là đẩy giới hạn của những gì khả thi mà còn là đảm bảo hiệu quả và tiết kiệm chi phí.
Nén prompt đã nổi lên như một kỹ thuật quan trọng để nâng cao hiệu năng của các mô hình này đồng thời giảm thiểu chi phí tính toán. Với các nghiên cứu mới xuất hiện gần như hàng tuần, việc theo kịp là một thách thức, nhưng nắm vững các nguyên lý cơ bản là điều thiết yếu.
Bài viết này trình bày những điều cơ bản về nén prompt, thảo luận khi nào nên dùng, tầm quan trọng của nó trong việc giảm chi phí trong các pipeline RAG, và cung cấp ví dụ sử dụng mô hình gpt-3.5-turbo-0125 thông qua API của OpenAI.
Nếu bạn muốn tìm hiểu thêm, hãy xem khóa học về kỹ thuật prompt này.
Nén Prompt Là Gì?
Nén prompt là một kỹ thuật trong xử lý ngôn ngữ tự nhiên (NLP) nhằm tối ưu hóa đầu vào cho LLM bằng cách rút gọn độ dài mà không làm thay đổi đáng kể chất lượng và mức độ liên quan của đầu ra. Tối ưu hóa này rất quan trọng vì số lượng token trong truy vấn ảnh hưởng trực tiếp đến hiệu năng của LLM.
Token là đơn vị văn bản cơ bản mà LLM sử dụng, đại diện cho từ hoặc phân từ tùy thuộc vào bộ tách token của mô hình ngôn ngữ. Giảm số token trong prompt là có lợi, đôi khi còn bắt buộc, vì một số lý do:
Giới hạn token: LLM có giới hạn tối đa về số token đầu vào. Vượt quá giới hạn này có thể cắt cụt thông tin quan trọng, làm giảm độ rõ ràng của đầu ra và hiệu quả của mô hình.
Tăng hiệu quả xử lý và giảm chi phí: Ít token hơn đồng nghĩa với thời gian xử lý nhanh hơn và chi phí thấp hơn.
Cải thiện mức độ liên quan của phản hồi: Prompt dễ đọc với con người không phải lúc nào cũng là prompt tốt. Đôi khi, những prompt tưởng chừng hay và giàu thông tin lại chứa thông tin không quan trọng với LLM, như từ dừng ("a", "the", "is", v.v.).
Nén prompt giảm số lượng token bằng các chiến lược như loại bỏ thông tin dư thừa, tóm tắt ý chính hoặc sử dụng các thuật toán chuyên biệt để chắt lọc tinh túy của prompt trong khi tối thiểu hóa số token.
Khi Nào Nên Dùng Nén Prompt?
Hãy cùng xem các kịch bản mà chúng ta có thể dùng nén prompt.
Các kỹ thuật kỹ thuật prompt nâng cao
Các kỹ thuật như chain-of-thought prompting, dù rất hiệu quả, thường tạo ra các prompt dài có thể lên đến hàng nghìn token. Điều này làm tăng thời gian xử lý và chi phí, và có thể vượt giới hạn token của một số mô hình.
Nén prompt giúp giảm các vấn đề này bằng cách cắt giảm số token trong khi vẫn giữ hiệu quả của prompt.
Pipeline tạo sinh tăng cường truy xuất (RAG)
RAG kết hợp truy xuất thông tin với sinh văn bản và thường được dùng trong chatbot chuyên biệt và các ứng dụng khác nơi ngữ cảnh có vai trò then chốt. Các pipeline này thường cần lịch sử hội thoại dài hoặc tài liệu được truy xuất làm prompt, dẫn đến số token cao và chi phí tăng.
Nén prompt là thiết yếu trong các trường hợp như vậy để duy trì ngữ cảnh cốt yếu trong khi giảm chi phí.
Khả năng áp dụng và hạn chế của nén prompt
Cần lưu ý rằng nén prompt không phải giải pháp vạn năng và nên được sử dụng thận trọng. Chẳng hạn, các mô hình trợ lý như ChatGPT được thiết kế cho hội thoại có thể không được lợi từ nén prompt quá mạnh tay.
Những mô hình này thường không tính phí theo token và có tính năng tóm tắt trò chuyện, ghi nhớ để quản lý lịch sử hội thoại hiệu quả, khiến việc nén trở nên dư thừa.
Cũng cần lưu ý rằng ngay cả khi làm việc với các mô hình tính phí theo token, nén quá mức có thể làm mất sắc thái hoặc chi tiết quan trọng. Tìm được điểm cân bằng giữa rút gọn kích thước và giữ nguyên ý nghĩa của prompt là chìa khóa.
Nén Prompt Hoạt Động Như Thế Nào?
Các kỹ thuật nén prompt có thể chia thành ba nhóm chính: chưng cất tri thức, mã hóa và lọc. Mỗi kỹ thuật tận dụng những ưu điểm khác nhau để tối ưu độ dài và hiệu quả của prompt dành cho LLM.
Chưng cất tri thức là một kỹ thuật trong học máy, được giới thiệu lần đầu bởi Hinton và cộng sự (2015), trong đó một mô hình nhỏ, đơn giản hơn (học trò) được huấn luyện để tái tạo hành vi của mô hình lớn, phức tạp hơn (giáo viên).
Kỹ thuật này ban đầu được phát triển để giải quyết thách thức tính toán khi huấn luyện tập hợp các mô hình. Trong bối cảnh kỹ thuật prompt, chưng cất tri thức có thể dùng để nén prompt thay vì nén mô hình.
Điều này đạt được bằng cách học cách nén các prompt “cứng” bên trong LLM thông qua tinh chỉnh prompt “mềm”. Để biết chi tiết, tham khảo mục 3.1 và phụ lục A.1.1 của bài khảo sát.
Mã hóa
Các phương pháp mã hóa chuyển đổi văn bản đầu vào thành vector, giảm độ dài prompt mà không làm mất thông tin quan trọng. Các vector này nắm bắt ý nghĩa cốt lõi của prompt, cho phép LLM xử lý đầu vào ngắn hơn một cách hiệu quả.
Tuy nhiên, tùy ngôn ngữ mã hóa và bộ tách token, số token có thể thực sự tăng. Ví dụ, nếu bạn mã hóa prompt bằng Base64, số token có thể còn lớn hơn, nên hãy thử nghiệm ban đầu theo trường hợp sử dụng của bạn.
Đáng ngạc nhiên, một số kỹ thuật mã hóa cũng được dùng để jailbreak mô hình, tức thao túng LLM để vượt qua cơ chế an toàn. Để biết thêm chi tiết về các phương pháp mã hóa, xem mục 3.2 và phụ lục A.1.2 của bài khảo sát.
Lọc
Trong khi hai phương pháp trước cố gắng nén toàn bộ prompt, các kỹ thuật lọc tập trung loại bỏ phần không cần thiết để nâng cao hiệu quả của LLM.
Kỹ thuật lọc đánh giá hàm lượng thông tin ở các phần khác nhau của prompt và loại bỏ thông tin dư thừa vì không phải mọi thông tin trong prompt đều có lợi cho LLM. Có thể thực hiện ở nhiều cấp độ như câu, cụm từ hoặc token.
Trong phần này, tôi sẽ triển khai và thử nghiệm thuật toán Selective Context vốn phổ biến và được xem là tiên tiến. Nếu bạn chỉ muốn thử thuật toán, không cần cài đặt gì—ứng dụng đã được lưu trữ trên nền tảng HuggingFace.
Cũng có các kỹ thuật nén phổ biến khác như Keep It Simple (KIS), SCLR, và các thuật toán thuộc họ LLMLingua, nhưng chúng ta sẽ không thể đề cập trong bài ngắn này.
Trong ứng dụng web Selective Context, bạn có thể chọn ngôn ngữ của prompt muốn nén (Tiếng Anh hoặc Tiếng Trung giản thể). Bạn cũng có thể đặt tỷ lệ nén và chọn có lọc ở cấp độ câu, token, hay cụm từ.
Triển khai và thử nghiệm Selective Context với OpenAI API
Giờ hãy bắt tay vào triển khai bằng Python. Chúng ta cũng sẽ thử một vài prompt đã nén với mô hình gpt-3.5-turbo-0125.
Đầu tiên, chúng ta cần cài các mô-đun cần thiết. Cài thư viện selective-context bằng pip:
Tiếp theo, khởi tạo đối tượng SelectiveContext. Có thể chọn curie hoặc gpt-2 cho model và en hoặc zh cho ngôn ngữ. Tôi sẽ dùng gpt-2 cho ví dụ này.
sc = SelectiveContext(model_type = ‘gpt-2’, lang = ‘en’)Được hỗ trợ bởi
Sau đó, gọi đối tượng SelectiveContext với chuỗi văn bản muốn nén. Có thể đặt tham số reduce_ratio và reduce_level. reduce_level phải là một trong: ‘sent’,‘phrase’, hoặc ‘token’. Lời gọi trả về một bộ (context, reduced_content), trong đó context là prompt đã nén và reduced_content là danh sách các cụm từ, câu hoặc token đã bị loại bỏ.
Giờ hãy làm vài ví dụ. Tôi sẽ yêu cầu mô hình gpt-3.5-turbo-0125 tóm tắt phần “Khi nào nên dùng nén prompt” trong bài viết này. Sau đó, chúng ta sẽ nén phần này với tỷ lệ 0,5 bằng cả ba mức: câu, cụm từ và token. Chúng ta sẽ yêu cầu mô hình tóm tắt lại các phiên bản đã nén và so sánh số token của mỗi prompt cùng đầu ra của mô hình.
Đoạn gốc và phần tóm tắt
Bên dưới là lệnh gọi API tôi sẽ dùng—chúng ta chỉ thay biến text trong chuỗi định dạng. Trước tiên, yêu cầu mô hình tóm tắt đoạn gốc, chưa nén:
from openai import OpenAI
client = OpenAI(api_key = key)
completion = client.chat.completions.create(
model = “gpt-3.5-turbo-0125”,
messages =[{“role”: “user”, “content”: f”Summarize the following paragraph:\n {text}”}])Được hỗ trợ bởi
Kiểm tra completion.usage cho thấy prompt gốc dài 304 token, và đây là đầu ra:
[Prompt compression is useful in scenarios such as advanced prompt engineering techniques and retrieval-augmented generation pipelines to reduce token counts and costs while preserving effectiveness and context. However, it is not a universal solution and should be used judiciously, as excessive compression can lead to a loss of important details. It is important to strike a balance between reducing size and maintaining the prompt's meaning.]Được hỗ trợ bởi
Như bạn thấy, mô hình đã tóm tắt đoạn chưa nén khá tốt.
Giảm ở mức token
Giờ thử phiên bản giảm theo token. Đoạn đã nén trông như sau:
[When Should Prompt CompProm compression particularly following Advanced prompt engineering Techniques like chainofthought prompting while highly lengthy prompts reach thousands tokensThis increases processing costs and may exceed token limits of certain modelsProm compression mit these token count while prompt effectivenessRetri-au generationRAG pipelines R combine information retrieval text specialized chat contextual understandingThese pipelines frequently involve providing extensive conversation histories retrieved as prompts leading high token counts increased expensesProm compression essential such essential context while costsApplic prompt compression It prompt universal judFor instance assistant models like ChatGPT designed convers contexts benefit aggressive prompt compressionThese models often do charge per token integrated chat summar memory features conversation history effectively compression redundantIt even working models charge per token excessive compression could nuance importantSt reducing size maintaining prompt’s meaning is]Được hỗ trợ bởi
Prompt dài 162 token, và đây là phần tóm tắt của mô hình:
[Prompt compression is recommended following advanced prompt engineering techniques like chain of thought prompting, especially when dealing with lengthy prompts that reach thousands of tokens. This helps reduce processing costs and ensure that the prompt remains effective for models like RAG pipelines, which involve extensive conversation histories. Prompt compression is essential for maintaining context while keeping costs low, particularly for models like ChatGPT that charge per token and benefit from aggressive compression. However, excessive compression could lead to loss of important nuances, so it is important to strike a balance between reducing size and maintaining the prompt's meaning.]Được hỗ trợ bởi
Đoạn tóm tắt chưa chính xác. Sắc thái về việc ChatGPT không được lợi từ nén mạnh đã bị mất.
Giảm ở mức câu
Tiếp theo, thử giảm ở mức câu. Prompt sau khi giảm còn 129 token:
[When Should We Use Prompt Compression? This increases processing times and costs and may exceed token limits of certain models. These pipelines frequently involve providing extensive conversation histories or retrieved documents as prompts, leading to high token counts and increased expenses. Prompt compression is essential in such cases to maintain essential context while minimizing costs. For instance, assistant models like ChatGPT, designed for conversational contexts, may not benefit from aggressive prompt compression. These models often do not charge per token and have integrated chat summarization and memory features to manage conversation history effectively, making compression redundant. ]Được hỗ trợ bởi
Đây là phần tóm tắt của mô hình:
[Prompt compression is necessary when processing times, costs, and token limits may be exceeded in pipelines involving extensive conversation histories or retrieved documents as prompts. However, for certain models like ChatGPT, designed for conversational contexts, aggressive prompt compression may not be beneficial as they already have features to manage conversation history effectively without the need for compression.]Được hỗ trợ bởi
Bản tóm tắt này không sai, nhưng thiếu phần thảo luận về RAG.
Giảm ở mức cụm từ
Cuối cùng, thử giảm ở mức cụm từ. Prompt dài 183 token:
[When Should Prompt Compression Prompt compression particularly beneficial Advanced prompt engineering techniques Techniques like chainofthought prompting while highly lengthy prompts reach thousands tokens This increases processing costs and may exceed token limits of certain models Prompt compression these issues token count while the prompt's effectiveness Retrieval-augmented generation (RAG) pipelines RAG pipelines combine information retrieval text generation specialized chatbots contextual understanding These pipelines frequently involve providing extensive conversation histories or retrieved as prompts leading high token counts increased expenses Prompt compression essential such cases to maintain essential context while costs Applicability prompt compression It's For instance assistant models like ChatGPT designed conversational contexts may benefit aggressive prompt compression These models often do charge per token have integrated chat summarization memory features manage conversation history effectively making compression redundant It even working models charge per token excessive compression could nuance important details reducing size maintaining the prompt’s meaning is
]Được hỗ trợ bởi
Đây là phần tóm tắt của mô hình:
[Prompt compression is beneficial in advanced prompt engineering techniques, such as chainofthought prompting, which can involve lengthy prompts reaching thousands of tokens. Retrieval-augmented generation (RAG) pipelines combine information retrieval and text generation in specialized chatbots, requiring extensive conversation histories or retrieved prompts leading to high token counts and increased expenses. Prompt compression is essential in maintaining context while managing costs in such cases. For instance, assistant models like ChatGPT, which are designed for conversational contexts, may benefit from aggressive prompt compression to effectively manage conversation history and reduce costs. However, excessive compression could compromise important details, so maintaining the prompt's meaning is crucial.]Được hỗ trợ bởi
Bản tóm tắt nhìn chung đúng và mạch lạc. Tuy nhiên, phần về ChatGPT lại hiểu sai là được lợi từ nén mạnh.
Đánh giá nén prompt
So sánh số token và nội dung tóm tắt của mô hình ở các mức nén khác nhau, ta có thể thấy tác động của nén prompt đến đầu ra của mô hình:
Mức nén
Số token (bản gốc dài 304)
Độ chính xác
Mức token
162
Mất sắc thái quan trọng về việc ChatGPT không được lợi từ nén mạnh, và có lỗi.
Mức câu
129
Không mắc lỗi, nhưng thiếu một số ngữ cảnh về pipeline RAG.
Mức cụm từ
183
Tương tự mức token, khẳng định sai rằng ChatGPT được lợi từ nén mạnh.
Nhìn chung, nén prompt có thể giảm đáng kể số token trong khi vẫn giữ ý chính. Tuy nhiên, cần tìm điểm cân bằng để tránh mất sắc thái và ngữ cảnh quan trọng.
Bài tập này cho thấy cần lựa chọn mức nén cẩn thận dựa trên ứng dụng cụ thể và tầm quan trọng của việc giữ lại một số chi tiết nhất định trong prompt.
Cũng đáng lưu ý là chúng ta thực hiện tất cả thí nghiệm với tỷ lệ nén 0,5, mức khá cao. Bạn có thể thử nhiều tỷ lệ nén cho các trường hợp sử dụng khác nhau để tìm điểm cân bằng tối ưu giữa giảm kích thước prompt và giữ vững tính toàn vẹn của nó.
Kết luận
Nén prompt là một kỹ thuật mạnh để tối ưu hiệu quả và chi phí của LLM. Chúng ta đã khám phá những điều cơ bản, tầm quan trọng, các kỹ thuật khác nhau và chi tiết triển khai.
Khi lĩnh vực AI tạo sinh tiếp tục phát triển, cập nhật các tiến bộ mới là rất quan trọng. Để nâng cao kỹ năng và hiểu biết về nén prompt cùng các kỹ thuật liên quan, tôi khuyến khích bạn đọc các bài báo được trích dẫn trong bài, cũng như các bài blog và khóa học toàn diện sau từ DataCamp:
Nén prompt là kỹ thuật tối ưu hóa đầu vào cho các mô hình ngôn ngữ lớn (LLM) bằng cách rút ngắn độ dài trong khi vẫn duy trì chất lượng và mức độ liên quan của đầu ra. Nó quan trọng vì giúp tuân thủ giới hạn token, giảm thời gian xử lý và chi phí.
Một số thách thức phổ biến khi triển khai nén prompt là gì?⌄
Những thách thức phổ biến gồm duy trì cân bằng giữa mức độ nén và việc bảo toàn thông tin cốt yếu, xử lý đa dạng kiểu dữ liệu đầu vào, và đảm bảo prompt đã nén vẫn tạo ra đầu ra chất lượng cao. Ngoài ra, triển khai các cách tiếp cận dựa trên học máy và lai có thể tốn tài nguyên và phức tạp.
Xử lý nén prompt cho hội thoại nhiều lượt trong chatbot như thế nào?⌄
Với hội thoại nhiều lượt, nén prompt phải đảm bảo ngữ cảnh từ các tương tác trước đó được giữ lại. Các kỹ thuật như lọc ngữ cảnh chọn lọc có thể giúp bằng cách giữ các phần quan trọng của cuộc trò chuyện trong khi nén bớt thông tin kém quan trọng. Cách tiếp cận này giúp duy trì tính liên tục và mức độ liên quan trong phản hồi của chatbot.
Tôi có thể dùng tài nguyên nào để cải thiện kỹ năng nén prompt?⌄
Để nâng cao kỹ năng, hãy khám phá các bài nghiên cứu, bài blog và khóa học DataCamp được nhắc trong bài viết. Chủ đề bao gồm kỹ thuật prompt, prompt tuning và retrieval-augmented generation (RAG), tất cả đều quan trọng để thành thạo nén prompt. Đồng thời, hãy thực hành các kỹ thuật bạn đã học.
Có cân nhắc đạo đức nào khi dùng nén prompt không?⌄
Có, các cân nhắc đạo đức gồm đảm bảo việc nén không vô tình đưa vào thiên lệch hoặc loại bỏ thông tin quan trọng có thể dẫn đến đầu ra sai lệch hoặc gây hại. Ngoài ra, kỹ thuật nén prompt đôi khi có thể vô tình jailbreak mô hình, khiến nó hành xử khó lường hoặc tạo nội dung không phù hợp. Cần theo dõi tác động của nén prompt lên hiệu năng và đầu ra của mô hình, đặc biệt trong các ứng dụng nhạy cảm như y tế, tài chính hoặc tư vấn pháp lý.
Tôi là Dimitri Didmanidze, một nhà khoa học dữ liệu hiện đang theo học Thạc sĩ Toán học với trọng tâm là Học máy. Hành trình học thuật của tôi còn bao gồm nghiên cứu về khả năng của các mô hình dựa trên transformer và giảng dạy ở bậc đại học, giúp tôi hiểu sâu hơn các khái niệm lý thuyết phức tạp. Tôi cũng từng làm việc trong ngành ngân hàng, nơi tôi áp dụng những nguyên lý này để giải quyết các thách thức dữ liệu trong thực tế.
Trong bối cảnh trí tuệ nhân tạo phát triển nhanh chóng, tối ưu hóa các mô hình ngôn ngữ lớn (LLM) không chỉ là đẩy giới hạn của những gì khả thi mà còn là đảm bảo hiệu quả và tiết kiệm chi phí.
Nén prompt đã nổi lên như một kỹ thuật quan trọng để nâng cao hiệu năng của các mô hình này đồng thời giảm thiểu chi phí tính toán. Với các nghiên cứu mới xuất hiện gần như hàng tuần, việc theo kịp là một thách thức, nhưng nắm vững các nguyên lý cơ bản là điều thiết yếu.
Bài viết này trình bày những điều cơ bản về nén prompt, thảo luận khi nào nên dùng, tầm quan trọng của nó trong việc giảm chi phí trong các pipeline RAG, và cung cấp ví dụ sử dụng mô hình gpt-3.5-turbo-0125 thông qua API của OpenAI.
Nếu bạn muốn tìm hiểu thêm, hãy xem khóa học về kỹ thuật prompt này.
Nén Prompt Là Gì?
Nén prompt là một kỹ thuật trong xử lý ngôn ngữ tự nhiên (NLP) nhằm tối ưu hóa đầu vào cho LLM bằng cách rút gọn độ dài mà không làm thay đổi đáng kể chất lượng và mức độ liên quan của đầu ra. Tối ưu hóa này rất quan trọng vì số lượng token trong truy vấn ảnh hưởng trực tiếp đến hiệu năng của LLM.
Token là đơn vị văn bản cơ bản mà LLM sử dụng, đại diện cho từ hoặc phân từ tùy thuộc vào bộ tách token của mô hình ngôn ngữ. Giảm số token trong prompt là có lợi, đôi khi còn bắt buộc, vì một số lý do:
Nén prompt giảm số lượng token bằng các chiến lược như loại bỏ thông tin dư thừa, tóm tắt ý chính hoặc sử dụng các thuật toán chuyên biệt để chắt lọc tinh túy của prompt trong khi tối thiểu hóa số token.
Khi Nào Nên Dùng Nén Prompt?
Hãy cùng xem các kịch bản mà chúng ta có thể dùng nén prompt.
Các kỹ thuật kỹ thuật prompt nâng cao
Các kỹ thuật như chain-of-thought prompting, dù rất hiệu quả, thường tạo ra các prompt dài có thể lên đến hàng nghìn token. Điều này làm tăng thời gian xử lý và chi phí, và có thể vượt giới hạn token của một số mô hình.
Nén prompt giúp giảm các vấn đề này bằng cách cắt giảm số token trong khi vẫn giữ hiệu quả của prompt.
Pipeline tạo sinh tăng cường truy xuất (RAG)
RAG kết hợp truy xuất thông tin với sinh văn bản và thường được dùng trong chatbot chuyên biệt và các ứng dụng khác nơi ngữ cảnh có vai trò then chốt. Các pipeline này thường cần lịch sử hội thoại dài hoặc tài liệu được truy xuất làm prompt, dẫn đến số token cao và chi phí tăng.
Nén prompt là thiết yếu trong các trường hợp như vậy để duy trì ngữ cảnh cốt yếu trong khi giảm chi phí.
Khả năng áp dụng và hạn chế của nén prompt
Cần lưu ý rằng nén prompt không phải giải pháp vạn năng và nên được sử dụng thận trọng. Chẳng hạn, các mô hình trợ lý như ChatGPT được thiết kế cho hội thoại có thể không được lợi từ nén prompt quá mạnh tay.
Những mô hình này thường không tính phí theo token và có tính năng tóm tắt trò chuyện, ghi nhớ để quản lý lịch sử hội thoại hiệu quả, khiến việc nén trở nên dư thừa.
Cũng cần lưu ý rằng ngay cả khi làm việc với các mô hình tính phí theo token, nén quá mức có thể làm mất sắc thái hoặc chi tiết quan trọng. Tìm được điểm cân bằng giữa rút gọn kích thước và giữ nguyên ý nghĩa của prompt là chìa khóa.
Nén Prompt Hoạt Động Như Thế Nào?
Các kỹ thuật nén prompt có thể chia thành ba nhóm chính: chưng cất tri thức, mã hóa và lọc. Mỗi kỹ thuật tận dụng những ưu điểm khác nhau để tối ưu độ dài và hiệu quả của prompt dành cho LLM.
Trong khi chúng ta sẽ bàn về từng kỹ thuật, bạn có thể tìm cách tiếp cận toàn diện hơn trong bài báo: Efficient Prompting Methods for Large Language Models: A Survey. Xuyên suốt bài viết, tôi sẽ gọi bài này là “bài khảo sát”.
Chưng cất tri thức
Chưng cất tri thức là một kỹ thuật trong học máy, được giới thiệu lần đầu bởi Hinton và cộng sự (2015), trong đó một mô hình nhỏ, đơn giản hơn (học trò) được huấn luyện để tái tạo hành vi của mô hình lớn, phức tạp hơn (giáo viên).
Kỹ thuật này ban đầu được phát triển để giải quyết thách thức tính toán khi huấn luyện tập hợp các mô hình. Trong bối cảnh kỹ thuật prompt, chưng cất tri thức có thể dùng để nén prompt thay vì nén mô hình.
Điều này đạt được bằng cách học cách nén các prompt “cứng” bên trong LLM thông qua tinh chỉnh prompt “mềm”. Để biết chi tiết, tham khảo mục 3.1 và phụ lục A.1.1 của bài khảo sát.
Mã hóa
Các phương pháp mã hóa chuyển đổi văn bản đầu vào thành vector, giảm độ dài prompt mà không làm mất thông tin quan trọng. Các vector này nắm bắt ý nghĩa cốt lõi của prompt, cho phép LLM xử lý đầu vào ngắn hơn một cách hiệu quả.
Tuy nhiên, tùy ngôn ngữ mã hóa và bộ tách token, số token có thể thực sự tăng. Ví dụ, nếu bạn mã hóa prompt bằng Base64, số token có thể còn lớn hơn, nên hãy thử nghiệm ban đầu theo trường hợp sử dụng của bạn.
Đáng ngạc nhiên, một số kỹ thuật mã hóa cũng được dùng để jailbreak mô hình, tức thao túng LLM để vượt qua cơ chế an toàn. Để biết thêm chi tiết về các phương pháp mã hóa, xem mục 3.2 và phụ lục A.1.2 của bài khảo sát.
Lọc
Trong khi hai phương pháp trước cố gắng nén toàn bộ prompt, các kỹ thuật lọc tập trung loại bỏ phần không cần thiết để nâng cao hiệu quả của LLM.
Kỹ thuật lọc đánh giá hàm lượng thông tin ở các phần khác nhau của prompt và loại bỏ thông tin dư thừa vì không phải mọi thông tin trong prompt đều có lợi cho LLM. Có thể thực hiện ở nhiều cấp độ như câu, cụm từ hoặc token.
Mục tiêu là chỉ giữ lại những phần liên quan nhất của prompt. Trong bài Selective Context của Li và cộng sự (2023), các nhà nghiên cứu dùng thước đo tự-thông tin để lọc bỏ thông tin dư thừa. Trong bài LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models, nhóm nghiên cứu từ Microsoft tinh luyện prompt thành các thành phần chính và điều chỉnh động tỷ lệ nén cho từng phần. Đọc thêm tại mục 3.3 và phụ lục A.1.3 của bài khảo sát.
Cách Triển Khai Nén Prompt Bằng Python
Trong phần này, tôi sẽ triển khai và thử nghiệm thuật toán Selective Context vốn phổ biến và được xem là tiên tiến. Nếu bạn chỉ muốn thử thuật toán, không cần cài đặt gì—ứng dụng đã được lưu trữ trên nền tảng HuggingFace.
Cũng có các kỹ thuật nén phổ biến khác như Keep It Simple (KIS), SCLR, và các thuật toán thuộc họ LLMLingua, nhưng chúng ta sẽ không thể đề cập trong bài ngắn này.
Liên kết ứng dụng
Trong ứng dụng web Selective Context, bạn có thể chọn ngôn ngữ của prompt muốn nén (Tiếng Anh hoặc Tiếng Trung giản thể). Bạn cũng có thể đặt tỷ lệ nén và chọn có lọc ở cấp độ câu, token, hay cụm từ.
Triển khai và thử nghiệm Selective Context với OpenAI API
Giờ hãy bắt tay vào triển khai bằng Python. Chúng ta cũng sẽ thử một vài prompt đã nén với mô hình gpt-3.5-turbo-0125.
Đầu tiên, chúng ta cần cài các mô-đun cần thiết. Cài thư viện
selective-contextbằngpip:Chúng ta cũng cần tải mô hình
en_core_web_smtừspacy, có thể thực hiện bằng lệnh sau:Tiếp theo, khởi tạo đối tượng
SelectiveContext. Có thể chọncuriehoặcgpt-2cho model vàenhoặczhcho ngôn ngữ. Tôi sẽ dùnggpt-2cho ví dụ này.Sau đó, gọi đối tượng
SelectiveContextvới chuỗi văn bản muốn nén. Có thể đặt tham sốreduce_ratiovàreduce_level.reduce_levelphải là một trong:‘sent’,‘phrase’, hoặc‘token’. Lời gọi trả về một bộ(context, reduced_content), trong đócontextlà prompt đã nén vàreduced_contentlà danh sách các cụm từ, câu hoặc token đã bị loại bỏ.Giờ hãy làm vài ví dụ. Tôi sẽ yêu cầu mô hình
gpt-3.5-turbo-0125tóm tắt phần “Khi nào nên dùng nén prompt” trong bài viết này. Sau đó, chúng ta sẽ nén phần này với tỷ lệ 0,5 bằng cả ba mức: câu, cụm từ và token. Chúng ta sẽ yêu cầu mô hình tóm tắt lại các phiên bản đã nén và so sánh số token của mỗi prompt cùng đầu ra của mô hình.Đoạn gốc và phần tóm tắt
Bên dưới là lệnh gọi API tôi sẽ dùng—chúng ta chỉ thay biến
texttrong chuỗi định dạng. Trước tiên, yêu cầu mô hình tóm tắt đoạn gốc, chưa nén:Kiểm tra
completion.usagecho thấy prompt gốc dài 304 token, và đây là đầu ra:Như bạn thấy, mô hình đã tóm tắt đoạn chưa nén khá tốt.
Giảm ở mức token
Giờ thử phiên bản giảm theo token. Đoạn đã nén trông như sau:
Prompt dài 162 token, và đây là phần tóm tắt của mô hình:
Đoạn tóm tắt chưa chính xác. Sắc thái về việc ChatGPT không được lợi từ nén mạnh đã bị mất.
Giảm ở mức câu
Tiếp theo, thử giảm ở mức câu. Prompt sau khi giảm còn 129 token:
Đây là phần tóm tắt của mô hình:
Bản tóm tắt này không sai, nhưng thiếu phần thảo luận về RAG.
Giảm ở mức cụm từ
Cuối cùng, thử giảm ở mức cụm từ. Prompt dài 183 token:
Đây là phần tóm tắt của mô hình:
Bản tóm tắt nhìn chung đúng và mạch lạc. Tuy nhiên, phần về ChatGPT lại hiểu sai là được lợi từ nén mạnh.
Đánh giá nén prompt
So sánh số token và nội dung tóm tắt của mô hình ở các mức nén khác nhau, ta có thể thấy tác động của nén prompt đến đầu ra của mô hình:
Mức nén
Số token (bản gốc dài 304)
Độ chính xác
Mức token
162
Mất sắc thái quan trọng về việc ChatGPT không được lợi từ nén mạnh, và có lỗi.
Mức câu
129
Không mắc lỗi, nhưng thiếu một số ngữ cảnh về pipeline RAG.
Mức cụm từ
183
Tương tự mức token, khẳng định sai rằng ChatGPT được lợi từ nén mạnh.
Nhìn chung, nén prompt có thể giảm đáng kể số token trong khi vẫn giữ ý chính. Tuy nhiên, cần tìm điểm cân bằng để tránh mất sắc thái và ngữ cảnh quan trọng.
Bài tập này cho thấy cần lựa chọn mức nén cẩn thận dựa trên ứng dụng cụ thể và tầm quan trọng của việc giữ lại một số chi tiết nhất định trong prompt.
Cũng đáng lưu ý là chúng ta thực hiện tất cả thí nghiệm với tỷ lệ nén 0,5, mức khá cao. Bạn có thể thử nhiều tỷ lệ nén cho các trường hợp sử dụng khác nhau để tìm điểm cân bằng tối ưu giữa giảm kích thước prompt và giữ vững tính toàn vẹn của nó.
Kết luận
Nén prompt là một kỹ thuật mạnh để tối ưu hiệu quả và chi phí của LLM. Chúng ta đã khám phá những điều cơ bản, tầm quan trọng, các kỹ thuật khác nhau và chi tiết triển khai.
Khi lĩnh vực AI tạo sinh tiếp tục phát triển, cập nhật các tiến bộ mới là rất quan trọng. Để nâng cao kỹ năng và hiểu biết về nén prompt cùng các kỹ thuật liên quan, tôi khuyến khích bạn đọc các bài báo được trích dẫn trong bài, cũng như các bài blog và khóa học toàn diện sau từ DataCamp: