Stop sequences (language models) (VI)
Stop Sequence (chuỗi dừng) trong bối cảnh các mô hình ngôn ngữ lớn (LLM) là một chuỗi ký tự hoặc token đặc biệt, báo hiệu cho mô hình biết cần dừng quá trình sinh văn bản[1]. Cơ chế này là một thành phần quan trọng của các mô hình ngôn ngữ tự hồi quy, đảm bảo việc kết thúc phản hồi một cách có kiểm soát và có thể dự đoán được.
Khi sử dụng stop sequence, ở mỗi bước sinh văn bản, mô hình kiểm tra xem văn bản đã được tạo ra có kết thúc bằng một trong các chuỗi đã định hay không. Nếu tìm thấy sự trùng khớp, quá trình lập tức dừng lại, trong đó bản thân stop sequence không được đưa vào kết quả đầu ra cuối cùng[2]. Điều này cho phép nhà phát triển kiểm soát chính xác ranh giới của phản hồi mà không cần thay đổi bản thân yêu cầu.
Nguyên tắc hoạt động cơ bản
Trong các mô hình ngôn ngữ tự hồi quy, việc sinh văn bản diễn ra tuần tự, từng token một. Ở mỗi bước, mô hình dự đoán token tiếp theo dựa trên toàn bộ chuỗi trước đó (prompt đầu vào và văn bản đã được sinh ra). Về mặt toán học, điều này được biểu diễn dưới dạng xác suất có điều kiện:
trong đó là token hiện tại đang được sinh ra, là chuỗi các token đã được sinh ra trước đó, và là chuỗi đầu vào[3].
Cơ chế stop sequence hoạt động như một tiêu chí bên ngoài để ngắt quá trình lặp này.
Các loại chuỗi dừng
Có một số loại cơ chế dừng chính, có thể được sử dụng riêng lẻ hoặc kết hợp với nhau.
1. Token kết thúc chuỗi (EOS)
End-of-Sequence (EOS) là các token đặc biệt (ví dụ: `<|endoftext|>`), được tích hợp vào từ điển của mô hình và dùng để đánh dấu sự kết thúc của một đoạn văn bản logic. Mô hình được huấn luyện để sinh ra EOS token khi cho rằng câu trả lời đã hoàn chỉnh, vì tất cả các văn bản trong tập huấn luyện đều kết thúc bằng token này[4]. Khi phát hiện EOS token, quá trình sinh văn bản tự động dừng lại.
Các nghiên cứu cho thấy sự hiện diện của các EOS token ảnh hưởng đến kiến trúc attention: các mô hình phát triển các cơ chế nội tại để đếm vị trí, tuy nhiên điều này có thể hạn chế khả năng ngoại suy của chúng trên các chuỗi dài hơn đáng kể so với các ví dụ huấn luyện[5].
2. Chuỗi do người dùng định nghĩa
Đây là các chuỗi tùy ý mà nhà phát triển đặt ra cho một nhiệm vụ cụ thể. Chúng không phải là một phần của từ điển mô hình, nhưng được theo dõi ở cấp độ ký tự. Các ví dụ bao gồm:
- Ký tự xuống dòng: `\n` hoặc `\n\n` để dừng sau một đoạn văn.
- Các dấu hiệu ngữ cảnh: `Human:`, `User:` hoặc `Q:` để phân tách các lượt thoại trong hội thoại.
- Các dấu hiệu đặc biệt: `###`, `</output>` hoặc `END`.
3. Chuỗi có cấu trúc
Đây là các dấu hiệu chuyên dụng được sử dụng để kết thúc các thành phần cấu trúc nhất định, đặc biệt quan trọng khi sinh nội dung có định dạng[1]:
- Mã nguồn: dấu backtick ba lần (```) để kết thúc khối mã.
- JSON/XML: dấu ngoặc đóng (`}`) hoặc thẻ đóng (`</element>`).
Triển khai kỹ thuật và các vấn đề
Việc phát hiện stop sequence hiệu quả là một nhiệm vụ không tầm thường, đi kèm với một số khó khăn.
Thuật toán phát hiện và tối ưu hóa
Quá trình phát hiện trong các hệ thống thực tế bao gồm:
- Kiểm tra ở mỗi bước: Sau khi sinh ra mỗi token mới, hệ thống kiểm tra xem kết quả đầu ra hiện tại có kết thúc bằng một trong các stop sequence đã định hay không.
- Xử lý các khớp một phần: Hệ thống phải theo dõi các tình huống khi một phần của chuỗi đã được sinh ra nhưng chưa có sự trùng khớp hoàn toàn.
- Kiểm tra đa tiêu chí: Hầu hết các hệ thống (ví dụ: OpenAI API) cho phép theo dõi đồng thời nhiều (tới bốn) stop sequence[2].
Trong framework Hugging Face Transformers, lớp trừu tượng `StoppingCriteria` được triển khai cho mục đích này, cho phép tạo các tiêu chí dừng tùy chỉnh như `MaxLengthCriteria` (theo độ dài) hoặc `EosTokenCriteria` (theo EOS token)[4].
Các vấn đề và hạn chế
- Vấn đề tokenization: Đây là khó khăn kỹ thuật chính. Cùng một chuỗi ký tự (ví dụ: `\nUser:`) có thể được phân tách thành các token theo những cách khác nhau tùy thuộc vào ngữ cảnh. Điều này làm phức tạp việc phát hiện đáng tin cậy, vì stop sequence có thể bị phân chia giữa nhiều token[5].
- Hiệu năng: Việc kiểm tra nhiều stop sequence dài ở mỗi bước có thể làm chậm quá trình sinh văn bản, đặc biệt khi làm việc với các chuỗi dài trong thời gian thực.
- Kết quả dương tính giả: Chuỗi đã định có thể vô tình xuất hiện ở giữa phản hồi mong muốn, dẫn đến việc kết thúc sớm. Do đó, điều quan trọng là phải chọn các dấu hiệu đủ độc đáo và cụ thể (ví dụ: `\n###\n`)[6].
Ứng dụng và các tình huống sử dụng
Stop sequence là một công cụ mạnh mẽ để kiểm soát hành vi của LLM.
- Kiểm soát độ dài và chi phí: Cho phép giới hạn kích thước tối đa của phản hồi và do đó giảm mức tiêu thụ token, điều quan trọng khi sử dụng các API có tính phí.
- Hệ thống hội thoại: Được sử dụng để phân tách rõ ràng các lượt thoại của người tham gia, để mô hình trợ lý không sinh ra phản hồi thay cho người dùng.
- Sinh nội dung có cấu trúc: Không thể thiếu để có được kết quả đầu ra chính xác ở các định dạng JSON, XML hoặc khi viết mã, ngăn chặn việc thêm thông tin thừa sau khi cấu trúc đã hoàn thành[7].
- Ngăn chặn hành vi không mong muốn: Giúp ngắt quá trình sinh văn bản khi xuất hiện nội dung lặp lại hoặc không chính xác (ảo giác).
- Huấn luyện và fine-tuning: Trong các tập dữ liệu huấn luyện, các dấu hiệu độc đáo (ví dụ: `###`) thường được sử dụng làm stop sequence để mô hình học cách kết thúc phản hồi ở đúng vị trí[6].
Các hướng nghiên cứu hiện đại
- Tiêu chí dừng thích ứng: Phát triển các phương pháp xác định động điểm kết thúc dựa trên ngữ cảnh và chất lượng của văn bản đã được sinh ra.
- Các phương pháp tiếp cận entropy: Sử dụng entropy của phân phối token làm tiêu chí. Entropy cao có thể chỉ ra sự không chắc chắn của mô hình và đóng vai trò là tín hiệu để dừng quá trình sinh văn bản.
Liên kết
- Tài liệu OpenAI về cách sử dụng stop sequences
- Tài liệu Hugging Face về StoppingCriteria
Tài liệu tham khảo
- Sutskever, I.; Vinyals, O.; Le, Q. V. (2014). Sequence to Sequence Learning with Neural Networks. arXiv:1409.3215.
- Vaswani, A. et al. (2017). Attention Is All You Need. arXiv:1706.03762.
- Keskar, N. S. et al. (2019). CTRL: A Conditional Transformer Language Model for Controllable Generation. arXiv:1909.05858.
- Holtzman, A. et al. (2020). The Curious Case of Neural Text Degeneration. arXiv:1904.09751.
- Brown, T. et al. (2020). Language Models are Few-Shot Learners. arXiv:2005.14165.
- Zong, M.; Krishnamachari, B. (2022). A Survey on GPT-3. arXiv:2212.00857.
- Zhao, Y. et al. (2022). Calibrating Sequence Likelihood Improves Conditional Language Generation. arXiv:2210.00045.
- Hu, J. C.; Cavicchioli, R.; Capotondi, A. (2023). A Request for Clarity over the End-of-Sequence Token in the Self-Critical Sequence Training. arXiv:2305.12254.
- Zhu, W. et al. (2024). Improving Open-Ended Text Generation via Adaptive Decoding. arXiv:2402.18223.
- Zhang, H. et al. (2024). Adaptable Logical Control for Large Language Models. arXiv:2406.13892.
- Suh, Y. J. et al. (2025). The Curious Case of Sequentially Mis-calibrated Language Models. arXiv:2205.11916.
Ghi chú
- ↑ 1.0 1.1 «Stop Sequence: Understanding & Setting It Correctly». Promptitude.io Help Center. [1]
- ↑ 2.0 2.1 «How do I use stop sequences in the OpenAI API?». OpenAI Help Center. [2]
- ↑ «How to use stop sequences?». Vellum. [3]
- ↑ 4.0 4.1 Brown, Tom, et al. «A Survey on GPT-3». arXiv:2212.00857 [cs.CL], 1 дек. 2022 г. [4]
- ↑ 5.0 5.1 Suh, Y. J., et al. «The Curious Case of Sequentially Mis-calibrated Language Models». arXiv:2205.11916 [cs.CL], 24 мая 2022 г. [5]
- ↑ 6.0 6.1 Eric, Mihail. «How to Finetune GPT3». mihaileric.com. [6]
- ↑ Corin, Daniel. «Way Enough - Cursor Triple Backticks Stop Sequence». danielcorin.com. [7]