telexyz / GPT4VN

Ai cũng có thể tự tạo chatbot bằng huấn luyện chỉ dẫn, với 12G GPU (RTX 3060) và khoảng vài chục MB dữ liệu
108 stars 35 forks source link

Tại sao không tách cặp question-answer khi train model #12

Open tuanio opened 1 year ago

tuanio commented 1 year ago

Em chào mọi người, gần đây em có tận dụng code này và code alpaca-lora gốc để thực hiện instruction fine-tuning cho GPT-J 6B của VietAI. Tuy nhiên em đọc code em thấy có một phần khá lạ, code này và code alpaca-lora đều đưa cả triplet instruction-input-output vào model luôn (input_ids và labels giống nhau) thay vì tách ra instruction-input và output riêng.

from prompt import make_prompt
def generate_prompt(data_point):
    question = data_point["prompt"].strip()
    answer = data_point["response"].strip()
    return f"{make_prompt(question)}\n{answer}"

Em đã thực hiện train model theo kiểu đưa cả 3 vào, nhưng lúc inference hoàn toàn không sử dụng được khi chỉ đưa instruction-input, em đã thử đưa cả instruction-input-output vào và đương nhiên nó sẽ predict ra giống hệt. Nhưng điều này hoàn toàn vô nghĩa khi mình không có output trước.

Mong các anh giải thích giúp em ạ.

tiendung commented 1 year ago

Vì cách sử dụng input trong Alpaca anh thấy nó hơi thừa: 1/ là số lượng input = None nhiều 2/ là giả sử như mình dùng giao diện chat, mình cũng đâu có trường tiêng để nhập input đâu, vì thế gắn input vào sau instruct để tạo prompt thì hợp lý hơn. Vậy nên anh format lại dữ liệu thành prompt và response.