chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

CLIP-Chinese:中文多模態(tài)對比學習預(yù)訓練模型

深度學習自然語言處理 ? 來源:YeungNLP ? 作者:YeungNLP ? 2022-12-06 14:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

項目地址:

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

預(yù)訓練權(quán)重(使用方法,詳見下文):

預(yù)訓練模型 預(yù)訓練權(quán)重名稱 權(quán)重地址
BertCLIP整體權(quán)重

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

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

單獨提取出來的Bert權(quán)重

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提出的一種多模態(tài)對比學習模型,OpenAI使用了4億對圖文數(shù)據(jù),基于對比學習的方法對CLIP模型進行訓練。

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

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

然后使用我們熟悉的對比損失InfoNCE Loss來計算該batch的訓練損失,更新模型權(quán)重。對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的負樣本,會對模型的訓練帶來很大的影響。對于該問題,我們可以認為,當數(shù)據(jù)量足夠大,并且batch size足夠大的時候,上述誤差對模型的優(yōu)化方向的影響是有限的。在預(yù)訓練時代,我們要相信大力是能夠出奇跡的,只要堆足夠多優(yōu)質(zhì)的數(shù)據(jù),很多問題都可以迎刃而解。

02

項目介紹

訓練細節(jié)

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

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

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

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

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

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

使用方法

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

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

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

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'
# 加載預(yù)訓練模型權(quán)重
model = BertCLIPModel.from_pretrained(model_name_or_path)
# 初始化processor
CLIPProcessor.tokenizer_class='BertTokenizerFast'
processor = CLIPProcessor.from_pretrained(model_name_or_path)
# 預(yù)處理輸入
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)  # 對分數(shù)進行歸一化


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


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

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

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

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

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的預(yù)訓練權(quán)重單獨拎出來,可以使用BertModel直接加載,進行下游任務(wù)。

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,以及相似度計算的腳本,更多細節(jié)可參考項目代碼。

03

模型效果

圖文相似度

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

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

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

文本相似度

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

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的圖片及其相似度分數(shù)。

注:由于在訓練BertCLIP時,將圖像編碼器的權(quán)重凍結(jié),所以該部分的能力,主要歸功于OpenAIclip預(yù)訓練權(quán)重。如想要優(yōu)化模型在域內(nèi)數(shù)據(jù)的圖片相似度計算能力,圖像編碼器需要一起參與訓練。

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

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

04

結(jié)語

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

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

不足之處在于,對于預(yù)訓練而言,140萬的數(shù)據(jù)稍顯不足,讀者可以使用自身域內(nèi)數(shù)據(jù)進行二次預(yù)訓練。

審核編輯 :李倩


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

    關(guān)注

    45

    文章

    3900

    瀏覽量

    141343
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3645

    瀏覽量

    51685
  • OpenAI
    +關(guān)注

    關(guān)注

    9

    文章

    1238

    瀏覽量

    9794

原文標題:CLIP-Chinese:中文多模態(tài)對比學習預(yù)訓練模型

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    格靈深瞳模態(tài)模型Glint-ME讓圖文互搜更精準

    在電商、安防等場景下,圖文互搜應(yīng)用廣泛。隨著以CLIP為代表的模態(tài)表征方法相繼提出,過去單一模態(tài)搜索(文搜文、圖搜圖)被突破,模型可以同時
    的頭像 發(fā)表于 11-02 15:56 ?1210次閱讀
    格靈深瞳<b class='flag-5'>多</b><b class='flag-5'>模態(tài)</b>大<b class='flag-5'>模型</b>Glint-ME讓圖文互搜更精準

    亞馬遜云科技上線Amazon Nova模態(tài)嵌入模型

    Embeddings模態(tài)嵌入模型現(xiàn)已在Amazon Bedrock上線,這是一款專為Agentic RAG與語義搜索應(yīng)用打造的頂尖模態(tài)
    的頭像 發(fā)表于 10-29 17:15 ?102次閱讀
    亞馬遜云科技上線Amazon Nova<b class='flag-5'>多</b><b class='flag-5'>模態(tài)</b>嵌入<b class='flag-5'>模型</b>

    1688 模態(tài)搜索從 0 到 1:逆向接口解析與 CLIP 特征匹配實踐

    本文分享基于CLIP模型與逆向工程實現(xiàn)1688圖片搜同款的實戰(zhàn)方案。通過抓包分析破解接口簽名,結(jié)合CLIP模態(tài)特征提取與Faiss向量檢索
    的頭像 發(fā)表于 10-17 10:00 ?184次閱讀

    格靈深瞳三項成果獲得國際頂級學術(shù)會議認可

    以O(shè)penAI CLIP為代表的模態(tài)預(yù)訓練模型,為安防、電商等應(yīng)用場景提供了強大的跨
    的頭像 發(fā)表于 09-15 14:43 ?1162次閱讀

    淺析模態(tài)標注對大模型應(yīng)用落地的重要性與標注實例

    ”的關(guān)鍵工序——模態(tài)標注重要性日益凸顯。 一、什么是模態(tài)標注? 模態(tài)標注是指對文本、圖像、
    的頭像 發(fā)表于 09-05 13:49 ?682次閱讀

    愛芯通元NPU適配Qwen2.5-VL-3B視覺模態(tài)模型

    熟悉愛芯通元NPU的網(wǎng)友很清楚,從去年開始我們在端側(cè)模態(tài)模型適配上一直處于主動緊跟的節(jié)奏。先后適配了國內(nèi)最早開源的模態(tài)大模MiniCP
    的頭像 發(fā)表于 04-21 10:56 ?2573次閱讀
    愛芯通元NPU適配Qwen2.5-VL-3B視覺<b class='flag-5'>多</b><b class='flag-5'>模態(tài)</b>大<b class='flag-5'>模型</b>

    用PaddleNLP為GPT-2模型制作FineWeb二進制預(yù)訓練數(shù)據(jù)集

    ,使用PaddleNLP將FineWeb數(shù)據(jù)集中文本形式的數(shù)據(jù),經(jīng)過分詞化(Tokenize),轉(zhuǎn)換為大語言模型能直接使用的二進制數(shù)據(jù),以便提升訓練效果。 ChatGPT發(fā)布后,當代大語言模型
    的頭像 發(fā)表于 03-21 18:24 ?3769次閱讀
    用PaddleNLP為GPT-2<b class='flag-5'>模型</b>制作FineWeb二進制<b class='flag-5'>預(yù)</b><b class='flag-5'>訓練</b>數(shù)據(jù)集

    從Open Model Zoo下載的FastSeg大型公共預(yù)訓練模型,無法導入名稱是怎么回事?

    從 Open Model Zoo 下載的 FastSeg 大型公共預(yù)訓練模型。 運行 converter.py 以將 FastSeg 大型模型轉(zhuǎn)換為中間表示 (IR): pyth
    發(fā)表于 03-05 07:22

    用PaddleNLP在4060單卡上實踐大模型預(yù)訓練技術(shù)

    作者:算力魔方創(chuàng)始人/英特爾創(chuàng)新大使劉力 之前我們分享了《從零開始訓練一個大語言模型需要投資多少錢》,其中高昂的預(yù)訓練費用讓許多對大模型
    的頭像 發(fā)表于 02-19 16:10 ?2113次閱讀
    用PaddleNLP在4060單卡上實踐大<b class='flag-5'>模型</b><b class='flag-5'>預(yù)</b><b class='flag-5'>訓練</b>技術(shù)

    海康威視發(fā)布模態(tài)模型文搜存儲系列產(chǎn)品

    模態(tài)模型為安防行業(yè)帶來重大技術(shù)革新,基于觀瀾大模型技術(shù)體系,??低晫⒋髤?shù)量、大樣本量的圖文模態(tài)
    的頭像 發(fā)表于 02-18 10:33 ?1001次閱讀

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

    的應(yīng)用。MAML算法通過二階優(yōu)化找到對任務(wù)變化敏感的模型參數(shù),實現(xiàn)了快速適應(yīng)。上下文學習則引入了注意力機制,使模型能夠根據(jù)當前場景動態(tài)調(diào)整行為策略。在預(yù)
    發(fā)表于 12-24 15:03

    商湯日日新模態(tài)模型權(quán)威評測第一

    剛剛,商湯科技日日新SenseNova模態(tài)模型,在權(quán)威綜合評測權(quán)威平臺OpenCompass的模態(tài)評測中取得榜單第一。
    的頭像 發(fā)表于 12-20 10:39 ?1481次閱讀

    KerasHub統(tǒng)一、全面的預(yù)訓練模型

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

    一文理解模態(tài)大語言模型——下

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

    一文理解模態(tài)大語言模型——上

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