精品欧美一区二区三区在线观看 _久久久久国色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修改
收藏
回復
舉報
回復
相關推薦
国产精品区一区二区三区| 免费视频一区| 亚洲精品av在线| 99热成人精品热久久66| 国产成a人亚洲精v品无码| 国内精品久久久久久久97牛牛| 在线免费精品视频| 无码毛片aaa在线| 国产又粗又大又爽| 在线观看一区| www国产精品com| 538国产视频| 99久热在线精品视频观看| 精品国产乱码久久久久久虫虫漫画 | 2一3sex性hd| 91精品店在线| 婷婷一区二区三区| 26uuu成人| 毛片在线播放网址| 日本va欧美va欧美va精品| 九九精品视频在线观看| 天天操天天舔天天射| 18国产精品| 欧美日韩精品久久久| 黄色免费视频大全| 中日韩高清电影网| 国产精品免费观看视频| 久久久久se| 国产精品国产精品国产| 99av国产精品欲麻豆| 美女久久久久久久| 很污很黄的网站| 欧美熟乱15p| 精品亚洲国产成av人片传媒| 丰满少妇一区二区三区专区| 欧美性www| 欧美亚洲综合久久| 波多野结衣作品集| av高清不卡| 偷拍亚洲欧洲综合| www.国产在线视频| 国产白丝在线观看| 972aa.com艺术欧美| 国产成人精品视频| 91传媒免费观看| 麻豆一区一区三区四区| 日韩精品在线网站| 黑人巨大猛交丰满少妇| 国产精品一区二区三区www| 欧美日韩一卡二卡| 五月婷婷丁香色| 黑人一区二区三区| 午夜精品在线看| 很污的网站在线观看| 色呦呦在线看| 亚洲丰满少妇videoshd| 日韩美女爱爱视频| heyzo高清在线| 精品美女久久久久久免费| 亚洲欧美日韩综合一区| 91caoporn在线| 一区在线中文字幕| 五月天男人天堂| 欧美xxxx性xxxxx高清| 亚洲香肠在线观看| 免费在线观看视频a| 2020国产在线| 色94色欧美sute亚洲线路一ni | 亚洲黄色尤物视频| 成年人视频网站免费| 精灵使的剑舞无删减版在线观看| 亚洲国产精品国自产拍av| 亚洲成人精品电影在线观看| 99青草视频在线播放视| 亚洲同性同志一二三专区| 日本一区高清不卡| 色婷婷av一区二区三| 激情偷乱视频一区二区三区| 国产999精品久久久影片官网| 久草国产在线观看| 在线日韩欧美| 国产成人精品一区二区| 91中文字幕在线视频| 丁香六月综合激情| 亚洲一区中文字幕在线观看| 成人黄色免费网| 久久婷婷麻豆| 91九色国产视频| 人妻少妇一区二区三区| 久久久久国产一区二区三区四区| 韩国成人av| 成a人片在线观看www视频| 亚洲美女视频在线| aaa毛片在线观看| 国产精品99久久免费| 日韩国产精品视频| 91人妻一区二区三区蜜臀| 亚洲激情社区| 成人免费大片黄在线播放| 手机在线精品视频| 中文字幕佐山爱一区二区免费| 日韩成人av电影在线| 91蜜桃在线视频| 亚洲综合色自拍一区| 自拍偷拍 国产| 成人在线视频你懂的| 日韩在线视频网| yjizz国产| 粉嫩aⅴ一区二区三区四区五区| 51国偷自产一区二区三区的来源| 国产精品久久久久久无人区| 美女一区二区三区| 久久精品人人做人人爽电影| 欧美xxx.com| 国产视频不卡一区| 超碰成人免费在线| 欧美视频第一| 亚洲一区www| 丰满少妇乱子伦精品看片| 国产专区欧美精品| 国产aⅴ精品一区二区三区黄| 亚洲xxxx天美| 国产精品久久久久久久岛一牛影视 | 日本免费a视频| 免费视频成人| 亚洲品质视频自拍网| 国产一级av毛片| 激情av综合网| 亚洲免费精品视频| 国产精品高清乱码在线观看| 亚洲国产毛片完整版| 亚洲成人生活片| 激情六月婷婷久久| 一级日韩一区在线观看| 黄色精品视频| 欧美一区二区三区婷婷月色| 中文字幕a在线观看| 午夜精品久久| 国产91社区| 成人福利电影| 亚洲精品一区二区三区精华液| 天天插天天射天天干| 在线欧美亚洲| 久久99导航| 97se综合| 尤物九九久久国产精品的特点 | 一二三区精品视频| 亚欧精品在线视频| 国内精品久久久久久久影视麻豆 | 国产伊人久久| 中文字幕日韩高清| 国产一区二区三区三州| 中文字幕一区三区| avav在线看| 国产尤物久久久| 国产精品久久中文| 国产在线激情| 欧美小视频在线| 亚洲黄色小说视频| 男人的天堂久久精品| 色呦呦网站入口| 亚洲精品国产九九九| 高清在线视频日韩欧美| 91 中文字幕| 成人中文字幕合集| www.爱色av.com| 欧美三级情趣内衣| 成人黄色短视频在线观看| 91cn在线观看| 精品一区二区电影| 中文字幕在线网站| ww久久中文字幕| 无尽裸体动漫2d在线观看| 牛牛国产精品| 成人a免费视频| 牛牛电影国产一区二区| 777奇米四色成人影色区| 免费在线观看日韩| 国产亚洲制服色| 波多野结衣中文字幕在线播放| 色婷婷热久久| 国产精品久久久久久久久久久久冷 | 在线视频免费一区二区| 国产精品无码免费播放| 中文在线一区二区| 亚洲911精品成人18网站| 国产精品毛片在线| 一区二区国产日产| 国语一区二区三区| 欧美激情国内偷拍| 国产精品久久久久一区二区国产 | 九色精品美女在线| 国产精品视频无码| 五月综合激情网| 手机在线中文字幕| 2017欧美狠狠色| 日本高清免费在线视频| 久久福利影视| 青草视频在线观看视频| 欧美综合一区| 国产一区二区不卡视频| 99riav视频在线观看| 精品国产乱子伦一区| 久久久久久久国产精品毛片| 久久久不卡影院| 亚洲一级片免费| 日韩一区二区免费看| 特级毛片在线免费观看| 婷婷成人综合| 成人片在线免费看| 欧美系列精品| 国产精品av在线| 高h视频在线播放| 久久中文久久字幕| 第一福利在线| 亚洲精选一区二区| 蜜臀久久久久久999| 91精品国产91久久综合桃花| a一级免费视频| 久久精品一二三| www.免费av| 成人性视频免费网站| 捷克做爰xxxⅹ性视频| 男男成人高潮片免费网站| 欧美视频在线播放一区| 欧美色婷婷久久99精品红桃| 成人性生交大片免费看小说| 日韩制服诱惑| 国产xxx69麻豆国语对白| 日本三级在线播放完整版| 亚洲精品有码在线| 亚洲人妻一区二区| 欧美日韩国产综合一区二区| 毛片aaaaa| 亚洲激情自拍偷拍| 国产女人18水真多毛片18精品| 不卡的看片网站| 麻豆短视频在线观看| 国产高清在线精品| 国产极品粉嫩福利姬萌白酱| 色小子综合网| 亚洲综合第一| 99精品在线| 中文字幕中文字幕一区三区| 久久久久观看| 国产欧美亚洲日本| 日韩电影在线观看完整免费观看| 国产精品视频一区二区三区四| 日韩精品分区| 久久久久久久久久久久久久久久久久av | 国产在线视频一区二区三区| 成人毛片视频网站| 美女精品在线观看| 黄色免费网址大全| 美国欧美日韩国产在线播放| 日本美女视频一区| 国产精品一区二区你懂的| 麻豆tv在线观看| 白白色亚洲国产精品| 欧美熟妇精品黑人巨大一二三区| 精品一区二区三区香蕉蜜桃| 久久久久久久久久毛片| 国产成人aaaa| 国产精品一区二区入口九绯色| 韩国女主播成人在线| 国产精品igao网网址不卡| 国产成人在线视频免费播放| 国模无码视频一区| 国产成人亚洲综合a∨猫咪| 亚洲图片欧美另类| 国产自产2019最新不卡| 91精品啪在线观看国产| 91免费国产在线观看| 国产传媒在线看| 亚洲黄色免费电影| 国产www在线| 精品免费在线观看| 亚洲一区二区天堂| 亚洲精品一线二线三线| 午夜久久久久久噜噜噜噜| 日韩成人激情在线| 日本三级视频在线观看| 日韩在线视频中文字幕| 暖暖在线中文免费日本| 日韩av高清不卡| 九九九九九九精品任你躁| 精品一区日韩成人| 天天久久综合| 18岁网站在线观看| 国产亚洲午夜| 涩涩网站在线看| 99国产精品久久久| 免费看一级大片| 91福利在线导航| 日韩在线观看视频网站| 中文字幕久精品免费视频| av伦理在线| 91久久精品久久国产性色也91| 亚瑟国产精品| 欧美日韩综合久久| 国产精品v亚洲精品v日韩精品| 日韩a级黄色片| 亚洲性感美女99在线| 激情五月俺来也| 91美女片黄在线| 欧美国产日韩综合| 欧美日韩第一区日日骚| 亚洲av成人无码久久精品老人 | 熟女丰满老熟女熟妇| 亚洲欧美在线高清| 无码人妻aⅴ一区二区三区有奶水 无码免费一区二区三区 | 亚洲最大网站| 超碰97人人人人人蜜桃| 色综合天天综合网中文字幕| 欧美日韩性生活片| 国产成人精品免费| 日韩av手机在线免费观看| 在线一区二区三区四区五区 | 成人羞羞视频免费| 午夜免费一区| 色噜噜狠狠永久免费| 久久久久久久精| 一区二区三区视频免费看| 欧美大片顶级少妇| 国产剧情在线| 成人a级免费视频| 91中文字幕精品永久在线| caopor在线视频| 久久亚洲精品小早川怜子| 日韩免费一级片| 欧美日韩一区三区| 成人在线视频成人| 国产成人一区二区三区| 综合干狼人综合首页| www.爱色av.com| 久久综合精品国产一区二区三区| 亚洲精品天堂网| 欧美视频精品在线观看| 福利在线午夜| 国产精品视频中文字幕91| 精品久久精品| 日本人视频jizz页码69| 亚洲国产精品高清| 久久久久无码精品国产| 欧美性极品xxxx做受| 涩涩视频在线观看免费| 欧美中在线观看| 好男人www在线视频| 国产精品青草综合久久久久99| 白白色免费视频| 伊人蜜桃色噜噜激情综合| 日本网站在线看| 99久久国产综合精品女不卡| 青青草视频播放| 亚洲色欲色欲www| 国产av一区二区三区精品| 欧美猛少妇色xxxxx| 99ri日韩精品视频| 亚洲午夜精品久久| 久久99蜜桃精品| 欧美久久久久久久久久久久| 精品日韩欧美一区二区| 超清av在线| 欧美污视频久久久| 精品在线免费视频| 国产女人被狂躁到高潮小说| 欧美精品一区二区三区蜜臀 | 久久精品国产久精国产一老狼 | 91福利在线视频| 亚洲伊人一本大道中文字幕| 国内综合精品午夜久久资源| 毛茸茸free性熟hd| 在线免费观看一区| 国产一区久久精品| 国产在线高清精品| 伊人狠狠色j香婷婷综合| 爱爱的免费视频| 正在播放亚洲一区| 午夜激情电影在线播放| 国产精品福利视频| 老**午夜毛片一区二区三区| 国产精品成人无码专区| 在线一区二区观看| 91精品久久久久久粉嫩| 麻豆亚洲一区| 国产一区二区三区在线观看精品| 大吊一区二区三区| 亚洲电影第1页| 欧洲精品久久久久毛片完整版| 亚洲成人一区二区三区| 国产98色在线|日韩| 日韩精品成人免费观看视频| 亚洲精品视频二区| 国产高清精品二区| 白嫩少妇丰满一区二区| 亚洲精品高清在线观看| 东热在线免费视频| 国产综合 伊人色| 国产一区二区三区免费看| 在线观看美女av|