Hub documentation
Distilabel
Distilabel
Distilabel là một framework cho dữ liệu tổng hợp và phản hồi AI dành cho các kỹ sư cần các pipeline nhanh, đáng tin cậy và có khả năng mở rộng dựa trên các bài báo nghiên cứu đã được kiểm chứng.
Distilabel có thể được sử dụng để tạo dữ liệu tổng hợp và phản hồi AI cho nhiều loại dự án khác nhau, bao gồm NLP dự đoán truyền thống (phân loại, trích xuất, v.v.) hoặc các kịch bản mô hình ngôn ngữ tạo sinh và lớn (tuân theo chỉ dẫn, tạo hội thoại, chấm điểm, v.v.). Cách tiếp cận lập trình của Distilabel cho phép bạn xây dựng các pipeline tạo dữ liệu và phản hồi AI có khả năng mở rộng. Mục tiêu của distilabel là đẩy nhanh quá trình phát triển AI của bạn bằng cách nhanh chóng tạo ra các bộ dữ liệu chất lượng cao và đa dạng dựa trên các phương pháp nghiên cứu đã được kiểm chứng để tạo và chấm điểm bằng phản hồi AI.
Mọi người xây dựng những gì với distilabel?
Cộng đồng Argilla sử dụng distilabel để tạo ra các dataset và mô hình tuyệt vời.
- 1M OpenHermesPreference là một tập dữ liệu gồm khoảng 1 triệu sở thích AI được tạo ra bằng cách sử dụng LLM teknium/OpenHermes-2.5. Đây là một ví dụ tuyệt vời về cách bạn có thể sử dụng distilabel để mở rộng quy mô và tăng tốc độ phát triển tập dữ liệu.
- dataset Intel Orca DPO của distilabeled được sử dụng để tinh chỉnh mô hình OpenHermes cải tiến. Dataset này được xây dựng bằng cách kết hợp việc tuyển chọn thủ công trong Argilla với phản hồi từ AI của distilabel, dẫn đến một phiên bản cải tiến của dataset Intel Orca và vượt trội hơn các mô hình được tinh chỉnh trên dataset gốc.
- dữ liệu DPO của haiku là một ví dụ về cách bất kỳ ai cũng có thể tạo ra một bộ dữ liệu tổng hợp cho một tác vụ cụ thể, sau khi được tuyển chọn và đánh giá, có thể được sử dụng để tinh chỉnh các LLM tùy chỉnh.
Yêu cầu tiên quyết
Trước tiên đăng nhập bằng tài khoản Hugging Face của bạn:
hf auth login
Hãy đảm bảo bạn đã cài đặt distilabel:
pip install -U distilabel[vllm]
Các pipeline của Distilabel
Các pipeline của Distilabel có thể được xây dựng với bất kỳ số lượng bước hoặc tác vụ nào có liên kết với nhau. Đầu ra của một bước hoặc tác vụ được đưa làm đầu vào cho một bước hoặc tác vụ khác. Một chuỗi các bước có thể được nối tiếp với nhau để xây dựng các pipeline xử lý và tạo dữ liệu phức tạp bằng LLM. Đầu vào của mỗi bước là một lô dữ liệu, chứa một danh sách các từ điển, trong đó mỗi từ điển đại diện cho một hàng của tập dữ liệu, và các khóa là tên các cột. Để đưa dữ liệu từ và đến Hugging Face hub, chúng tôi đã định nghĩa lớp Distiset như một sự trừu tượng hóa của datasets.DatasetDict.
Distiset dưới dạng đối tượng dataset
Một Pipeline trong distilabel trả về một kiểu đặc biệt của Hugging Face datasets.DatasetDict được gọi là Distiset.
Pipeline có thể xuất nhiều tập con trong Distiset, đây là một đối tượng giống từ điển với một mục cho mỗi tập con. Sau đó, một Distiset có thể được đẩy lên Hugging Face Hub một cách liền mạch, với tất cả các tập con nằm trong cùng một kho lưu trữ.
Nạp dữ liệu từ Hub vào một Distiset
Để minh họa một ví dụ về việc tải dữ liệu từ Hub, chúng ta sẽ tái hiện bài báo Prometheus 2 và sử dụng tác vụ PrometheusEval được triển khai trong distilabel. Các tác vụ Prometheus 2 và Prometheuseval là các tác vụ đánh giá trực tiếp và xếp hạng theo cặp, tức là đánh giá chất lượng của một phản hồi đơn lẻ cho một chỉ thị nhất định, có hoặc không có câu trả lời tham chiếu, và đánh giá chất lượng của một phản hồi so với phản hồi khác cho một chỉ thị nhất định, có hoặc không có câu trả lời tham chiếu, tương ứng. Chúng ta sẽ sử dụng các tác vụ này trên một tập dữ liệu được tải từ Hub, do đội H4 của Hugging Face tạo ra, có tên là HuggingFaceH4/instruction-dataset.
from distilabel.llms import vLLM
from distilabel.pipeline import Pipeline
from distilabel.steps import KeepColumns, LoadDataFromHub
from distilabel.steps.tasks import PrometheusEval
if __name__ == "__main__":
with Pipeline(name="prometheus") as pipeline:
load_dataset = LoadDataFromHub(
name="load_dataset",
repo_id="HuggingFaceH4/instruction-dataset",
split="test",
output_mappings={"prompt": "instruction", "completion": "generation"},
)
task = PrometheusEval(
name="task",
llm=vLLM(
model="prometheus-eval/prometheus-7b-v2.0",
chat_template="[INST] {{ messages[0]['content'] }}\n{{ messages[1]['content'] }}[/INST]",
),
mode="absolute",
rubric="factual-validity",
reference=False,
num_generations=1,
group_generations=False,
)
keep_columns = KeepColumns(
name="keep_columns",
columns=["instruction", "generation", "feedback", "result", "model_name"],
)
load_dataset >> task >> keep_columnsSau đó, chúng ta cần gọi pipeline.run với các tham số runtime để pipeline có thể được khởi chạy và dữ liệu có thể được lưu trữ trong đối tượng Distiset.
distiset = pipeline.run(
parameters={
task.name: {
"llm": {
"generation_kwargs": {
"max_new_tokens": 1024,
"temperature": 0.7,
},
},
},
},
)Đẩy một Distiset của distilabel lên Hub
Đẩy Distiset lên một kho Hugging Face, trong đó mỗi tập con sẽ tương ứng với một cấu hình khác nhau:
distiset.push_to_hub(
"my-org/my-dataset",
commit_message="Initial commit",
private=False,
token=os.getenv("HF_TOKEN"),
)📚 Tài nguyên
- 🚀 Tài liệu Distilabel
- 🚀 Tài liệu Distilabel - distiset
- 🚀 Tài liệu Distilabel - prometheus
- 🆕 Giới thiệu distilabel