模型一開始是完全空白,對世界毫無知識,連英文單詞都無法構成
使用下一個詞預測(next token prediction)的訓練方式
使用大量零散的文字資料進行預訓練,通常從網路抓取而來的「無標籤」資料
使用自主監督學習法(self-supervised learning)
Fine-tuning 是在預訓練取得基礎語言能力後,使用標註資料訓練模型在特定任務上的專業知識。
預訓練得到通用基礎能力,Fine-tuning 將模型專業化
預訓練数据通常是從網路上抓取大量文本,包括網站、百科、書籍等資料,用於訓練模型對語言的基本理解。但是具體的数据來源公司通常不會公開,需要投入大量資源進行預訓練。這是訓練大型語言模型的基礎步驟。
預訓練模型具有語言理解能力,但不具備專業知識,很容易生成錯誤內容。要訓練出可以實際應用的專家級模型,仍需要在預訓練基礎上進行 Fine-tuning。
Extraction | Expansion |
---|---|
Image Not Showing
Possible Reasons
|
Image Not Showing
Possible Reasons
|
微調資料:與預訓練和基本準備進行比較
檢視資料集
# 用於以JSON行格式讀取和寫入資料
import jsonlines
import itertools
import pandas as pd
from pprint import pprint
# 導入HuggingFace的datasets函式庫,該庫提供了一系列用於機器學習的資料集和指標。
import datasets
from datasets import load_dataset
# 下載"c4"資料集(Common Crawl的網頁文本資料集)。
# "train"表示指定訓練資料集
# streaming=True。表示資料集將使用streaming傳輸、即時(real-time)下載,而不是一次性存儲在記憶體中。這對於大型資料集非常有用,以防止記憶體不夠的問題。
pretrained_dataset = load_dataset("c4", "en", split="train", streaming=True)
n = 5
print("Pretrained dataset:")
top_n = itertools.islice(pretrained_dataset, n)
pd.DataFrame(top_n)
與公司微調資料集進行對比
將預訓練資料集(來自網路爬蟲的非結構化未整理資料"common Crawl")與名為 "Lamini Docs" 的公司特定微調資料集進行了對比。這個資料集結構更加有序,包括與公司相關的問答對。
filename = "lamini_docs.jsonl"
instruction_dataset_df = pd.read_json(filename, lines=True)
instruction_dataset_df
各種格式化資料呈現的方法(Various ways of formatting your data_
"What are the different types of documents available in the repository (e.g., installation guide, API documentation, developer's guide)?Lamini has documentation on Getting Started, Authentication, Question Answer Model, Python Library, Batching, Error Handling, Advanced topics, and class documentation on LLM Engine available at https://lamini-ai.github.io/."
此模板可以包括標記,例如"###",以指示接下來的內容類型,例如問題
prompt_template_qa
prompt_template_qa = """### Question:
{question}
### Answer:
{answer}"""
question = examples["question"][0]
answer = examples["answer"][0]
text_with_prompt_template = prompt_template_qa.format(question=question, answer=answer)
text_with_prompt_template
"### Question:\nWhat are the different types of documents available in the repository (e.g., installation guide, API documentation, developer's guide)?\n\n### Answer:\nLamini has documentation on Getting Started, Authentication, Question Answer Model, Python Library, Batching, Error Handling, Advanced topics, and class documentation on LLM Engine available at https://lamini-ai.github.io/."
prompt_template_q
prompt_template_q = """### Question:
{question}
### Answer:"""
num_examples = len(examples["question"])
finetuning_dataset_text_only = []
finetuning_dataset_question_answer = []
for i in range(num_examples):
question = examples["question"][i]
answer = examples["answer"][i]
text_with_prompt_template_qa = prompt_template_qa.format(question=question, answer=answer)
finetuning_dataset_text_only.append({"text": text_with_prompt_template_qa})
text_with_prompt_template_q = prompt_template_q.format(question=question)
finetuning_dataset_question_answer.append({"question": text_with_prompt_template_q, "answer": answer})
pprint(finetuning_dataset_text_only[0])
{'text': '### Question:\n'
'What are the different types of documents available in the '
"repository (e.g., installation guide, API documentation, developer's "
'guide)?\n'
'\n'
'### Answer:\n'
'Lamini has documentation on Getting Started, Authentication, '
'Question Answer Model, Python Library, Batching, Error Handling, '
'Advanced topics, and class documentation on LLM Engine available at '
'https://lamini-ai.github.io/.'}
存儲資料的常見方法:
存儲此類資料的最常見方法是使用JSON lines文件,通常帶有 ".jsonl" 擴展名。這些文件中的每一行都代表一個JSON對象。這種格式在機器學習社區中既高效又被廣泛接受。
with jsonlines.open(f'lamini_docs_processed.jsonl', 'w') as writer:
writer.write_all(finetuning_dataset_question_answer)
finetuning_dataset_name = "lamini/lamini_docs"
finetuning_dataset = load_dataset(finetuning_dataset_name)
print(finetuning_dataset)
DatasetDict({
train: Dataset({
features: ['question', 'answer', 'input_ids', 'attention_mask', 'labels'],
num_rows: 1260
})
test: Dataset({
features: ['question', 'answer', 'input_ids', 'attention_mask', 'labels'],
num_rows: 140
})})