精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從零開始微調Embedding模型:基于BERT的實戰教程

發布于 2025-4-14 01:31
瀏覽
0收藏

背景

在理解與學會了Naive RAG的框架流程后,就很自然地關注到embedding模型,與問題相關的文本召回,也有很多論文在做這方面的創新。

以前一直不知道embedding模型是如何微調出來的,一直聽說是微調BERT,但是不知道是怎么微調出來的。直到在B站上看到bge模型微調的視頻[參考資料4]才理解。

于是便想著自己也微調出一個 embedding模型。涉及到下面三個階段:

  • 數據集制作
  • 模型訓練
  • 評估

微調實戰

安裝包 

pip install -U FlagEmbedding[finetune]

項目基于 https://github.com/FlagOpen/FlagEmbedding,若遇到環境報錯,可參考該項目的環境,完成python環境設置

FlagEmbedding論文:C-Pack: Packed Resources For General Chinese Embeddings , 也稱 C-METB

介紹 

你可以閱讀參考資料[1]和[2],先嘗試實現一次官方的微調教程。

官方微調的模型是BAAI/bge-large-en-v1.5,我選擇直接微調BERT模型,這樣感受微調的效果更明顯。僅僅是出于學習的目的,我才選擇微調BERT,如果大家打算用于生產環境,還是要選擇微調現成的embedding模型。因為embedding模型也分為預訓練與微調兩個階段,我們不做預訓練。

embedding 模型需要通過encode方法把文本變成向量,而BERT模型沒有encode方法。故要使用FlagEmbedding導入原生的BERT模型。

from FlagEmbedding.inference.embedder.encoder_only.base import BaseEmbedder

# 省略數據集加載代碼

bert_embedding = BaseEmbedder("bert-base-uncased")
# get the embedding of the corpus
corpus_embeddings = bert_embedding.encode(corpus_dataset["text"])

print("shape of the corpus embeddings:", corpus_embeddings.shape)
print("data type of the embeddings: ", corpus_embeddings.dtype)

可瀏覽:eval_raw_bert.ipynb

項目文件介紹

數據集構建:

  • build_train_dataset.ipynb?: 構建訓練集數據,隨機采樣負樣本數據通過修改?neg_num?的值,構架了training_neg_10.json和training_neg_50.json兩個訓練的數據集,比較增加負樣本的數量是否能提高模型召回的效果(實驗結果表明:這里的效果并不好,提升不明顯)。
  • build_eval_dataset.ipynb: 構建測試集數據,評估模型召回的效果。與FlagEmbedding數據集構建結構不同,我個人用這種數據集樣式更方便,不需要像FlagEmbedding一樣從下標讀出正確的樣本的數據。

模型訓練:

  • finetune_neg10.sh
  • finetune_neg50.sh

finetune_neg10.sh的代碼如下:

torchrun --nproc_per_node=1 \
    -m FlagEmbedding.finetune.embedder.encoder_only.base \
    --model_name_or_path bert-base-uncased \
    --train_data ./ft_data/training_neg_10.json \
    --train_group_size 8 \
    --query_max_len 512 \
    --passage_max_len 512 \
    --pad_to_multiple_of 8 \
    --query_instruction_for_retrieval 'Represent this sentence for searching relevant passages: ' \
    --query_instruction_format '{}{}' \
    --output_dir ./output/bert-base-uncased_neg10 \
    --overwrite_output_dir \
    --learning_rate 1e-5 \
    --fp16 \
    --num_train_epochs 3 \
    --per_device_train_batch_size 4 \
    --warmup_ratio 0.1 \
    --logging_steps 200 \
    --save_steps 2000 \
    --temperature 0.02 \
    --sentence_pooling_method cls \
    --normalize_embeddings True \
    --kd_loss_type kl_div

bash finetune_neg10.sh > finetune_neg10.log 2>&1 & 把訓練的日志保存到 finetune_neg10.log 日志文件中,訓練用時6分鐘。

neg10代表每條數據10個負樣本,neg50代表每條數據50個負樣本。

評估:

評估是在所有語料上完成的評估,并不是在指定的固定數量的負樣本上完成的評估。由于是在全部語料上完成召回,故使用到了faiss向量數據庫。

  • eval_raw_bert.ipynb: 評估BERT原生模型
  • eval_train_neg10.ipynb: 評估基于10條負樣本微調后的模型
  • eval_train_neg50.ipynb: 評估基于50條負樣本微調后的模型
  • eval_bge_m3.ipynb: 評估 BAAI 現在表現效果好的 BGE-M3 模型

結論:通過評估結果,可看出BERT經過微調后的提升明顯,但依然達不到BGE-M3 模型的效果。

微調硬件配置要求 

微調過程中GPU顯存占用達到了9G左右

設備只有一臺GPU

debug 重要代碼分析【選看】

下述代碼是舊版本的代碼,不是最新的FlagEmbedding的代碼:

  • 視頻教程,bge模型微調流程:https://www.bilibili.com/video/BV1eu4y1x7ix/

推薦使用23年10月份的代碼進行debug,關注核心代碼。新版的加了抽象類與繼承,增加了很多額外的東西,使用早期版本debug起來更聚焦一些。

從零開始微調Embedding模型:基于BERT的實戰教程-AI.x社區

由于需要傳遞參數再運行腳本,需要在pycharm配置一些與運行相關的參數:

從零開始微調Embedding模型:基于BERT的實戰教程-AI.x社區

從零開始微調Embedding模型:基于BERT的實戰教程-AI.x社區

下述是embedding計算損失的核心代碼,這里的query與passage都是batch_size數量的輸入,如果只是一條query與passage,大家理解起來就容易很多。由于這里是batch_size數量的輸入,代碼中涉及到矩陣運算會給大家帶來理解困難。

比較難理解的是下述代碼,這里的target 其實就是label:

target = torch.arange(
                scores.size(0), device=scores.device, dtype=torch.long
            )
target = target * (p_reps.size(0) // q_reps.size(0))

p_reps 是相關文本矩陣, q_reps 是問題矩陣。每一個問題都對應固定數量的相關文本。p_reps.size(0) // q_reps.size(0) 是每個問題對應的相關文本的數量。下一行的target 乘以 相關文本的塊數,得到query對應的 Gold Truth(也稱 pos 文本)的下標,因為在每個相關文本中,第一個位置都是正確文本,其后是負樣本,這些 Gold Truth 下標之間的距離是固定,通過乘法就可以計算出每個 Gold Truth 的下標。

額外補充【選看】:

在微調的過程中,不要錯誤的以為每個問題只和自己的相關文本計算score。真實的情況是,在batch_size的數據中,每個問題會與所有的相關文本計算score。根據上述代碼可看出 target 最大的取值是:query的數量 x 相關文本數量,這也印證了每個問題會與所有的相關文本都計算score。故我們在隨機采樣負樣本的時候,負樣本數量設置的太小也不用太擔心,因為在計算過程中負樣本的數量會乘以 batch_size。

【注意】:query的數量 = batch_size

  • 損失函數

從零開始微調Embedding模型:基于BERT的實戰教程-AI.x社區

image-20250405174449800

從零開始微調Embedding模型:基于BERT的實戰教程-AI.x社區

image-20250407143100543

def compute_loss(self, scores, target):
    return self.cross_entropy(scores, target)

C-METB 論文中,關于損失函數的介紹,公式看起來很復雜,本質就是cross_entropy。

資源分享

上述的代碼開源在github平臺,為了不增大github倉庫的容量,數據集沒有上傳到github平臺。若希望直接獲得完整的項目文件夾,從下述提供的網盤分享鏈接進行下載:

  • github開源地址:https://github.com/JieShenAI/csdn/tree/main/25/04/embedding_finetune
  • 通過網盤分享的文件:embedding_finetune.zip鏈接: https://pan.baidu.com/s/1CDRpkkjS1-0jtmIBiTWx1A 提取碼: free

最新的代碼,請以 github 的鏈接為準,網盤分享的文件,本意只是為了存儲數據,避免增加github倉庫的容量

CSDN: https://jieshen.blog.csdn.net/article/details/147043668

參考資料

[1] BAAI官方微調教程: ??https://github.com/FlagOpen/FlagEmbedding/blob/master/Tutorials/7_Fine-tuning/7.1.2_Fine-tune.ipynb??

[2] BAAI官方評估教程:??https://github.com/FlagOpen/FlagEmbedding/blob/master/Tutorials/4_Evaluation/4.1.1_Evaluation_MSMARCO.ipynb??

[3] 多文檔知識圖譜問答:??https://jieshen.blog.csdn.net/article/details/146390208??

[4] bge模型微調流程:??https://www.bilibili.com/video/BV1eu4y1x7ix/??

[5] FlagEmbedding 舊版本可用于debug的代碼:https://github.com/FlagOpen/FlagEmbedding/blob/9b6e521bcb7583ed907f044ca092daef0ee90431/FlagEmbedding/baai_general_embedding/finetune/run.py

本文轉載自??AI悠閑區??,作者:jieshenai

已于2025-4-14 10:07:43修改
收藏
回復
舉報
回復
相關推薦
手机在线国产视频| 亚洲精品成人a8198a| 精品在线播放视频| 成人高清电影网站| 欧美一区二区三区播放老司机| 国产 国语对白 露脸| 天天干天天草天天射| 日本午夜一区二区| 欧美另类极品videosbest最新版本| 精品国产一区在线| 黑人巨大国产9丨视频| fc2成人免费人成在线观看播放| 欧美激情视频一区| 30一40一50老女人毛片| **日韩最新| 欧美性猛交xxxxx水多| 一区二区三区日韩视频| 免费黄色片在线观看| 精品一区二区三区久久| 欧美在线视频播放| 青青草原免费观看| 日韩精品91| 亚洲精品中文字幕女同| 男人操女人下面视频| 视频精品导航| 欧美日韩亚洲精品内裤| 在线观看免费成人| 亚洲丝袜在线视频| 亚洲成年人在线观看| 国产精品天堂蜜av在线播放| 亚洲成人www| 日韩视频在线免费播放| 激情小视频在线观看| 成人黄色777网| 91久久中文字幕| 无码人妻熟妇av又粗又大| 影音先锋久久久| 久久久精品一区二区三区| 国产又粗又猛又爽视频| 国产精品久久久网站| 在线成人av网站| 日韩在线第三页| 中文在线免费二区三区| 亚洲妇女屁股眼交7| 男女爱爱视频网站| 男人的天堂在线视频免费观看| 久久久精品国产99久久精品芒果| 久久亚洲午夜电影| 亚洲精品午夜视频| 欧美一级视频免费观看| 久久激情电影| 国产亚洲欧洲黄色| 神马久久久久久久久久久| 亚洲福利网站| 国产丝袜一区视频在线观看| 香蕉视频黄色在线观看| 亚洲黄色录像| 亚洲人在线视频| 91成人在线免费视频| 国产探花在线精品| 中文国产成人精品久久一| 女人黄色一级片| 久久视频精品| 久久色在线播放| 久久婷婷综合国产| 欧美三级第一页| 国内精品美女av在线播放| 日本亚洲色大成网站www久久| 亚洲精品在线二区| 国产91久久婷婷一区二区| 亚洲s码欧洲m码国产av| 日韩高清中文字幕一区| 国产欧美一区二区三区久久| 99久久国产热无码精品免费| 懂色一区二区三区免费观看| 国产在线一区二区三区四区 | 欧美精品久久99久久在免费线| 国产一二三四在线视频| 精品久久福利| 日韩欧美国产精品一区| 色综合久久五月| 九一国产精品| 色偷偷亚洲男人天堂| 国产盗摄一区二区三区在线| 亚洲免费高清| 国产v综合v亚洲欧美久久| 一级日韩一级欧美| 成人午夜在线免费| 人禽交欧美网站免费| 麻豆视频在线观看免费网站| 夜夜嗨av一区二区三区| 日韩人妻精品无码一区二区三区| 成人在线黄色| 精品国精品国产尤物美女| 日韩美一区二区三区| 日韩一级理论片| 欧美三级一区| 国产婷婷97碰碰久久人人蜜臀| 中文字幕第69页| 精品福利av| 国产精品偷伦视频免费观看国产| 亚洲欧美黄色片| 国产婷婷色一区二区三区在线| 麻豆中文字幕在线观看| 天堂av中文在线观看| 7799精品视频| 亚洲AV无码国产成人久久| 欧美91大片| 国产精品吹潮在线观看| 免费观看国产精品| 国产精品第一页第二页第三页| 欧美精品久久久久久久自慰| 四虎永久精品在线| 精品性高朝久久久久久久| 亚洲精品久久久久久国| 久久久水蜜桃av免费网站| 91精品国产99久久久久久红楼 | 久久久999精品| 日本一区二区三区精品| 国产91丝袜在线18| 一区二区日本伦理| 日韩伦理三区| 亚洲国内精品在线| 欧美三级 欧美一级| 免费在线观看成人| 久久精品国产一区二区三区日韩 | 五月婷婷六月丁香| 亚洲人成在线播放网站岛国| 黄色aaa级片| 西野翔中文久久精品字幕| 久久99青青精品免费观看| 91精品国自产| 国产精品久久久爽爽爽麻豆色哟哟 | 中文字幕在线永久| 亚洲天天影视网| 国产精品一区二区三区在线播放| 黄网站在线观看| 精品欧美一区二区三区| jjzz黄色片| 欧美精品播放| 99电影在线观看| 黄色一级片在线观看| 欧美日韩国产另类一区| 蜜桃久久精品成人无码av| 亚洲一区成人| 欧美日韩电影一区二区三区| 亚洲永久av| 亚洲美女动态图120秒| 日韩欧美三级视频| 成人精品国产免费网站| 精品一区二区三区无码视频| 国产精品国产| 97超碰国产精品女人人人爽 | 久久香蕉国产线看观看99| 国产精品国产亚洲精品看不卡| 国产图片一区| 亚洲2020天天堂在线观看| 好男人www在线视频| 午夜电影网亚洲视频| 水蜜桃av无码| 亚洲欧美日韩在线观看a三区 | 成年人小视频在线观看| 亚洲黄色精品| 欧美一区二区三区电影在线观看| 精品123区| 不卡av日日日| 亚洲精品国产av| 欧美视频13p| 欧洲性xxxx| 精品无人区卡一卡二卡三乱码免费卡| 一区二区三区久久网| 国产情侣一区在线| 欧美精品久久久久久久免费观看| 天堂а√在线8种子蜜桃视频 | www.四虎在线观看| 亚洲mv在线观看| 永久免费成人代码| 精品制服美女久久| 国内精品视频一区二区三区| 久久不见久久见中文字幕免费| 国产精品99久久久久久白浆小说| 麻豆网站在线看| 亚洲国产精品久久久久秋霞不卡| 欧美国产一级片| 亚洲男人的天堂在线观看| 91精品啪在线观看国产| 日韩在线一二三区| 欧美精品一区二区性色a+v| 美女主播精品视频一二三四| 国产精品对白刺激| 欧美videosex性欧美黑吊| 亚洲欧美日韩天堂| www.中文字幕| 91成人在线免费观看| 69av视频在线| 欧美激情在线观看视频免费| 激情小说欧美色图| 日韩精品午夜视频| 国产片侵犯亲女视频播放| 欧美日本成人| 亚洲综合在线做性| 姬川优奈av一区二区在线电影| 成人444kkkk在线观看| 深夜福利在线视频| 欧美一级片在线看| 日韩精品一区二区亚洲av观看| 一区二区三区在线观看网站| 一级黄色毛毛片| 99精品久久只有精品| 亚洲综合av在线播放| 亚洲欧美大片| 无码熟妇人妻av在线电影| 日韩成人激情| 另类欧美小说| 岛国精品一区| 91|九色|视频| 久久亚洲人体| 国产成人久久精品| 18aaaa精品欧美大片h| 精品国产一区二区三区久久久| 欧美黄色小说| 亚洲级视频在线观看免费1级| 国产av无码专区亚洲av麻豆| 欧美日韩专区在线| 特级西西444www大精品视频免费看| 亚洲国产中文字幕| 中文字幕手机在线观看| 国产精品久久久久久久久动漫 | 成年人视频网站在线| 日韩精品中文字幕视频在线| 开心激情综合网| 日韩美女在线视频| 国产乱人乱偷精品视频a人人澡| 在线看国产日韩| 成人免费毛片视频| 欧美日韩亚洲一区二区三区| 日本在线视频免费| 亚洲综合偷拍欧美一区色| 性色av无码久久一区二区三区| 中文字幕日韩一区| 五月激情四射婷婷| 国产女主播在线一区二区| 亚洲第一综合网| 国产片一区二区| 黄色免费一级视频| 欧美国产精品久久| 四虎成人免费影院| 中文字幕第一区综合| 久久视频精品在线观看| 国产性做久久久久久| 午夜精产品一区二区在线观看的| 久久精品一区二区| 亚洲a v网站| 欧美经典一区二区三区| av在线免费播放网址| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲经典一区二区| 精品国产乱码久久久久久影片| 亚洲国产精品suv| 日韩av网址在线| 看电影就来5566av视频在线播放| 亚洲深夜福利在线| 色影院视频在线| 欧美第一黄网免费网站| 国产网红女主播精品视频| 97香蕉久久夜色精品国产| 中文不卡1区2区3区| 国产精品视频xxxx| 国产一区二区三区视频在线| 成人91免费视频| 丝袜久久网站| 亚洲欧美日韩综合一区| 欧美va天堂在线| 男人天堂999| 捆绑调教一区二区三区| 三级黄色片免费看| www..com久久爱| 国产午夜精品久久久久久久久| 亚洲男女一区二区三区| 日韩女优在线观看| 欧美视频日韩视频| xxxx国产精品| 亚洲欧美999| 超碰在线网址| 国产脚交av在线一区二区| a一区二区三区亚洲| 精品国产一区二区三| 日韩精品中文字幕第1页| 成年人视频网站免费| 奶水喷射视频一区| 成人不卡免费视频| av男人天堂一区| 日韩国产第一页| 狠狠久久五月精品中文字幕| 一级特黄特色的免费大片视频| 日韩欧美国产1| 第九色区av在线| 国模视频一区二区三区| 免费视频观看成人| 久久国产精品久久| 一本到12不卡视频在线dvd| 国产无套粉嫩白浆内谢的出处| 国产成人午夜电影网| 国产又粗又猛又爽又黄av| 亚洲国产综合视频在线观看| 亚洲天堂国产精品| 日韩国产激情在线| 三级网站视频在在线播放| 国产精品香蕉在线观看| 色天天色综合| 99久久99久久精品| 麻豆免费精品视频| 三级黄色片网站| 亚洲在线视频一区| 国产精品久久久久久无人区| 亚洲欧美色婷婷| 麻豆视频在线观看免费网站黄| 亚洲综合国产精品| 第一会所sis001亚洲| 少妇性饥渴无码a区免费| 国产福利91精品| 加勒比婷婷色综合久久| 欧美在线影院一区二区| 你懂的免费在线观看视频网站| 久久久久久国产| 久久av偷拍| 99精品一级欧美片免费播放| 麻豆一区二区在线| 在线观看亚洲大片短视频| 一本色道久久综合亚洲91| 少妇人妻精品一区二区三区| 欧美黑人xxx| 日韩在线观看一区二区三区| 欧美 另类 交| 麻豆一区二区在线| 午夜精品久久久久99蜜桃最新版| 色天使色偷偷av一区二区| 青梅竹马是消防员在线| 91精品国产高清久久久久久久久 | 精品一区二区三区中文字幕视频| 一区二区三区四区在线视频| 蜜桃久久久久久| 麻豆一区在线观看| 欧美喷潮久久久xxxxx| √天堂资源地址在线官网| 91精品久久久久久| 欧美超碰在线| 深爱五月综合网| 一区二区三区免费看视频| 午夜老司机福利| 久久久欧美一区二区| 玖玖玖免费嫩草在线影院一区| 777精品久无码人妻蜜桃| 91亚洲精品久久久蜜桃网站| 日本中文字幕第一页| 亚洲人成在线一二| 亚洲精品国产嫩草在线观看| 午夜一区二区三区| 美女视频黄频大全不卡视频在线播放| 五月天免费网站| 欧美一区二区观看视频| 国产精品69xx| 麻豆成人在线播放| 日韩高清在线观看| 羞羞在线观看视频| 欧美一区二区精品久久911| 草莓视频丝瓜在线观看丝瓜18| 鲁丝片一区二区三区| 日韩电影免费在线看| 国产一区在线观看免费| 日韩亚洲国产中文字幕欧美| 国内高清免费在线视频| 欧美性xxxx69| 久久99精品国产麻豆婷婷洗澡| 国产十六处破外女视频| 亚洲精品www久久久| 欧洲一级精品| 看全色黄大色大片| 99精品桃花视频在线观看| 超碰在线免费97| 欧美日本高清一区| 亚洲欧洲美洲国产香蕉| 一级黄色特级片| 亚洲成人在线网站| 国产视频三级在线观看播放| 亚洲va欧美va国产综合剧情| 99xxxx成人网| 国产精品suv一区二区88| 亚洲电影免费观看高清| 国产精品videossex撒尿| 国产精品无码电影在线观看| 国产香蕉久久精品综合网| 国产深喉视频一区二区| 1769国产精品| 亚洲精品网址| 人妻一区二区视频| 精品国一区二区三区| 福利一区视频| 欧美国产亚洲一区| 亚洲欧美激情视频在线观看一区二区三区 |