paint-brush
Cách tinh chỉnh và tối ưu hóa GPT Assistants với OpenAItừ tác giả@weblabtechnology
6,611 lượt đọc
6,611 lượt đọc

Cách tinh chỉnh và tối ưu hóa GPT Assistants với OpenAI

từ tác giả WebLab Technology23m2023/05/03
Read on Terminal Reader

dài quá đọc không nổi

Weblab Technology chia sẻ thông tin chi tiết về việc tinh chỉnh các trợ lý GPT với OpenAI. Tìm hiểu cách quy trình này có thể nâng cao khả năng xử lý ngôn ngữ tự nhiên và cải thiện hiệu suất của các mô hình AI.
featured image - Cách tinh chỉnh và tối ưu hóa GPT Assistants với OpenAI
WebLab Technology HackerNoon profile picture
0-item
1-item
2-item


GPT gần đây đã nhận được rất nhiều sự cường điệu. Các giải pháp dựa trên GPT có vẻ dễ triển khai — xét cho cùng, có thể đạt được kết quả đầu ra chất lượng cao chỉ bằng cách cung cấp hướng dẫn cho mô hình. Nó chắc chắn đủ tốt để gây ấn tượng với những người ra quyết định. Nhưng điều thực sự xảy ra là bạn đang trình bày những ví dụ đẹp mắt nhưng được lựa chọn cẩn thận. Và hơn thế nữa, hệ thống có thể yêu cầu độ tin cậy cao hơn để đi vào sản xuất.


Các doanh nghiệp hình dung các trường hợp sử dụng khác nhau cho GPT , một số trường hợp dựa vào giao tiếp cởi mở giữa GPT và người dùng.


Lấy những công cụ này làm ví dụ:


  1. ChatSpot. Truy vấn Ngôn ngữ tự nhiên chuyển đến API ChatSpot và được chuyển thành các hoạt động cho API HubSpot CRM, API Google Docs, v.v., sau đó trả lời bằng mô hình văn bản tổng quát khi hành động đã được thực hiện (hoặc không). Dựa trên GPT-4 .


  2. Khanmigo. Hướng dẫn hỗ trợ AI của Khan Academy. Yêu cầu của người dùng được chuyển thành lời nhắc với ngữ cảnh được đưa vào. Hệ thống dựa vào khả năng của GPT để xử lý ngữ cảnh được đưa vào nhiều hơn tới tám lần. Dựa trên GPT-4.


Chúng tôi biết rằng các doanh nghiệp và người dùng sẵn sàng sử dụng Truy vấn ngôn ngữ tự nhiên thay thế cho Giao diện người dùng. Tuy nhiên, để đảm bảo rằng các giải pháp AI đáng tin cậy và hiệu quả khi được đưa vào các ứng dụng trong thế giới thực, các mô hình dựa trên GPT phải được tinh chỉnh để thực sự áp dụng cho các trường hợp sử dụng và kiến thức miền cụ thể.


Điều quan trọng là GPT-4 cung cấp nhiều cơ hội hơn để cung cấp ngữ cảnh cho lời nhắc và có ít lỗi ảo giác hơn đáng kể.


ảo giác AI

Ảo giác AI là một thách thức nghiêm trọng mà các kỹ sư cần giải quyết khi làm việc với các mô hình ngôn ngữ lớn như GPT-4. Khi ảo giác tạo ra thông tin sai lệch hoặc gây hiểu nhầm, chúng có thể gây ra hậu quả cực kỳ nghiêm trọng trong các ứng dụng mà độ chính xác thực tế là tối quan trọng. Trong phần này, chúng ta sẽ khám phá chi tiết hơn các khía cạnh kỹ thuật của ảo giác AI và cũng thảo luận các chiến lược để giảm thiểu sự xuất hiện của chúng.


Để có một ví dụ nhanh, hãy xem xét bài kiểm tra vị kỷ này về độ chính xác thực tế do Noble Ackerson cung cấp.


Bạn sẽ phát hiện ra rất nhiều thông tin sai lệch trong số các sự kiện:



Ảo giác AI phát sinh chủ yếu do những hạn chế vốn có của kiến trúc máy biến áp cũng như dữ liệu đào tạo được sử dụng cho các mô hình ngôn ngữ lớn. Việc không có cấu trúc nhận thức cho phép lập luận suy diễn khiến các mô hình này có xu hướng tạo ra thông tin có vẻ hợp lý nhưng trên thực tế lại không chính xác.


Kiến trúc biến áp của các mô hình ngôn ngữ lớn dựa trên các cơ chế chú ý và tự chú ý để nắm bắt các phụ thuộc tầm xa trong dữ liệu đầu vào. Mặc dù điều này cho phép mô hình tạo ra văn bản nhất quán và phù hợp với ngữ cảnh, nhưng nó không đảm bảo độ chính xác thực tế . Ngoài ra, dữ liệu đào tạo có thể chứa các thành kiến hoặc thông tin sai lệch mà mô hình có thể vô tình học được và do đó, góp phần gây ra ảo giác AI.


bản chất xác suất


Một lý do cho sự thiếu tin cậy này có thể được tìm thấy trong bản chất xác suất của GPT. Đối với ngữ cảnh, hãy kiểm tra các cấu trúc dữ liệu xác suất, như bộ lọc Bloom, trong giây lát. Bộ lọc Bloom là một cấu trúc dữ liệu xác suất được sử dụng để kiểm tra xem một phần tử có phải là thành viên của một tập hợp bao gồm một mảng bit và nhiều hàm băm hay không, mỗi hàm ánh xạ một phần tử tới một hoặc nhiều chỉ số mảng.


Để chèn một phần tử vào bộ lọc, phần tử đó được băm bằng các hàm băm và các bit mảng tương ứng được đặt thành 1.


Để truy vấn xem một phần tử có trong bộ lọc hay không, phần tử đó được băm tương tự bằng cách sử dụng các hàm băm và nếu tất cả các bit tương ứng trong mảng được đặt thành 1, thì phần tử đó có khả năng nằm trong bộ lọc.


Tuy nhiên, nếu bất kỳ bit nào không được đặt thành 1, thì phần tử đó chắc chắn không có trong bộ lọc. Các kết quả dương tính giả được nhúng vào cấu trúc dữ liệu xác suất theo thiết kế.


Giống như bộ lọc Bloom, GPT cũng có xác suất cao. Nhưng thay vì kiểm tra tư cách thành viên của nhóm, nó tạo văn bản dựa trên lời nhắc đầu vào. GPT bao gồm nhiều lớp máy biến áp thực hiện các phép tính phức tạp để tạo chuỗi mã thông báo đầu ra dựa trên dấu nhắc đầu vào.


Đầu ra do GPT tạo ra không mang tính quyết định và có thể thay đổi rất nhiều dựa trên phương pháp lấy mẫu được sử dụng cũng như các siêu đường kính bổ sung được chọn trong quá trình đào tạo. Giống như bộ lọc Bloom, GPT cũng có thể “gây ảo giác” vì kết quả trả về có vẻ hợp lý ở cấp độ bề mặt nhưng thực tế lại không chính xác.


Tuy nhiên, có thể giảm xác suất tạo ra các đầu ra không đáng tin cậy này bằng cách tinh chỉnh mô hình và cung cấp cho nó dữ liệu huấn luyện chất lượng cao.


GPT-4 và Rủi ro

Sự không chính xác thực tế ẩn có thể rất có hại cho người dùng. Vì vậy, điều quan trọng là các nhà phát triển thực hiện các biện pháp để giảm khả năng xảy ra sự không chính xác.


GPT-4 chậm hơn và người dùng sẽ không nhận thấy sự khác biệt lớn trong các trường hợp thông thường khi so sánh với các thế hệ mô hình trước đó. Nói như vậy, GPT-4 an toàn hơn nhiều nhờ các biện pháp an toàn khác nhau được triển khai trong quá trình đào tạo, bao gồm cả sự tham gia của chuyên gia, các cải tiến về an toàn cho mô hình cũng như giám sát và thực thi bổ sung.


Các biện pháp giảm thiểu này đã cải thiện đáng kể các thuộc tính an toàn của GPT-4 so với GPT-3.5 , với xu hướng phản hồi các yêu cầu về nội dung không được phép của mô hình giảm 82% và mô hình phản hồi các yêu cầu nhạy cảm theo chính sách tăng 29%. [ tham khảo ]





Giảm ảo giác

Ngay cả khi có một số mức độ rủi ro, sẽ rất khó để bỏ qua hoàn toàn GPT. GPT đã trở thành một giao diện giao tiếp mới cho con người và các API được thiết lập để giảm nhu cầu về giao diện người dùng. Công việc của chúng tôi với tư cách là kỹ sư là tìm cách giải quyết các vấn đề phát sinh từ việc sử dụng nó thông qua các tài nguyên theo ý của chúng tôi. Và có một số cách để làm như vậy.


Kỹ thuật nhanh chóng

Lời nhắc cải thiện có thể nâng cao hiệu suất nhiệm vụ, dẫn đến kết quả khả quan trong khoảng 50% đến 65% thời gian, nhưng hiệu suất có thể không thường xuyên vượt quá phạm vi này.


Theo nghiên cứu về cách Mô hình ngôn ngữ lớn là Trình suy luận Zero-Shot (chỉ liên quan đến khả năng hoàn thành văn bản, không liên quan đến mô hình trò chuyện hoặc hướng dẫn), việc cải thiện lời nhắc sẽ nâng cao đáng kể hiệu suất của GPT đối với các tác vụ suy luận.


Nghiên cứu đã chứng minh rằng việc thêm một cụm từ đơn giản như “ Hãy suy nghĩ từng bước một ” trước mỗi câu trả lời có thể biến GPT thành một nhà suy luận giỏi về điểm chuẩn, vượt trội so với hiệu suất LLM không có điểm chuẩn đối với các nhiệm vụ suy luận điểm chuẩn khác nhau mà không cần dùng tay tạo ra các ví dụ vài shot.


Học ít lần là một kỹ thuật mạnh mẽ khác của kỹ thuật nhanh chóng có thể cải thiện đáng kể hiệu suất của các mô hình ngôn ngữ như GPT-4 trong các tác vụ mới, ngay cả khi chỉ tiếp tục có dữ liệu đào tạo hạn chế. Do đó, nó có thể là một giải pháp thay thế tốt để tinh chỉnh cho các trường hợp đơn giản hơn. Trong cách tiếp cận vài lần, người dùng sử dụng các ví dụ có cấu trúc để hiển thị những gì họ mong đợi và sau đó để lại khoảng trống cho mô hình điền vào.


Bạn có thể xem một bài viết về những điều mà ChatGPT chưa giải quyết được .


Tiêm ngữ cảnh

Chèn ngữ cảnh là một kỹ thuật có thể giúp giảm ảo giác AI và cải thiện độ chính xác của văn bản được tạo trên các miền cụ thể. Bằng cách đưa ngữ cảnh có liên quan vào lời nhắc đầu vào, mô hình được cung cấp thông tin chính xác hơn, cho phép mô hình tạo ra các phản hồi chính xác và phù hợp hơn.


Mặc dù phương pháp nhập ngữ cảnh nhanh hơn và rẻ hơn, nhưng nó cũng đòi hỏi kiến thức và chuyên môn về miền để có hiệu quả. Điều đó đang được nói, cách tiếp cận này có thể đặc biệt hữu ích trong các lĩnh vực mà độ chính xác và mức độ phù hợp của văn bản được tạo là rất quan trọng. Dự kiến phương pháp này sẽ được thực hiện trong bối cảnh doanh nghiệp như dịch vụ khách hàng và chẩn đoán y tế.


Chẳng hạn, trong ứng dụng chatbot dịch vụ khách hàng, việc đưa vào ngữ cảnh có thể liên quan đến việc cung cấp cho mô hình các chi tiết liên quan đến tài khoản của khách hàng, các tương tác trước đó và mọi vấn đề hoặc mối quan tâm đã biết. Ngữ cảnh được thêm vào cho phép mô hình tạo ra các phản hồi được cá nhân hóa và chính xác hơn, do đó cải thiện trải nghiệm tổng thể của người dùng.


Cả GitHub CopilotGitHub Copilot X đều phụ thuộc rất nhiều vào điều này trong quá trình triển khai của họ. Bằng cách nhập ngữ cảnh của mã đang được viết, cùng với bất kỳ nhận xét hoặc tài liệu nào, những trợ lý viết mã này có thể nắm bắt được các chức năng dự định và các ràng buộc của mã.


Chèn bối cảnh là cách đáng tin cậy nhất để giảm ảo giác cho đến nay, tuy nhiên, tồn tại một hạn chế chính liên quan đến kích thước lời nhắc.


 # Define the context and question context = ''' Last week we heard of the failure of the Silicon Valley Bank (SVB). And it is the 2nd largest bank to shut down in the US since 2000. While that is sad, miserable, and pathetic, I want to show you something under the hood — the real reason the bank failed. ''' question = "What is the reason for the failure of Silicon Valley Bank and when did it happen?" # Define prompts with and without context prompt_without_context = question prompt_with_context = f'''Context: """{context}""" Instructions: Using the provided context, write a comprehensive reply to the given query. Query: {question}''' # List of prompts to iterate over prompts = [ {"name": "Without context", "prompt": prompt_without_context}, {"name": "With context", "prompt": prompt_with_context}, ] for prompt_info in prompts: print(f"--- {prompt_info['name']} ---") print(f"Prompt: {prompt_info['prompt']}") response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt_info['prompt']}, ] ) # Extract the answer from the response answer = response.choices[0].message.content.strip() # Print the answer print(f"Answer: {answer}\n")



 --- Without context --- Prompt: What is the reason for the failure of Silicon Valley Bank and when did it happen? Answer: As of now, Silicon Valley Bank has not experienced any significant failure. Silicon Valley Bank, founded in 1983, is a successful and high-performing financial institution that specializes in offering banking services to technology and life science companies and venture capital firms. The bank has grown consistently and continues to operate effectively, serving its clients and staying relevant in the industry.



 --- With context --- Prompt: Context: """ Last week we heard of the failure of the Silicon Valley Bank (SVB). And it is the 2nd largest bank to shut down in the US since 2000. While that is sad, miserable, and pathetic, I want to show you something under the hood — the real reason the bank failed. """ Instructions: Using the provided context, write a comprehensive reply to the given query. Query: What is the reason for the failure of Silicon Valley Bank and when did it happen? Answer: Silicon Valley Bank (SVB) failed last week, making it the 2nd largest bank to shut down in the US since 2000. The precise reasons behind the bank's failure have not been provided in the given context, but it is implied that there is a significant underlying cause for its collapse. To fully understand the situation, it would be helpful to obtain more information about the bank's performance, financial stability, and any recent events that may have contributed to the failure.


tinh chỉnh

Tinh chỉnh là một kỹ thuật khác có thể giúp cải thiện đáng kể độ chính xác và độ tin cậy của GPT. Tinh chỉnh là quá trình cung cấp dữ liệu đào tạo bổ sung để mô hình thích ứng với nhiệm vụ hoặc miền cụ thể, đồng thời cải thiện độ chính xác và mức độ phù hợp của văn bản được tạo. Động lực thực sự không khác mấy so với bất kỳ mạng lưới thần kinh học sâu nào khác.


Quá trình này yêu cầu dữ liệu dành riêng cho miền liên tục được đưa vào mô hình được đào tạo trước cho đến khi mô hình học cách tạo văn bản chính xác và phù hợp hơn cho tác vụ đích.


Học tăng cường từ phản hồi của con người (RLHF)

RLHF cực kỳ hữu ích trong việc làm cho ChatGPT trở nên tuyệt vời. Xem Leandro von Werra yêu cầu ChatGPT giải thích RLHF cho chúng tôi; nó đã làm một công việc thực sự tuyệt vời!





Như bạn có thể đã phát hiện ở trên, một mẹo nhỏ là thêm “like I am five”, v.v. là một cách tuyệt vời để đơn giản hóa lời giải thích.


RLHF là một phương pháp mạnh mẽ có thể được sử dụng để nâng cao hiệu suất và độ an toàn của các mô hình dựa trên GPT. Mô hình được tinh chỉnh thông qua phản hồi do con người tạo ra, giúp mô hình học hỏi từ các ví dụ trong thế giới thực và tương tác của người dùng. Quá trình này bao gồm việc thu thập tập dữ liệu gồm các câu trả lời do mô hình tạo cùng với điểm chất lượng do con người xếp hạng hoặc phép so sánh, được sử dụng để tối ưu hóa các tham số của mô hình.


RLHF đã được sử dụng thành công trên một số ứng dụng trong thế giới thực, bao gồm chatbot và trợ lý AI, để cải thiện chất lượng phản hồi cũng như giảm sự xuất hiện của ảo giác AI. Bằng cách kết hợp phản hồi của con người vào quy trình đào tạo, RLHF dạy mô hình tạo ra các phản hồi chính xác hơn, phù hợp với ngữ cảnh và an toàn hơn, cuối cùng dẫn đến trải nghiệm người dùng tốt hơn và tăng độ tin cậy. Điều quan trọng là cách tiếp cận này cho phép các nhà phát triển khai thác sức mạnh của các mô hình dựa trên GPT đồng thời giải quyết các mối lo ngại liên quan đến việc tạo thông tin sai lệch hoặc gây hiểu lầm.


Miễn là chúng ta biết miền, chúng ta có thể huấn luyện mô hình để đáp ứng nhu cầu của chúng ta. Chúng ta có thể huấn luyện nó trả lời “Tôi không biết” hoặc bỏ qua một số chủ đề nhất định. OpenAI đang sử dụng RLGH trên các mô hình thô của nó để làm cho chúng sẵn sàng sản xuất.


Dưới đây là một số kết quả mẫu:




Thiết kế mô hình

Hãy đi sâu vào một ví dụ thực tế bằng cách xây dựng quy trình tinh chỉnh cho GPT. Chúng tôi sẽ đào tạo mô hình bằng cách sử dụng tập dữ liệu đã xác định, từ đó dạy mô hình trả lời các truy vấn liên quan đến miền cụ thể đó.


Xét sơ đồ sau:



Quá trình này bao gồm các thành phần sau:


  1. Bộ dữ liệu nguồn : Tập hợp các tệp đào tạo dành riêng cho miền được đề cập.
  2. Q&A Generator : Một giải pháp dựa trên GPT-4 sử dụng tính năng chèn ngữ cảnh để tạo câu hỏi và câu trả lời từ tập dữ liệu nguồn.
  3. Q&A Samples : Dữ liệu huấn luyện được sử dụng để tinh chỉnh mô hình.
  4. Tinh chỉnh : Mô hình hoàn thành văn bản GPT-3 được điều chỉnh dựa trên tập dữ liệu.
  5. Benchmark Q&A : Một bộ câu hỏi và câu trả lời được sử dụng để đánh giá hiệu suất của mô hình.
  6. Đo điểm chuẩn : Tinh chỉnh quy trình nhập câu hỏi từ Hỏi & Đáp Điểm chuẩn và đánh giá tính hợp lệ của các câu trả lời được tạo.


Chúng tôi tiếp tục sử dụng mô hình hoàn thành văn bản GPT-3 vì GPT-4 hiện không hỗ trợ quy trình tinh chỉnh.


Bộ dữ liệu nguồn

Để đảm bảo rằng GPT không quen thuộc với tập dữ liệu mà chúng tôi muốn sử dụng, lý tưởng nhất là chúng tôi nên dựa trên dữ liệu liên quan đến các sự kiện sau tháng 9 năm 2021, ngày giới hạn kiến thức của GPT.


Ví dụ: tôi thường sử dụng Next.js để xây dựng các ứng dụng web và Vercel đã phát hành Next.js phiên bản 13 vào năm 2022. Để xác minh điều này, hãy hỏi ChatGPT về ngày phát hành của Next.js 13 và xem nó có thể lấy thông tin gì trên chủ thể:




Tốt! Mục tiêu của tôi là mô hình kết quả biết nhiều hơn về Next.js 13 và cách làm việc với nó hơn mô hình hiện tại này. Bạn có thể đọc về cách tôi chuẩn bị tập dữ liệu dựa trên next.js 13 bài đăng trên blog tại đây:





Trình tạo mẫu

Trong các câu trả lời của nó, chúng tôi muốn mô hình của mình trả lời các câu hỏi (truy vấn) ở định dạng mở. Hiện tại, chỉ có các mẫu Hoàn thành văn bản hỗ trợ tinh chỉnh. Vì vậy, chúng tôi sẽ phải đào tạo các mô hình Hoàn thành văn bản để trả lời các câu hỏi của chúng tôi. Để đảm bảo kết quả phù hợp, trước tiên chúng ta phải chuyển đổi tập dữ liệu thành tập hợp các câu hỏi và câu trả lời. Chúng tôi có thể làm điều này bằng mô hình ChatGPT.


Đây là một mẫu mã:


 def generate_qa(filepath): article = read_file(filepath)[:MAX_CONTENT_LENGTH] content = f'''Content for {filepath}: {article} Instructions: Generate question and answer based on Content for {filepath}. Structure it as: Q: <question> A: <answer> ''' questions_answers = [] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful software developer who specialize in next.js and react."}, {"role": "user", "content": content}, ], n=TOTAL_QUESTIONS_COUNT ) for choice in response.choices: qa = extract_qa_from_content(choice.message.content.strip()) questions_answers.extend(qa) return questions_answers


Toàn bộ giải pháp có thể được tìm thấy ở đây .


Chúng tôi tìm cách tạo ít nhất 100 cặp câu hỏi-câu trả lời cho mỗi tệp đào tạo.

Đầu ra nên được lưu trong tài liệu JSONL . Điều quan trọng là phải chấm dứt từng lời nhắc với cùng một mẫu. Chúng tôi sẽ kết thúc bằng \n\n###\n\n làm dấu phân cách. Bạn có thể tìm thấy tập dữ liệu kết quả trong tệp này tại đây: fine_tuning_dataset.jsonl .


Nhập câu hỏi sai

Chúng tôi muốn mô hình trả lời thực sự “Tôi không biết” đối với bất kỳ câu hỏi nào không liên quan đến phát triển phần mềm và next.js. Chúng tôi có thể đạt được điều này bằng cách tích hợp bộ phân loại câu hỏi next.js để kiểm tra xem câu hỏi có liên quan đến next.js hay không. Ngoài ra, nếu chúng tôi muốn có một kiến trúc đơn giản, chúng tôi có thể thêm dữ liệu đào tạo bổ sung vào quy trình tinh chỉnh của mình.


Ngoài ra, ngay cả khi câu hỏi liên quan đến next.js, chúng tôi không muốn hệ thống của mình trả lời những câu hỏi vô nghĩa như: “Khi nào khung next.js sẽ đạt 1 tỷ người dùng?” Chúng tôi muốn người mẫu trả lời câu hỏi này bằng câu “Tôi không biết.”


Mẫu mã:

 NON_NEXTJS_Q_A_PROMPT = """Create a series of random questions and answers that are not related to the Next.js framework. Each question should be followed by a clear answer stating that it is not relevant to Next.js. For example: <question>What is the capital of Ukraine?</question> <answer>This question is not related to Next.js.</answer> <question>What is Spring Framework?</question> <answer>It is not related to Next.js.</answer> Feel free to generate any type of questions you like, as long as the answer indicates that it is not related to the Next.js framework.""" def generate_random_qa(prompt): questions_answers = [] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful software developer who specialize in next.js and react."}, {"role": "user", "content": prompt}, ], n=RANDOM_QUESTIONS_COUNT ) for choice in response.choices: qa = extract_qa_from_content(choice.message.content.strip()) questions_answers.extend(qa) return questions_answers



Tôi đã tạo 100 câu hỏi và câu trả lời để hiển thị mô hình mà chúng tôi muốn nó chỉ trả lời bất kỳ câu hỏi nào liên quan đến Next.js và hoàn toàn ổn khi trả lời "Tôi không biết" để giảm ảo giác. Tập dữ liệu đào tạo kết quả được liệt kê ở đây trong tinh chỉnh dataset.jsonl .


tinh chỉnh

Cuối cùng, sau khi đã tạo tập dữ liệu huấn luyện (để biết thêm chi tiết về quy trình này, hãy xem hướng dẫn chính thức từ OpenAI ), chúng tôi đã sẵn sàng để tinh chỉnh.


Đáng buồn thay, không có nhiều mô hình mà chúng tôi có thể tinh chỉnh từ đó. Bạn có thể xem tất cả chúng bằng cách kéo lên danh sách tất cả các mô hình openai api models.list' with '“allow_fine_tuning”: true, .


Trong quá trình tinh chỉnh, chúng tôi có thể chơi với tốc độ học tập, v.v., nhưng theo kinh nghiệm của tôi, nó không thực sự ảnh hưởng đến điểm kết quả. Và việc đào tạo tập dữ liệu thực có thể đã tốn kém, vì vậy việc chơi với các tham số bổ sung có thể không đáng.


Độ dài của quá trình tinh chỉnh phụ thuộc vào kiểu máy (davinci, ada, v.v.). Trên bộ dữ liệu gồm 1511 trường hợp và 907 KB của chúng tôi, quá trình này mất khoảng một giờ.


điểm chuẩn

Hãy nhớ rằng chúng tôi đang làm việc với mô hình Hoàn thành văn bản, không phải mô hình Trò chuyện hoặc Hướng dẫn. Và mô hình Hoàn thành văn bản của chúng tôi được điều chỉnh để phản hồi bằng cách sử dụng định dạng câu trả lời. Ngoài ra, mô hình của chúng tôi đợi dấu nhắc đầu vào kết thúc bằng ?\n\n###\n\n . Nếu không, đầu ra có thể không mong muốn, nhưng rất có thể mô hình sẽ cố gắng tạo một số nội dung để hoàn thành lời nhắc với bộ kết thúc lời nhắc.


Hãy thử ước tính xem mô hình sẽ hoạt động như thế nào với các bộ câu hỏi sau.


Tập 1. Câu hỏi đúng

Chúng tôi hy vọng mô hình sẽ đưa ra phản hồi phù hợp dựa trên nội dung được cung cấp:


 proper_questions = [ "When Next.js 13 was released?", "Is Next.js 14 already released?", "How Next.js 13 is different from Next.js 12?", "How routing is different in Next.js 13 compared to Next.js 12?", "How to prevent Next.js file component from using React Server Components?", "What is Turbopack?" ]


Tôi đã thực hiện hai lần chạy mô hình cho những câu hỏi này với nhiệt độ = 0,3.


Danh sách các câu trả lời đúng:

 #1 Q: When Next.js 13 was released? A: Next.js 13 was released on October 2022. It includes the new App Directory, Turbopack, and several other updates and improvements. #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 has been rebuilt from the ground up to be faster and more reliable. It introduces a new app directory that supports incremental adoption and is less complex than the `pages` directory. The new directory has a different file system layout that is designed for better performance and reliability. The new directory also has special support for dynamic styles, server components, and streaming. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: In Next.js 13, the `app` directory replaces the `pages` directory. This means that routing is handled via the file path each `page.tsx` is located in. Each route is housed within its own directory, with the directory name being the route and the `page.tsx` being its index that gets rendered at that route.


Danh sách các câu trả lời đúng một phần:

 #2 Q: Is Next.js 14 already released? A: No, Next.js 14 is not released yet. It will be released in the coming months. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, we can add the following code at the top of the file:


// @supports máy chủ phản ứng // nhập ClientComponentHere


 This code tells Next.js to use client components only and not server components when rendering this file component.


Tôi sẽ cho 1 cho câu trả lời đúng, 0 cho câu trả lời đúng một phần và -2 cho câu trả lời sai.


Tôi đã thực hiện hai lần chạy mô hình cho những câu hỏi này với nhiệt độ = 0,7.

Danh sách các câu trả lời đúng:

 #2 Q: Is Next.js 14 already released? A: No, Next.js 14 is not released yet. This blog post is about the new features coming to Next.js 13 with React 18. #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 has several new features, including the `app` directory, layouts, error components, loading components, and server components. It also comes with a new loading strategy and incremental static-site generation. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: Routing in Next.js 13 no longer requires a `pages` directory. Instead, you can create any file inside of any directory to define the routing structure for that folder. Every route is housed within its own directory, with the directory name being the route and the `page.tsx` being its index render at that route. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, you can add the following code at the top of the file:


"sử dụng máy khách";

 #6 Q: What is Turbopack? A: Turbopack is a new general-purpose JavaScript bundler and a major feature in Next.js 13. It is intended as a Webpack replacement, and although it's released as alpha, you can use Turbopack now as the dev-mode bundler from Next.js 13 forward. Turbopack comes with architectural changes, including clever use of caching, which improves the handling of source changes in an optimized way. #1 Q: When Next.js 13 was released? A: Next.js 13 was released in October 2022. #2 Q: Is Next.js 14 already released? A: No. Next.js 14 is still in beta, but with the release of Next.js 13.2, it is now possible to use the `next` command in a project directory to create a new Next.js application using the latest version. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: Routing in Next.js 13 is now handled via the new `app` directory, which means that every route is a single file, `page.js`. Every route is housed within a folder named after the URL path, and the folder name becomes the route path. For example, `app/profile/settings/page.js` is the file that controls the `/profile/settings` route. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, you can add the following code at the bottom of the file:


// Tệp này được sử dụng với chức năng mặc định xuất kết xuất của máy chủ ServerComponent { // ... }


 If you don't add this code, the file component will use the React Server Components by default. #6 Q: What is Turbopack? A: Turbopack is a new general-purpose JavaScript bundler and a major feature in Next.js 13. Using the Turbopack alpha with Next.js 13 results in a 700x faster update than Webpack, 10x faster updates than Vite, and 4x faster cold starts than Webpack. Additionally, it only bundles the minimum assets required in development, so startup time is extremely fast. Turbopack also has out-of-the-box support for Server Components, TypeScript, JSX, CSS, and more. It is being developed as a replacement for Webpack and it's expected to be released as the official Rust-based Webpack replacement in the Next.js 13 stable release.


Danh sách các câu trả lời đúng một phần:

 #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 is different from Next.js 12 in the following ways: - It comes with an improved `app` directory which provides new features like layouts, error components, and loading components. - It introduces the `loading.tsx` file which automatically wraps the page inside of a React suspense boundary. - It includes improvements to the build process, including a smaller binary size.


Danh sách các câu trả lời sai:

 #1 Q: When Next.js 13 was released? A: Next.js 13 was released in November of 2020.


Bạn có thể nhận thấy rằng mô hình vẫn có thể bị ảo giác ở nhiệt độ cao. Hãy xem phản hồi “Next.js 13 được phát hành vào tháng 11 năm 2020.”


Dựa trên hai lần chạy nhiệt độ khác nhau, chúng ta có thể thấy rằng nếu muốn trợ lý của mình chính xác hơn, chúng ta cần giảm nhiệt độ. Do đó, chúng tôi sẽ sử dụng nhiệt độ 0,3 cho tất cả các bài kiểm tra sau và giữ điểm theo dõi là 12/10. Bạn cũng nên đặt nhiệt độ thành 0,3 để làm cho bất kỳ đầu ra nào ổn định hơn và để đầu vào có thể được phát lại.


Phần 2. Câu hỏi ngoài phạm vi

Chúng tôi đã đào tạo mô hình của mình để chỉ trả lời các câu hỏi kỹ thuật về JavaScript, Next.js và React.


 out_of_scope_questions = [ "What is the population of the United States?", "How to cook a steak?", "What is native vector database?", "Could you please generate a random number?", "What is a space-time continuum?", ]


Danh sách các câu trả lời đúng:

 #1 Q: What is the population of the United States? A: This question is not related to Next.js. #2 Q: How to cook a steak? A: This question is not related to Next.js. #5 Q: What is a space-time continuum? A: This question is not related to Next.js. #1 Q: What is the population of the United States? A: This question is not related to Next.js. #2 Q: How to cook a steak? A: I do not know. #5 Q: What is a space-time continuum? A: This question is not related to Next.js.


Danh sách các câu trả lời đúng một phần:

 #3 Q: What is native vector database? A: Native vector database is a new feature in Next.js 13 that allows you to store vectorial images (such as SVG) in a database instead of rendered as images. This feature is available in Next.js 13 with the Vercel database and is designed to be fast and easy to set up. #4 Q: Could you please generate a random number? A: Yes, I can generate a random number. #3 Q: What is native vector database? A: Native vector database is a new feature in Next.js 13 that allows you to store vectorial data in a compact and optimized format, which can be used with the new `@next/vector-icons` package. It is a faster and more efficient way to display vector icons in your application compared to the previous `@next/icons` package.


Một câu trả lời không chính xác:

 #4 Q: Could you please generate a random number? A: Sure. Here you go:

npm chạy tạo

 This will generate a random number in the range of 1 to 10.


Hầu hết, mô hình hoạt động tốt, nhưng nó vẫn có thể gây ảo giác. Điểm số là 4/10. Ở đây chúng tôi đang làm tệ hơn nhiều so với các câu hỏi thích hợp.


Đặt 3. Truy vấn không chính xác

Chúng tôi đã đào tạo mô hình của mình để hoàn thành câu trả lời với các câu hỏi. Nhưng nếu chúng ta cố gắng thêm một cái gì đó ngẫu nhiên thì sao? Chuẩn bị cho một cái gì đó kỳ lạ.


 not_questions = [ "Generate Next.js index page", "Suggest how no name next.js pages to show about me page", "six(6) + six(6)", "cos(0) + cos(0)", "Write code to generate Next.js index page", "Aaaaaughibbrgubugbugrguburgle!?", "Mmmm mrrrggk", ] process_questions(not_questions, is_accumulate = False)


Danh sách các câu trả lời đúng:

 #3 Q: six(6) + six(6) A: This is not a valid mathematical expression. #6 Q: Aaaaaughibbrgubugbugrguburgle!? A: I do not understand. #7 Q: Mmmm mrrrggk A: I do not understand. #6 Q: Aaaaaughibbrgubugbugrguburgle!? A: I have no idea what that means. #3 Q: six(6) + six(6) A: This is not a valid mathematical expression.


Danh sách các câu trả lời đúng một phần:

 #1 Q: Generate Next.js index page A: Generate a Next.js `index.js` file with the given directory path.


Danh sách các câu trả lời sai:

 #2 Q: Suggest how no name next.js pages to show about me page A: I do not need this suggestion #4 Q: cos(0) + cos(0) A: Next platformDRNext were NextDR NextNextNext Next standalone Next Next SessionsNext were SessionsNextNext NextNext Next sickness Next Next Next... #5 Q: Write code to generate Next.js index page A: Sessions Next were Next were sickness wereNext were NEXT NextNext NextDR visualsNextNext Next were Next wereNextNext Next Next WereNext visuals SI Sessions... #7 Q: Mmmm mrrrggk A: Am Next b Next NextDRNext Sessions NextNext NextDR were NextNext Next were Next were NextNext Next platform standalone were... #1 Q: Generate Next.js index page A: This command will generate an index.js file inside the `pages/` directory. You can then use this file to render the index page of your app. #2 Q: Suggest how no name next.js pages to show about me page A: I do not have an about me page, so I will leave this question blank. #4 Q: cos(0) + cos(0) A: This expression is not a constant expression. #5 Q: Write code to generate Next.js index page A: Next.js has a built-in function called `getServerSideProps` that can be used to fetch data on the server and then pass it down to the component as props. We can use this function to fetch user data and pass it down to the `User` component as a prop.


 export default function User({ user }) { return <h1>User: {user.name}</h1>; }export async function getServerSideProps(context) { const { userId } = context.params; const res = await fetch(https://api.example.com/users/${userId}); const user = await res.json();


Tỷ số cuối cùng là -11/14, về cơ bản là 0/14. Mô hình này hoàn toàn tồi tệ bất cứ khi nào chúng ta không đặt câu hỏi đúng cách.


Đánh giá OpenAI

OpenAI có mã nguồn mở Đánh giá OpenAI , một khung phần mềm tạo điều kiện thuận lợi cho việc tạo và thực hiện các điểm chuẩn để đánh giá các mô hình và kiểm tra từng mẫu hiệu suất của chúng. Đánh giá được OpenAI sử dụng để chỉ đạo sự phát triển của các mô hình của họ thông qua việc phát hiện các điểm yếu và ngăn chặn hồi quy. Đổi lại, chúng tôi có thể sử dụng Đánh giá để theo dõi hiệu suất trên các phiên bản mô hình và phát triển tích hợp sản phẩm.


OpenAI Evals hoạt động với cả mô hình trò chuyện và không trò chuyện, nhưng vì OpenAI tập trung vào các mô hình trò chuyện nên bạn sẽ cần chuẩn bị một tập dữ liệu để đánh giá ở định dạng đầu vào dựa trên trò chuyện. Hôm nay, bạn có thể bắt đầu bằng cách sử dụng modelspec_extra_options trong CLI 'oaieval' để kiểm soát các tham số mô hình. Cố gắng đặt nhiệt độ thành 0 để có được kết quả có thể dự đoán được.


Các vòng tiếp theo trong quá trình tinh chỉnh

Dữ liệu là trung tâm của quá trình tạo ra một mô hình hoạt động tốt và đáng tin cậy. Rõ ràng là mô hình mà chúng tôi hiện có cho bot QA khung Next.js 13 vẫn chưa sẵn sàng để đưa vào sản xuất. Chúng tôi cần phát triển tập dữ liệu quay vòng và hướng dẫn mô hình tốt hơn cách trả lời các câu hỏi ngoài miền bằng cách sử dụng nhiều mẫu hơn. Chúng ta nên tạo một sổ đăng ký Eval và theo dõi mô hình của chúng ta hiện đang hoạt động tốt như thế nào.


Hơn nữa, chúng tôi cũng có thể muốn đào tạo mô hình của mình để xử lý các đầu vào ở định dạng không có câu hỏi và nếu chúng tôi chuẩn bị đưa nó vào sản xuất, lý tưởng nhất là tập dữ liệu của chúng tôi cũng nên có một vài kho lưu trữ mẫu mã. Phần này chiếm khoảng 60% toàn bộ quá trình tinh chỉnh. Ngoài ra, chúng tôi có thể cần thêm RLHF để chuẩn bị cho mô hình trả lời một số câu hỏi nhất định theo cách chúng tôi muốn.


Điểm hay của các mô hình tinh chỉnh là chúng liên tục được tinh chỉnh. Vì vậy, một người có thể điều chỉnh nhiều lần, mặc dù cần lưu ý rằng việc tinh chỉnh có thể ảnh hưởng đến kết quả đã điều chỉnh trước đó, vì vậy luôn phải có lý do chính đáng để làm như vậy, điều này cũng giúp giảm chi phí và thời gian đào tạo.


Cuối cùng, chúng ta nên nhớ rằng chúng ta đang xây dựng trên một mô hình đã được đào tạo và khả năng học tập của mô hình tinh chỉnh tương đối hạn chế. Nếu phạm vi miền của chúng ta không quen thuộc lắm với mô hình GPT cơ bản, thì tốt hơn là sử dụng tính năng chèn ngữ cảnh ở một số dạng vì việc tinh chỉnh có thể không đủ hoặc thậm chí không cần thiết.


Và một vài sự thật đơn giản cuối cùng đáng nói:


  • Tinh chỉnh hoạt động tuyệt vời cho các tác vụ phân loại tương đối đơn giản.
  • Trước tiên, hãy thử sử dụng các mô hình nhỏ hơn, như Ada. Chúng thực hiện các yêu cầu nhanh hơn và ổn định hơn, rẻ hơn, đào tạo nhanh hơn và vận hành rẻ hơn.
  • Đừng xây dựng các mô hình khổng lồ. Nếu tập dữ liệu của bạn “khủng” và có thể tách rời, thì hãy tạo nhiều tập dữ liệu và huấn luyện từng tập một cách riêng biệt.



Cũng được xuất bản ở đây.



Người giới thiệu

  1. https://github.com/vercel/next.js/tree/canary/docs
  2. https://openai.com/research/gpt-4
  3. https://towardsdatascience.com/chatgpt-insists-i-am-dead-and-the-problem-with-lingu-models-db5a36c22f11
  4. https://mpost.io/gpt-4-inherits-hallucinating-facts-and-reasoning-errors-from-earlier-gpt-models/
  5. https://arxiv.org/abs/2303.12712
  6. https://levelup.gitconnected.com/the-surprising-things-chatgpt-cant-do-yet-4362842da5b7
  7. https://digitalbunker.dev/under Hiểu-the-inner-workings-of-bloom-filters/
  8. https://huggingface.co/blog/rlhf


L O A D I N G
. . . comments & more!

About Author

WebLab Technology HackerNoon profile picture
WebLab Technology@weblabtechnology
We are remote developer team passionate about web application experiences, AI, and business automation since 2013.

chuyên mục

BÀI VIẾT NÀY CŨNG CÓ MẶT TẠI...