Preference fine-tuning (PFT) là một kỹ thuật đã được sử dụng từ lâu để tinh chỉnh LLM. Gần đây, OpenAI đã giới thiệu nó như một phần trong chuỗi 12 ngày ra mắt tính năng.
Cùng với tinh chỉnh có giám sát (SFT) và tinh chỉnh tăng cường (RFT), PFT là một cách khác để căn chỉnh các mô hình ngôn ngữ lớn theo sở thích của người dùng.
Trong bài viết này, tôi sẽ nhanh chóng giải thích tinh chỉnh theo sở thích và hướng dẫn bạn cách sử dụng nó với nỗ lực tối thiểu trên bảng điều khiển dành cho nhà phát triển của OpenAI.
Tinh chỉnh theo sở thích của OpenAI là gì?
Trong khi mục tiêu của tinh chỉnh có giám sát tiêu chuẩn là khiến mô hình trả về những đầu ra nhất định khi nhận những đầu vào nhất định, thì trọng tâm của tinh chỉnh theo sở thích (PFT) là điều hướng mô hình tạo ra những phản hồi mà chúng ta mong muốn và tránh những phản hồi mà chúng ta không muốn.
Tối ưu hóa sở thích trực tiếp (DPO) là kỹ thuật tiêu chuẩn trong PFT và đã trở nên phổ biến như một kỹ thuật căn chỉnh mạnh nhờ sự đơn giản và hiệu quả.
Không giống nhưhọc tăng cường từ phản hồi của con người (RLHF), DPO không cần một mô hình phần thưởng phức tạp để căn chỉnh mô hình ngôn ngữ lớn (LLM) mà xem bài toán căn chỉnh như một phép tối ưu hóa “trực tiếp” của hàm mất mát. Điều này giúp DPO dễ triển khai hơn và hiệu quả tính toán hơn.
Bộ dữ liệu cần cho DPO, giống các phương pháp căn chỉnh khác, bao gồm một cặp phản hồi “được ưa thích” và “không được ưa thích” cho một prompt nhất định. Trong trường hợp PFT của OpenAI, tương tự các phương pháp tinh chỉnh khác, bộ dữ liệu phải ở định dạng JSONLvà có cấu trúc như sau:
{"input":{"messages":[{"role":"user","content":"Hello, can you tell me how cold San Francisco is today?"}],"tools":[],"parallel_tool_calls":true},"preferred_output":[{"role":"assistant","content":"Today in San Francisco, it is not quite cold as expected. Morning clouds will give away to sunshine, with a high near 68°F (20°C) and a low around 57°F (14°C)."}],"non_preferred_output":[{"role":"assistant","content":"It is not particularly cold in San Francisco today."}]}Được hỗ trợ bởi
Tài liệu chính thức của OpenAIdocumentation cho PFT khuyến nghị kết hợp SFT và PFT để có độ căn chỉnh tốt hơn. Các kỹ thuật căn chỉnh như PFT thường được dùng sau khi tinh chỉnh mô hình trên bộ dữ liệu có giám sát. Kết hợp SFT với PFT được coi là tiêu chuẩn trong ngành và cũng được OpenAI đề xuất.
Cách định dạng bộ dữ liệu cho tinh chỉnh theo sở thích
Trước hết, chúng ta cần đảm bảo bộ dữ liệu ở đúng định dạng yêu cầu cho tinh chỉnh theo sở thích của OpenAI.
Có nhiều cách để tạo bộ dữ liệu theo sở thích. Một cách là lấy các cặp đầu ra của LLM với các temperature, top_k hoặc system prompt khác nhau, rồi dùng một LLM khác, tốt nhất là mạnh hơn, để chọn một đầu ra là “được ưa thích” và đầu ra kia là “không được ưa thích”.
Trong phần minh họa của hướng dẫn này, tôi sẽ tải một bộ dữ liệu theo sở thích từ Hugging Face và cấu trúc lại. Tôi sẽ dùngargilla/ultrafeedback-binarized-preferences, đây là một bộ dữ liệu theo sở thích, nhưng tôi chỉ lấy 50 hàng đầu tiên.
Ví dụ về bộ dữ liệu theo sở thích từ Hugging Face.
Một script Python là đủ để chuyển cấu trúc bộ dữ liệu sang định dạng tinh chỉnh của OpenAI, nhưng bạn có thể chọn cách tiếp cận khác tùy ứng dụng của mình.
import datasets
import copy
import json
instance_structure ={"input":{"messages":[{"role":"user","content":""}],"tools":[],"parallel_tool_calls":True},"preferred_output":[{"role":"assistant","content":""}],"non_preferred_output":[{"role":"assistant","content":""}]}
ds = datasets.load_dataset("argilla/ultrafeedback-binarized-preferences", trust_remote_code=True, split="train")
ds_sample = ds.select(range(50))#select the first 50 rows
ds_list =[]for sample in ds_sample:
instance = copy.deepcopy(instance_structure)
instance["input"]["messages"][0]["content"]= sample["instruction"]
instance["preferred_output"][0]["content"]= sample["chosen_response"]
instance["non_preferred_output"][0]["content"]= sample["rejected_response"]
ds_list.append(instance)withopen("preference_dataset.jsonl",'w')as out:for json_line in ds_list:
jout = json.dumps(json_line)+'\\n'
out.write(jout)Được hỗ trợ bởi
Hãy đảm bảo định dạng bộ dữ liệu của bạn là jsonl chứ không phải json. Nhiều khả năng cuối tệp sẽ có một dòng trống, hãy xóa nó.
Cách chạy tinh chỉnh theo sở thích của OpenAI
Khi đã chuẩn bị xong bộ dữ liệu, bạn có thể làm theo các bước sau để chạy tinh chỉnh theo sở thích:
Truy cập bảng điều khiển của OpenAI.
Tìm phần fine-tuning và chọn Create để tạo một tác vụ tinh chỉnh mới.
Chọn tối ưu hóa sở thích trực tiếp làm phương pháp tinh chỉnh.
Tải lên dữ liệu huấn luyện và kiểm định (nếu có).
OpenAI cho phép bạn chỉ định các siêu tham số, nhưng bạn cũng có thể để trống và hệ thống sẽ tự quyết định. Tùy vào kích thước bộ dữ liệu, quá trình huấn luyện có thể mất thời gian.
Kết luận
Tối ưu hóa sở thích trực tiếp là một tính năng hữu ích mới trong bộ công cụ tinh chỉnh của OpenAI, cho phép bạn kiểm soát rõ ràng tông giọng và phong cách phản hồi của mô hình, giúp nó phù hợp hơn với sở thích người dùng.
Cũng như chưng cất mô hình của OpenAI, tinh chỉnh tăng cường và tinh chỉnh có giám sát, đóng góp chính của bạn trong tinh chỉnh theo sở thích sẽ là chuẩn bị bộ dữ liệu đúng theo định dạng và cấu trúc của OpenAI, còn các công cụ của họ sẽ xử lý phần còn lại:
Học viên cao học ngành Trí tuệ nhân tạo và chuyên viên biên tập kỹ thuật AI. Tôi chia sẻ những góc nhìn về công nghệ AI mới nhất, giúp phổ biến nghiên cứu ML và đơn giản hóa các chủ đề AI phức tạp để bạn luôn đi đầu.
Preference fine-tuning (PFT) là một kỹ thuật đã được sử dụng từ lâu để tinh chỉnh LLM. Gần đây, OpenAI đã giới thiệu nó như một phần trong chuỗi 12 ngày ra mắt tính năng.
Cùng với tinh chỉnh có giám sát (SFT) và tinh chỉnh tăng cường (RFT), PFT là một cách khác để căn chỉnh các mô hình ngôn ngữ lớn theo sở thích của người dùng.
Trong bài viết này, tôi sẽ nhanh chóng giải thích tinh chỉnh theo sở thích và hướng dẫn bạn cách sử dụng nó với nỗ lực tối thiểu trên bảng điều khiển dành cho nhà phát triển của OpenAI.
Tinh chỉnh theo sở thích của OpenAI là gì?
Trong khi mục tiêu của tinh chỉnh có giám sát tiêu chuẩn là khiến mô hình trả về những đầu ra nhất định khi nhận những đầu vào nhất định, thì trọng tâm của tinh chỉnh theo sở thích (PFT) là điều hướng mô hình tạo ra những phản hồi mà chúng ta mong muốn và tránh những phản hồi mà chúng ta không muốn.
Tối ưu hóa sở thích trực tiếp (DPO) là kỹ thuật tiêu chuẩn trong PFT và đã trở nên phổ biến như một kỹ thuật căn chỉnh mạnh nhờ sự đơn giản và hiệu quả.
Không giống như học tăng cường từ phản hồi của con người (RLHF), DPO không cần một mô hình phần thưởng phức tạp để căn chỉnh mô hình ngôn ngữ lớn (LLM) mà xem bài toán căn chỉnh như một phép tối ưu hóa “trực tiếp” của hàm mất mát. Điều này giúp DPO dễ triển khai hơn và hiệu quả tính toán hơn.
Bộ dữ liệu cần cho DPO, giống các phương pháp căn chỉnh khác, bao gồm một cặp phản hồi “được ưa thích” và “không được ưa thích” cho một prompt nhất định. Trong trường hợp PFT của OpenAI, tương tự các phương pháp tinh chỉnh khác, bộ dữ liệu phải ở định dạng JSONL và có cấu trúc như sau:
Tài liệu chính thức của OpenAI documentation cho PFT khuyến nghị kết hợp SFT và PFT để có độ căn chỉnh tốt hơn. Các kỹ thuật căn chỉnh như PFT thường được dùng sau khi tinh chỉnh mô hình trên bộ dữ liệu có giám sát. Kết hợp SFT với PFT được coi là tiêu chuẩn trong ngành và cũng được OpenAI đề xuất.
Cách định dạng bộ dữ liệu cho tinh chỉnh theo sở thích
Trước hết, chúng ta cần đảm bảo bộ dữ liệu ở đúng định dạng yêu cầu cho tinh chỉnh theo sở thích của OpenAI.
Có nhiều cách để tạo bộ dữ liệu theo sở thích. Một cách là lấy các cặp đầu ra của LLM với các temperature, top_k hoặc system prompt khác nhau, rồi dùng một LLM khác, tốt nhất là mạnh hơn, để chọn một đầu ra là “được ưa thích” và đầu ra kia là “không được ưa thích”.
Trong phần minh họa của hướng dẫn này, tôi sẽ tải một bộ dữ liệu theo sở thích từ Hugging Face và cấu trúc lại. Tôi sẽ dùng argilla/ultrafeedback-binarized-preferences, đây là một bộ dữ liệu theo sở thích, nhưng tôi chỉ lấy 50 hàng đầu tiên.
Ví dụ về bộ dữ liệu theo sở thích từ Hugging Face.
Một script Python là đủ để chuyển cấu trúc bộ dữ liệu sang định dạng tinh chỉnh của OpenAI, nhưng bạn có thể chọn cách tiếp cận khác tùy ứng dụng của mình.
Hãy đảm bảo định dạng bộ dữ liệu của bạn là
jsonlchứ không phảijson. Nhiều khả năng cuối tệp sẽ có một dòng trống, hãy xóa nó.Cách chạy tinh chỉnh theo sở thích của OpenAI
Khi đã chuẩn bị xong bộ dữ liệu, bạn có thể làm theo các bước sau để chạy tinh chỉnh theo sở thích:
OpenAI cho phép bạn chỉ định các siêu tham số, nhưng bạn cũng có thể để trống và hệ thống sẽ tự quyết định. Tùy vào kích thước bộ dữ liệu, quá trình huấn luyện có thể mất thời gian.
Kết luận
Tối ưu hóa sở thích trực tiếp là một tính năng hữu ích mới trong bộ công cụ tinh chỉnh của OpenAI, cho phép bạn kiểm soát rõ ràng tông giọng và phong cách phản hồi của mô hình, giúp nó phù hợp hơn với sở thích người dùng.
Cũng như chưng cất mô hình của OpenAI, tinh chỉnh tăng cường và tinh chỉnh có giám sát, đóng góp chính của bạn trong tinh chỉnh theo sở thích sẽ là chuẩn bị bộ dữ liệu đúng theo định dạng và cấu trúc của OpenAI, còn các công cụ của họ sẽ xử lý phần còn lại:
Để tìm hiểu thêm, tôi gợi ý các tài nguyên sau: