paint-brush
100 ngày của AI, Ngày 13: Cách tinh chỉnh hướng dẫn cải thiện LLM được đào tạo trướctừ tác giả@sindamnataraj
709 lượt đọc
709 lượt đọc

100 ngày của AI, Ngày 13: Cách tinh chỉnh hướng dẫn cải thiện LLM được đào tạo trước

từ tác giả Nataraj6m2024/03/06
Read on Terminal Reader

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

Tinh chỉnh lệnh là một kỹ thuật tinh chỉnh được sử dụng để chuyển đổi các mô hình cơ sở như GPT3 thành một sản phẩm giống như chat-gpt. Trong bài đăng này, chúng ta sẽ tìm hiểu cách sử dụng tinh chỉnh hướng dẫn để cải thiện các mô hình cơ sở.
featured image - 100 ngày của AI, Ngày 13: Cách tinh chỉnh hướng dẫn cải thiện LLM được đào tạo trước
Nataraj HackerNoon profile picture


Nè mọi người! Tôi là Nataraj cũng giống như bạn, tôi rất thích thú với những tiến bộ gần đây của trí tuệ nhân tạo. Nhận thấy rằng mình cần phải theo kịp mọi sự phát triển đang diễn ra, tôi quyết định bắt tay vào hành trình học tập cá nhân, do đó 100 ngày của AI đã được sinh ra! Với loạt bài này, tôi sẽ tìm hiểu về LLM và chia sẻ ý tưởng, thử nghiệm, ý kiến, xu hướng và bài học thông qua các bài đăng trên blog của mình. Bạn có thể theo dõi hành trình trên HackerNoon đây hoặc trang web cá nhân của tôi đây .


Trong một trong những bài viết trước, chúng ta đã nói về việc tinh chỉnh và tại sao nó lại quan trọng. Trong bài đăng này, chúng ta sẽ xem xét một loại tinh chỉnh cụ thể được gọi là Tinh chỉnh hướng dẫn.

Hạn chế của các mô hình cơ sở được đào tạo trước:

Các mô hình cơ sở được huấn luyện trước như gpt-3 được huấn luyện trên một lượng lớn dữ liệu. Trong trường hợp gpt-3, tất cả dữ liệu trên internet. Chà, chúng tôi không biết chắc chắn về điều đó nhưng hầu hết các mô hình này đều được đào tạo về dữ liệu quy mô internet sau khi dọn dẹp và định dạng thủ công đáng kể. Khi được đào tạo, các mô hình dựa trên sẽ học cách dự đoán mã thông báo tiếp theo và thực sự giỏi trong việc dự đoán mã thông báo. Nhưng dự đoán mã thông báo thuần túy không hữu ích như bạn nghĩ. Nếu bạn hỏi một mô hình cơ sở được đào tạo trước “ Thủ đô của Mexico là gì? ” nó sẽ không trả lời bằng câu trả lời nhưng có thể hoàn thành câu đầu vào bằng “ Thủ đô của Columbia là gì “. Vì vậy, mặc dù một mô hình như gpt-3 có khả năng dự đoán mã thông báo mạnh mẽ nhưng nó sẽ không hoạt động như một chatbot hoặc một phi công phụ. Vậy làm cách nào để chuyển đổi mô hình được đào tạo trước thành một chatbot hữu ích như chat-gpt? Câu trả lời là tinh chỉnh, chủ yếu là một loại tinh chỉnh cụ thể được gọi là “ Hướng dẫn tinh chỉnh “.

Tinh chỉnh hướng dẫn là gì?

Tinh chỉnh hướng dẫn còn được gọi là “làm theo hướng dẫn” là một quá trình hướng dẫn mô hình cơ sở được đào tạo trước hoạt động giống như một bot trò chuyện.

Hướng dẫn Tinh chỉnh


Tinh chỉnh lệnh cần các tập dữ liệu ở dạng câu hỏi và câu trả lời. Bạn có thể sử dụng tập dữ liệu công khai hoặc tập dữ liệu công ty của bạn ở dạng Hỏi & Đáp. Nếu tập dữ liệu của bạn không ở dạng Hỏi & Đáp, bạn có thể chuyển đổi dữ liệu thành Hỏi & Đáp bằng các kỹ thuật khác nhau như Alpaca hoặc sử dụng lời nhắc tùy chỉnh trên các LLM khác. Lưu ý rằng việc tinh chỉnh hướng dẫn cung cấp cho mô hình một hành vi mới để trả lời các câu hỏi không chỉ trên dữ liệu bạn sử dụng trong quá trình tinh chỉnh mà hành vi mới này có thể áp dụng cho kiến thức hiện có mà mô hình đã có, khiến việc tinh chỉnh trở thành một kỹ thuật mạnh mẽ.

Hướng dẫn Tinh chỉnh bằng Lamini:

Lamini là một công ty AI cho phép các nhà phát triển xử lý các mô hình ngôn ngữ một cách dễ dàng, loại bỏ sự phức tạp của việc lưu trữ, đào tạo và các khía cạnh phức tạp khác. Kiểm tra khả năng đầy đủ của nó ở đây . Chúng tôi sẽ sử dụng Lamini để đào tạo mô hình ngôn ngữ nhỏ có tên pythia , đây là một mô hình mã nguồn mở do Eleuther AI tạo ra và thực hiện hướng dẫn tinh chỉnh nó bằng cách sử dụng tập dữ liệu của công ty có tên là Alpaca.


Bước 1: Khởi tạo và tải tập dữ liệu Hướng dẫn Finetuning

Trong bước này, hãy khởi tạo mô-đun cần thiết và xem tập dữ liệu huấn luyện alpaca. Đây là mã.

 import itertools import jsonlines from datasets import load_dataset from pprint import pprint from llama import BasicModelRunner from transformers import AutoTokenizer, AutoModelForCausalLM from transformers import AutoModelForSeq2SeqLM, AutoTokenizer ## we are using alpaca data set, which is an open source fine tuning data set instruction_tuned_dataset = load_dataset("tatsu-lab/alpaca", split="train", streaming=True) m = 5 print("Instruction-tuned dataset:") top_m = list(itertools.islice(instruction_tuned_dataset, m)) for j in top_m: print(j)

Tập dữ liệu điều chỉnh lệnh trông như thế này. Nó chứa dữ liệu dưới dạng câu hỏi và câu trả lời.

Hướng dẫn tinh chỉnh tập dữ liệu


Bước 2: Hydrat hóa lời nhắc

Trong bước này, chúng tôi lấy dữ liệu từ nhóm alpaca và đưa chúng vào lời nhắc hiển thị bên dưới.

 prompt_template_with_input = """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. ### Instruction: {instruction} ### Input: {input} ### Response:""" prompt_template_without_input = """Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: {instruction} ### Response:""" ## hydrate prompts - meaning add data to the above prompts processed_data = [] for j in top_m: if not j["input"]: processed_prompt = prompt_template_without_input.format(instruction=j["instruction"]) else: processed_prompt = prompt_template_with_input.format(instruction=j["instruction"], input=j["input"]) processed_data.append({"input": processed_prompt, "output": j["output"]})

Sau khi thực hiện việc này, tập dữ liệu sẽ trông như sau.

Bộ dữ liệu ngậm nước


Về cơ bản, chúng tôi đang lấy dữ liệu Hỏi & Đáp thô và chuyển đổi sang định dạng phù hợp với LLM để khi được hỏi một câu hỏi, câu trả lời cho câu hỏi đó sẽ như thế nào. Chúng tôi thực hiện việc này nhiều lần và lưu trữ trong tệp jsonl .

 with jsonlines.open(f'alpaca_processed.jsonl', 'w') as writer: writer.write_all(processed_data)

Bước 3 – Đầu ra không được tinh chỉnh

Ở bước 1 & 2, chúng tôi đã tải dữ liệu thô và hydrat hóa nó rồi lưu trữ ở định dạng jsonl . Nhưng Lamini đã có sẵn dữ liệu ngậm nước này nên về mặt kỹ thuật, bước 1 & 2 là không cần thiết. Nhưng cần phải chứng minh để hiểu cách hoạt động của việc tinh chỉnh hướng dẫn. Trước tiên chúng ta hãy xem phiên bản chưa được tinh chỉnh của mô hình Pythia sẽ phản hồi như thế nào đối với một câu hỏi đơn giản.

 tokenizer = AutoTokenizer.from_pretrained("EleutherAI/pythia-70m") #70M parameter model that is not instruction tuned. model = AutoModelForCausalLM.from_pretrained("EleutherAI/pythia-70m") def inference(text, model, tokenizer, max_input_tokens=1000, max_output_tokens=100): # Tokenize input_ids = tokenizer.encode( text, return_tensors="pt", truncation=True, max_length=max_input_tokens ) # Generate device = model.device generated_tokens_with_prompt = model.generate( input_ids=input_ids.to(device), max_length=max_output_tokens ) # Decode generated_text_with_prompt = tokenizer.batch_decode(generated_tokens_with_prompt, skip_special_tokens=True) # Strip the prompt generated_text_answer = generated_text_with_prompt[0][len(text):] return generated_text_answer ## the 70M model doesnt have any company specific data, we will use the alpace data set from hosted on lamini and fine tune this model # load alpaca dataset finetuning_dataset_path = "lamini/lamini_docs" finetuning_dataset = load_dataset(finetuning_dataset_path) #print(finetuning_dataset) test_sample = finetuning_dataset["test"][0] print(test_sample) print("untrained output sample") print(inference(test_sample["question"], model, tokenizer))

Đây là đầu ra tôi nhận được. Bạn sẽ nhận thấy rằng kết quả đầu ra không hữu ích và mô hình đang cố gắng hoàn thành mã thông báo và không đưa ra câu trả lời thực tế.

Đầu ra không được tinh chỉnh


Bước 4 – Đầu ra được tinh chỉnh hướng dẫn

Sau khi chúng tôi sử dụng dữ liệu hỏi đáp ở bước trước để hướng dẫn tinh chỉnh, mô hình tương tự sẽ bắt đầu hoạt động giống như một bot trò chuyện và sẽ cung cấp câu trả lời chính xác hơn cho các câu hỏi của bạn cả trên dữ liệu đã được tinh chỉnh cũng như dữ liệu mà mô hình đã có bao gồm tắt. Nó gần giống như khi một đứa trẻ học một ngôn ngữ lần đầu tiên, giờ đây nó sẽ có thể bày tỏ những cảm xúc vốn có cùng với những điều mới mà chúng học được trong quá trình đào tạo ngôn ngữ. Giống như phiên bản đã được đào tạo trước của mô hình, mô hình đã tinh chỉnh hướng dẫn cũng được lưu trữ trên Lamini và có thể được suy ra bằng lệnh như hiển thị bên dưới. (Vâng, Lamini thật tuyệt!)

 ## finetuned output instruction_model = AutoModelForCausalLM.from_pretrained("lamini/lamini_docs_finetuned") print("instruction finetuned output") print(inference(test_sample["question"], instruction_model, tokenizer))

Đây là kết quả đầu ra sẽ như thế nào. Bạn sẽ lưu ý rằng thay vì những từ vô nghĩa mà chúng ta đã thấy ở bước trước, chúng ta có kết quả đầu ra chính xác hơn.

Hướng dẫn đầu ra của mô hình tinh chỉnh


Mục tiêu của bài đăng này là giới thiệu cách tinh chỉnh hướng dẫn và cách nó được sử dụng để biến các mô hình cơ sở thành các phiên bản dễ sử dụng hơn. Trong các bài đăng sau, tôi sẽ đi sâu vào quá trình thực tế thực hiện việc tinh chỉnh hướng dẫn.


Thế là xong Ngày thứ 13 trong 100 Ngày của AI.


Tôi viết một bản tin có tên Trên mức trung bình, nơi tôi nói về những hiểu biết sâu sắc thứ hai đằng sau mọi thứ đang diễn ra trong ngành công nghệ lớn. Nếu bạn làm trong lĩnh vực công nghệ và không muốn ở mức trung bình, hãy đăng ký theo dõi .


Theo dõi tôi trên Twitter , LinkedIn để biết thông tin cập nhật mới nhất về 100 ngày của AI. Nếu bạn làm trong lĩnh vực công nghệ, bạn có thể muốn tham gia cộng đồng các chuyên gia công nghệ của tôi tại đây .


Cũng xuất hiện ở đây .