色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CLIP-Chinese:中文多模態對比學習預訓練模型

深度學習自然語言處理 ? 來源:YeungNLP ? 作者:YeungNLP ? 2022-12-06 14:49 ? 次閱讀

筆者最近嘗試在業務中引入多模態,基于CLIP論文的思想,實現了基于Vit-Bert的CLIP模型,下面將其稱為BertCLIP模型。筆者用140萬的中文圖文數據,基于LiT-tuning的方式,訓了一版BertCLIP模型。BertCLIP模型在中文圖文相似度、文本相似度、圖片相似度等任務上都有著不錯的表現。

本文將對該工作進行詳細的介紹并且分享筆者使用的中文訓練語料、BertCLIP預訓練權重、模型代碼和訓練pipeline等。

首先展示一下BertCLIP預訓練模型在圖文相似度上的效果

baaf4848-751e-11ed-8abf-dac502259ad0.png

項目地址:

https://github.com/yangjianxin1/CLIP-Chinese

預訓練權重(使用方法,詳見下文):

預訓練模型 預訓練權重名稱 權重地址
BertCLIP整體權重

YeungNLP/clip-vit-bert-chinese-1M

https://huggingface.co/YeungNLP/clip-vit-bert-chinese-1M

單獨提取出來的Bert權重

YeungNLP/bert-from-clip-chinese-1M

https://huggingface.co/YeungNLP/bert-from-clip-chinese-1M

論文標題:

Learning Transferable Visual Models From Natural Language Supervision

01

模型簡介

CLIP是由OpenAI提出的一種多模態對比學習模型,OpenAI使用了4億對圖文數據,基于對比學習的方法對CLIP模型進行訓練。

CLIP模型主要由文編碼器和圖片編碼器兩部分組成,訓練過程如下圖所示。對于batch size為N的圖文對數據,將N個圖片與N個文本分別使用圖片編碼器和文本編碼器進行編碼,并且映射到同一個向量空間。然后分別計算兩兩圖文對編碼的點乘相似度,這樣就能得到一個N*N的相似度矩陣。

bb017028-751e-11ed-8abf-dac502259ad0.png

然后使用我們熟悉的對比損失InfoNCE Loss來計算該batch的訓練損失,更新模型權重。對InfoNCE Loss不熟悉的小伙伴,可以回顧筆者往期的文章:SimCSE:簡單有效的句向量對比學習方法。

舉個例子,對于圖片I1,分別計算I1與文本T1~TN的相似度,T1是I1的正樣本,而T2~TN均視為I1的負樣本,我們希望I1與T1的相似度盡可能大,而I1與其他文本的相似度盡可能小。

在計算T1的InfoNCE Loss時,首先將T1與所有文本的相似度進行softmax歸一化,得到相似度的分布,然后計算相似度分布與label的交叉熵損失,而T1的label為1。由此可以將這個loss的計算方式推廣到整個batch。

有小伙伴可能會覺得,對于圖片l1,文本T2~TN中可能存在它的正樣本,若T2~TN均視為I1的負樣本,會對模型的訓練帶來很大的影響。對于該問題,我們可以認為,當數據量足夠大,并且batch size足夠大的時候,上述誤差對模型的優化方向的影響是有限的。在預訓練時代,我們要相信大力是能夠出奇跡的,只要堆足夠多優質的數據,很多問題都可以迎刃而解。

02

項目介紹

訓練細節

BertCLIP主要由Vit和Bert組成,在預訓練時,筆者分別使用不同的預訓練權重來初始化Vit和Bert的權重。使用OpenAI開源的CLIP模型來初始化Vit權重,使用孟子中文預訓練權重來初始化Bert權重。

我們基于LiT-tuning的方法來訓練BertCLIP模型,也就是將Vit部分的模型參數進行凍結,只訓練BertCLIP的其他部分的參數。LiT-tuning是多模態模型訓練的一種范式,它旨在讓文本編碼空間向圖像編碼空間靠近,并且可以加快模型的收斂速度。

筆者使用了140萬條中文圖文數據對,batchsize為768,warmup step為1000步,學習率為5e-5,使用cosine衰減策略,混合精度訓練了50個epoch,總共73100步,訓練loss最終降為0.23左右。模型的訓練loss變化如下圖所示。

bb250222-751e-11ed-8abf-dac502259ad0.png

由于訓練資源的限制,以及訓練數據的獲取需要耗費較多時間,目前筆者僅使用了140萬的訓練數據。對于預訓練而言,140萬的訓練數據量略微少了些,筆者訓練50輪,模型也許會過分擬合訓練數據。若條允許,讀者可以共享的模型權重的基礎上,使用更多域內數據進行二次預訓練。

筆者曾使用實際業務中1700萬的圖文數據訓練BertCLIP模型,訓練10輪,大概22萬步,訓練損失大約降為0.7。在域內的圖文匹配、同義詞挖掘等任務中有不錯的效果。

使用方法

BertCLIP模型的使用方法非常簡單,首先將項目clone到本地機器上,并且安裝相關依賴包。

git clone https://github.com/yangjianxin1/CLIP-Chinese.git
pipinstall-rrequirements.txt

使用如下代碼,即可加載預訓練權重和processor對圖片和文本進行預處理,并且得到模型的輸出。

from transformers import CLIPProcessor
from component.model import BertCLIPModel
from PIL import Image
import requests


model_name_or_path = 'YeungNLP/clip-vit-bert-chinese-1M'
# 加載預訓練模型權重
model = BertCLIPModel.from_pretrained(model_name_or_path)
# 初始化processor
CLIPProcessor.tokenizer_class='BertTokenizerFast'
processor = CLIPProcessor.from_pretrained(model_name_or_path)
# 預處理輸入
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(text=["一只小狗在搖尾巴", "一只小豬在吃飯"], images=image, return_tensors="pt", padding=True)
inputs.pop('token_type_ids')    # 輸入中不包含token_type_ids


outputs = model(**inputs)


# 對于每張圖片,計算其與所有文本的相似度
logits_per_image = outputs.logits_per_image  # image-text的相似度得分
probs = logits_per_image.softmax(dim=1)  # 對分數進行歸一化


# 對于每個文本,計算其與所有圖片的相似度
logits_per_text = outputs.logits_per_text  # text-image的相似度得分
probs = logits_per_text.softmax(dim=1)  # 對分數進行歸一化


# 獲得文本編碼
text_embeds = outputs.text_embeds
# 獲得圖像編碼
image_embeds = outputs.image_embeds

單獨加載圖像編碼器,進行下游任務。

from PIL import Image
import requests
from transformers import CLIPProcessor, CLIPVisionModel


model_name_or_path = 'YeungNLP/clip-vit-bert-chinese-1M'
model = CLIPVisionModel.from_pretrained(model_name_or_path)
CLIPProcessor.tokenizer_class = 'BertTokenizerFast'
processor = CLIPProcessor.from_pretrained(model_name_or_path)


url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)


inputs = processor(images=image, return_tensors="pt")


outputs = model(**inputs)
last_hidden_state = outputs.last_hidden_state
pooled_output = outputs.pooler_output

單獨加載文本編碼器,進行下游任務。

from component.model import BertCLIPTextModel
from transformers import BertTokenizerFast


model_name_or_path = 'YeungNLP/clip-vit-bert-chinese-1M'
model = BertCLIPTextModel.from_pretrained(model_name_or_path)
tokenizer = BertTokenizerFast.from_pretrained(model_name_or_path)


inputs = tokenizer(["一只小狗在搖尾巴", "一只小豬在吃飯"], padding=True, return_tensors="pt")
inputs.pop('token_type_ids')  # 輸入中不包含token_type_ids


outputs = model(**inputs)
last_hidden_state = outputs.last_hidden_state
pooled_output = outputs.pooler_output

筆者也將BertCLIP中Bert的預訓練權重單獨拎出來,可以使用BertModel直接加載,進行下游任務。

from transformers import BertTokenizer, BertModel


model_name_or_path = 'YeungNLP/bert-from-clip-chinese-1M'
tokenizer = BertTokenizer.from_pretrained(model_name_or_path)
model = BertModel.from_pretrained(model_name_or_path)

在項目中,筆者上傳了多線程下載訓練圖片、訓練pipeline,以及相似度計算的腳本,更多細節可參考項目代碼。

03

模型效果

圖文相似度

在計算圖文相似的時候,首先計算兩兩圖文向量之間的點乘相似度。對于每張圖,將其與所有文本的相似度進行softmax歸一化,得到最終的分數。

bb40dec0-751e-11ed-8abf-dac502259ad0.png

bb6a8716-751e-11ed-8abf-dac502259ad0.png

文本相似度

在計算文本相似度的時候,首先計算兩兩文本之間的點乘相似度。對于每個文本,將其與自身的相似度置為-10000(否則對于每個文本,其與自身的相似度永遠為最大),然后將其與所有文本的相似度進行softmax歸一化,得到最終的分數。

bba9ce62-751e-11ed-8abf-dac502259ad0.png

bc0194b2-751e-11ed-8abf-dac502259ad0.png

bc258566-751e-11ed-8abf-dac502259ad0.png

bf4c3a28-751e-11ed-8abf-dac502259ad0.png

圖片相似度

圖片相似度的計算方式與文本相似度的方式一致。為方便展示,僅選出top1的圖片及其相似度分數。

注:由于在訓練BertCLIP時,將圖像編碼器的權重凍結,所以該部分的能力,主要歸功于OpenAIclip預訓練權重。如想要優化模型在域內數據的圖片相似度計算能力,圖像編碼器需要一起參與訓練。

bf6f2132-751e-11ed-8abf-dac502259ad0.png

bfa43bec-751e-11ed-8abf-dac502259ad0.png

04

結語

在本文中,筆者基于CLIP的思想,設計了Vit-Bert結構的BertCLIP模型,并且使用140萬中文圖文數據對,對模型進行預訓練。在圖文相似度、文本相似度、圖片相似度任務上做了嘗試,取得了不錯的效果。

該預訓練模型,能夠在中文圖文檢索、文本相似度計算、同義詞挖掘、相似圖召回等任務上發揮作用。并且在下游的一些多模態任務中,可以憑借該模型同時引入圖片和文本信息,擴充模型的信息域。由于Bert需要將文本空間向圖片空間對齊,所以Bert必然能夠學到了豐富的語義信息,這能夠對下游的NLP任務帶來增益。讀者也可以基于筆者分享的Bert預訓練權重,進行下游NLP任務的finetune,相信會有所幫助。

不足之處在于,對于預訓練而言,140萬的數據稍顯不足,讀者可以使用自身域內數據進行二次預訓練。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼器
    +關注

    關注

    45

    文章

    3646

    瀏覽量

    134638
  • 模型
    +關注

    關注

    1

    文章

    3254

    瀏覽量

    48876
  • OpenAI
    +關注

    關注

    9

    文章

    1096

    瀏覽量

    6554

原文標題:CLIP-Chinese:中文多模態對比學習預訓練模型

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    《具身智能機器人系統》第7-9章閱讀心得之具身智能機器人與大模型

    的應用。MAML算法通過二階優化找到對任務變化敏感的模型參數,實現了快速適應。上下文學習則引入了注意力機制,使模型能夠根據當前場景動態調整行為策略。在
    發表于 12-24 15:03

    商湯日日新模態模型權威評測第一

    剛剛,商湯科技日日新SenseNova模態模型,在權威綜合評測權威平臺OpenCompass的模態評測中取得榜單第一。
    的頭像 發表于 12-20 10:39 ?234次閱讀

    KerasHub統一、全面的訓練模型

    深度學習領域正在迅速發展,在處理各種類型的任務中,訓練模型變得越來越重要。Keras 以其用戶友好型 API 和對易用性的重視而聞名,始終處于這一動向的前沿。Keras 擁有專用的內
    的頭像 發表于 12-20 10:32 ?108次閱讀

    一文理解模態大語言模型——下

    /understanding-multimodal-llms ? 《一文理解模態大語言模型 - 上》介紹了什么是模態大語言
    的頭像 發表于 12-03 15:18 ?134次閱讀
    一文理解<b class='flag-5'>多</b><b class='flag-5'>模態</b>大語言<b class='flag-5'>模型</b>——下

    一文理解模態大語言模型——上

    /understanding-multimodal-llms 在過去幾個月中, OpenVINO? 架構師 Yury閱讀了眾多有關模態大語言模型的論文和博客,在此基礎上,推薦了一篇解讀
    的頭像 發表于 12-02 18:29 ?340次閱讀
    一文理解<b class='flag-5'>多</b><b class='flag-5'>模態</b>大語言<b class='flag-5'>模型</b>——上

    利用OpenVINO部署Qwen2模態模型

    模態模型的核心思想是將不同媒體數據(如文本、圖像、音頻和視頻等)進行融合,通過學習不同模態之間的關聯,實現更加智能化的信息處理。簡單來說
    的頭像 發表于 10-18 09:39 ?449次閱讀

    直播預約 |數據智能系列講座第4期:訓練的基礎模型下的持續學習

    鷺島論壇數據智能系列講座第4期「訓練的基礎模型下的持續學習」10月30日(周三)20:00精彩開播期待與您云相聚,共襄學術盛宴!|直播信息報告題目
    的頭像 發表于 10-18 08:09 ?235次閱讀
    直播預約 |數據智能系列講座第4期:<b class='flag-5'>預</b><b class='flag-5'>訓練</b>的基礎<b class='flag-5'>模型</b>下的持續<b class='flag-5'>學習</b>

    訓練和遷移學習的區別和聯系

    訓練和遷移學習是深度學習和機器學習領域中的兩個重要概念,它們在提高模型性能、減少
    的頭像 發表于 07-11 10:12 ?1080次閱讀

    大語言模型訓練

    能力,逐漸成為NLP領域的研究熱點。大語言模型訓練是這一技術發展的關鍵步驟,它通過在海量無標簽數據上進行訓練,使模型
    的頭像 發表于 07-11 10:11 ?439次閱讀

    訓練模型的基本原理和應用

    訓練模型(Pre-trained Model)是深度學習和機器學習領域中的一個重要概念,尤其是在自然語言處理(NLP)和計算機視覺(CV)
    的頭像 發表于 07-03 18:20 ?2894次閱讀

    深度學習模型訓練過程詳解

    深度學習模型訓練是一個復雜且關鍵的過程,它涉及大量的數據、計算資源和精心設計的算法。訓練一個深度學習模型
    的頭像 發表于 07-01 16:13 ?1300次閱讀

    大語言模型:原理與工程時間+小白初識大語言模型

    解鎖 我理解的是基于深度學習,需要訓練各種數據知識最后生成自己的的語言理解和能力的交互模型。 對于常說的RNN是處理短序列的數據時表現出色,耳真正厲害的是Transformer,此框架被推出后直接
    發表于 05-12 23:57

    【大語言模型:原理與工程實踐】大語言模型訓練

    大語言模型的核心特點在于其龐大的參數量,這賦予了模型強大的學習容量,使其無需依賴微調即可適應各種下游任務,而更傾向于培養通用的處理能力。然而,隨著學習容量的增加,對
    發表于 05-07 17:10

    螞蟻推出20億參數模態遙感模型SkySense

    據了解,負責開發的百靈團隊利用自身擁有的19億遙感影像數據集進行了訓練,從而生成了具有20.6億參數的SkySense大模型。官方稱其為全球范圍內參數規模最大、任務覆蓋最全且識別精度最高的
    的頭像 發表于 02-28 15:53 ?679次閱讀

    機器人基于開源的模態語言視覺大模型

    ByteDance Research 基于開源的模態語言視覺大模型 OpenFlamingo 開發了開源、易用的 RoboFlamingo 機器人操作模型,只用單機就可以
    發表于 01-19 11:43 ?424次閱讀
    機器人基于開源的<b class='flag-5'>多</b><b class='flag-5'>模態</b>語言視覺大<b class='flag-5'>模型</b>
    主站蜘蛛池模板: 中文无码乱人伦中文视频播放| 国产乱子影视频上线免费观看| 精品久久久麻豆国产精品 | 免费看国产曰批40分钟| OLDMAN老头456 TUBE| 无遮18禁在线永久免费观看挡| 狠狠色色综合站| 777EY_卡通动漫_1页| 三级黄色一级视频| 精品国产免费人成视频| 99视频这里只有精品| 性夜夜春夜夜爽AA片A| 看电影就来5566先锋av| 广播电台在线收听| 一区二区视频在线观看高清视频在线| 年轻的女教师2017韩国在线看| 高H内射NP古文| 尤物yw193can入口| 十分钟免费视频大全在线观看| 久久re这里视频只有精品首页| 成电影人免费网站| 在线黑人抽搐潮喷| 无码国产色欲XXXX视频| 蜜柚在线观看免费高清官网视频| 国产精品自在在线午夜精品| 真人女人无遮挡内谢免费视频%| 思思re热免费精品视频66| 久亚洲AV无码专区A片| 国产精品国产三级国产AV麻豆| 69亞洲亂人倫AV精品發布| 亚洲 欧美 国产 综合久久| 男同志vdieos免费| 久久99AV无色码人妻蜜柚| 国产51麻豆二区精品AV视频| 中文字幕在线不卡日本v二区| 无码人妻少妇色欲AV一区二区| 美女丝袜夹b| 九九在线免费视频| 国产精品欧美一区二区在线看| 99视频这里只有精品| 在线观看国产高清免费不卡|