怎么在word里做網(wǎng)站百度競價代運營公司
微調(diào)模型是為了讓模型在特殊領(lǐng)域表現(xiàn)良好,幫助其學(xué)習(xí)到專業(yè)術(shù)語等。
本文采用llama_index框架微調(diào)BGE模型,跑通整個流程,并學(xué)習(xí)模型微調(diào)的方法。
已開源:https://github.com/stay-leave/enhance_llm
一、環(huán)境準(zhǔn)備
Linux環(huán)境,GPU L20 48G,Python3.8.10。
pip該庫即可。
二、數(shù)據(jù)準(zhǔn)備
該框架實現(xiàn)了讀取各種類型的文件,給的示例就是pdf。
因此準(zhǔn)備了一些網(wǎng)絡(luò)輿情相關(guān)的論文pdf,選擇70%作為訓(xùn)練數(shù)據(jù),剩下作為驗證數(shù)據(jù)。都放在data文件夾下。
三、微調(diào)腳本編寫
1.讀取數(shù)據(jù)
使用SimpleDirectoryReader類讀取文件。
讀取到文本后,使用SentenceSplitter將一個很長的文檔切分為若干塊。
每一塊設(shè)置的有token數(shù)和重疊token數(shù),在
可以自選,默認的chunk_size大小沒找到在哪,重疊的是200.
以上是庫的源碼實現(xiàn),我們調(diào)用是很簡單的。VAL_CORPUS_FPATH 我一開始以為是在load_corpus里的某個類自動保存,結(jié)果根本沒有。所以自己寫了導(dǎo)出為json的函數(shù),是將其text數(shù)據(jù)保存了。
# 源文件 列表
my_list = [i for i in os.listdir('project_2/data') if i.endswith('pdf')]
# 隨機抽取70%的數(shù)據(jù),作為訓(xùn)練集
random.shuffle(my_list) # 打亂
num_to_sample = int(len(my_list) * 0.7) # 閾值
# 構(gòu)造本地文件路徑
training_set = [f"project_2/data/{file}" for file in my_list[:num_to_sample]] # 訓(xùn)練集文件list
validation_set = [f"project_2/data/{file}" for file in my_list[num_to_sample:]] # 驗證集文件list# 最終形成的訓(xùn)練和驗證語料
TRAIN_CORPUS_FPATH = 'project_2/data/corpus/train_corpus.json'
VAL_CORPUS_FPATH = 'project_2/data/corpus/val_corpus.json'# 讀取pdf數(shù)據(jù),節(jié)點
def load_corpus(files, verbose=False):if verbose:print(f"正在加載文件 {files}")reader = SimpleDirectoryReader(input_files=files)docs = reader.load_data()if verbose:print(f"已加載 {len(docs)} 個文檔")parser = SentenceSplitter()nodes = parser.get_nodes_from_documents(docs, show_progress=verbose)if verbose:print(f"已解析