跨模態學習能力再升級,EasyNLP電商文圖檢索效果刷新SOTA

簡介: 本⽂簡要介紹我們在電商下對CLIP模型的優化,以及上述模型在公開數據集上的評測結果。最後,我們介紹如何在EasyNLP框架中調用上述電商CLIP模型。

作者:熊兮、歡夏、章捷、臨在

 

導讀

多模態內容(例如圖像、文本、語音、視頻等)在互聯網上的爆炸性增長推動了各種跨模態模型的研究與發展,支持了多種跨模態內容理解任務。在這些跨模態模型中,CLIP(Contrastive Language-Image Pre-training)是一種經典的文圖跨模態檢索模型,它在大規模圖文數據集上進行了對比學習預訓練,具有很強的文圖跨模態表徵學習能力。在先前的工作(看這裏)中,中⽂NLP/多模態算法框架EasyNLP支持了CLIP的基礎功能,包括模型的Finetune、文圖向量抽取等。在本期的工作中,我們對EasyNLP框架進行了再一次升級,推出了融合了豐富電商場景知識的CLIP模型,在電商文圖檢索效果上刷新了SOTA結果,並且將上述模型免費開源,貢獻給開源社區。

EasyNLP(https://github.com/alibaba/EasyNLP)是阿⾥雲機器學習PAI 團隊基於 PyTorch 開發的易⽤且豐富的NLP算法框架,⽀持常⽤的中⽂預訓練模型和⼤模型落地技術,並且提供了從訓練到部署的⼀站式 NLP 開發體驗。EasyNLP 提供了簡潔的接⼝供⽤戶開發 NLP 模型,包括NLP應⽤ AppZoo 和預訓練 ModelZoo,同時提供技術幫助⽤戶⾼效的落地超⼤預訓練模型到業務。由於跨模態理解需求的不斷增加,EasyNLP也⽀持各種跨模態模型,推向開源社區,希望能夠服務更多的 NLP 和多模態算法開發者和研 究者,也希望和社區⼀起推動 NLP /多模態技術的發展和模型落地。

本⽂簡要介紹我們在電商下對CLIP模型的優化,以及上述模型在公開數據集上的評測結果。最後,我們介紹如何在EasyNLP框架中調用上述電商CLIP模型。

CLIP模型技術概覽

OpenAI於2021年提出的CLIP(Contrastive Language-Image Pre-training)模型,收集了4億文本-圖像對進行圖文對比學習訓練,建立了圖像和文本的關聯性。CLIP模型包含兩部分,分別爲圖像和文本的Encoder,用於對圖像和文本分別進行特徵抽取。CLIP的圖像的Backbone有多個選擇,既可以使用經典的ResNet系列模型,也可以選擇近兩年更先進的Transfomer類模型,例如ViT等。對於文本而言,CLIP一般使用BERT類模型,RoBERTa等也可以作爲選擇。

CLIP模型基礎技術

CLIP在特徵抽取後,分別對圖文向量進行Normalization,之後進一步進行內積計算,獲取樣本間的相似度。在模型Loss Function層面,由於我們對進行Normalization之後的圖像和文本向量直接使用相乘以計算餘弦距離,目的是使得匹配的圖文對的結果趨近於1,不匹配的圖文對的結果趨近於0;並且優化對比學習損失InfoNCE進行模型的預訓練。

CLIP的雙流架構使得其在推理階段可以非常方便地用於計算圖文相似度,因爲CLIP已經將圖文的表示映射到同一個向量空間。此外,通過對類別標籤設計Prompt,CLIP的還具有強大的Zero-shot Classification能力。如下圖所示,將文本標籤轉化爲Prompt “A photo of a {object}.”,並且使用目標圖像作爲輸出。如果文本“A photo of a dog.”於當前圖像匹配度最高(具有最大的餘弦相似度),即可以說明,當前圖像的物體是“dog”。由此可見,預訓練後的CLIP模型可以非常好的直接應用於圖像分類模型,而不需要額外的訓練。

電商場景下CLIP模型的優化

EasyNLP借鑑CLIP的輕量化、易遷移的預訓練架構,構建基於CLIP包含圖像和文本Encoder兩部分的雙流模型,同時基於商品數據,以優化電商場景的文圖檢索優化。具體來說,我們採樣了200萬的商品圖文數據,在OpenCLIP公開的模型權重上進行了繼續預訓練,使得模型具有電商領域的感知能力。同時,由於電商場景的文本概念分佈稀疏,圖像以商品圖爲主,具有較低的場景豐富性,因此,我們在預訓練過程中更加關注電商概念的相關知識,引入了圖文知識的細粒度交互,使得模型具備電商知識的識別能力。特別地,我們重點參考了DeCLIP的工作,對於電商概念構建其Prototype表徵,存儲在Feature Queue中,從而在訓練過程中關注當前圖文對與電商概念Prototype表徵的匹配信息(見參考文獻8)。

對圖像部分的輸入,我們將圖像統一Resize爲224×224的大小,並考慮不同的應用和部署場景,採用ViT-B-32(Vision Transformer層數爲12,圖像Patch大小爲32×32)和ViT-L-14(Vision Transformer層數爲24,圖像patch大小爲14×14)兩種模型作爲圖像側的Encoder。對於文本部分的輸入,我們和CLIP一樣採用12層Text Transformer作爲文本側Encoder,通過BPE分詞器做文本預處理,並限定文本詞長小於77。這兩個電商場景的CLIP模型參數配置如下表:

模型配置

alibaba-pai/pai-clip-commercial-base-en

alibaba-pai/pai-clip-commercial-large-en

參數量(Parameters)

151M

428M

層數(Number of Layers)

12

24

注意力頭數(Attention Heads)

12

16

隱向量維度(Hidden Size)

768

1024

文本長度(Text Length)

77

77

圖像序列長度(Image Patch Size)

32 x 32

14 x 14

圖像尺寸(Image Size)

224 x 224

224 x 224

詞表大小(Vocabulary Size)

49408

49408

如上表所述,電商CLIP模型包含了兩個不同的圖像Encoder架構,爲表中的pai-clip-commercial-base-en和pai-clip-commercial-large-en模型,分別代表ViT-B-32和ViT-L-14作爲圖像Backbone。

此外,我們也提供了兩個中文的預訓練CLIP模型,貢獻到開源社區,相關配置如下:

模型配置

alibaba-pai/clip_chinese_roberta_base_vit_base

alibaba-pai/clip_chinese_roberta_base_vit_large

參數量(Parameters)

188M

406M

層數(Number of Layers)

12

24

注意力頭數(Attention Heads)

12

16

隱向量維度(Hidden Size)

768

1024

文本長度(Text Length)

77

77

圖像序列長度(Image Patch Size)

16 x 16

16 x 16

圖像尺寸(Image Size)

224 x 224

224 x 224

詞表大小(Vocabulary Size)

21128

21128

電商CLIP模型效果評測

Fashion-Gen數據集是一個大規模的時尚場景的圖文數據集,是電商領域FashionBERT、KaleidoBERT、CommerceMM等模型用來評測檢索效果的較爲通用的數據集。Fashion-Gen共包含293,088條商品圖文數據,其中訓練集包含260,480個圖文對,驗證集和測試集包含32,528條圖文對。Fashion-Gen中的商品數據包含48個大類別,121個小類別,在訓練和測試數據中類別最多的包括"tops","sweaters","jackets & coats"等。我們基於pai-clip-commercial-base-en和pai-clip-commercial-large-en這兩個模型在Fashion-Gen數據集上進行了20個epoch的微調。

如下表所示,實驗結果表明,相比於現公佈的SOTA模型(CommerceMM),在文到圖和圖到文的檢索結果上,我們的電商CLIP已經有了顯著的效果提升。其中,Rank@1,Rank@5和Rank@10分別代表圖文或文圖檢索結果Top 1、Top 5和Top 10中含有正確結果的準確率。我們的電商CLIP-large模型,在圖文檢索的結果上提升了2.9~5.6個百分點,在文圖檢索上的表現更加優秀,在三個評測指標上提升了8.7~15個百分點。電商base模型在文到圖的檢索結果上與CommerceMM相當,卻使用了更少的參數量。電商CLIP無論在large還是base圖像Encoder的設置下,都取得了有競爭力的電商場景跨模態檢索能力。

文到圖檢索評測結果

模型

Rank@1

Rank@5

Rank@10

FashionBERT

26.75

46.48

55.74

KaleidoBERT

33.9

60.5

68.6

CLIP

36.8

58.9

67.6

CommerceMM

39.6

61.5

72.7

EI-CLIP

28.4

57.1

69.4

EasyNLP電商CLIP

pai-clip-commercial-base-en

39.5

61.5

70.0

pai-clip-commercial-large-en

54.6

75.1

81.4

 

圖到文檢索評測結果

模型

Rank@1

Rank@5

Rank@10

FashionBERT

23.96

46.31

52.12

KaleidoBERT

28.0

60.1

68.4

CLIP

31.9

55.4

64.1

CommerceMM

41.6

64.0

72.8

EI-CLIP

25.7

54.5

66.8

EasyNLP電商CLIP

pai-clip-commercial-base-en

33.8

57.5

66.0

pai-clip-commercial-large-en

47.2

69.3

75.7

 

如下展示了EasyNLP電商CLIP在Fashion-Gen驗證集上的文圖檢索結果,對於相同的文本,我們分別展示了我們模型和開源CLIP模型的Top-1圖像檢索結果:

Case

Query

EasyNLP電商CLIP

OpenCLIP

1

Midi skirt in pine green. Stiff, washed finish throughout. Oversized bow accent at waist. Ruffled detail at front. Concealed zip closure at back. Vented at back. Tonal stitching.

2

Jersey skirt in black. Elasticised waistband. Shirring at front waist. Drop-tail hem. Fully lined. Tonal stitching.

3

Long sleeve French terry pullover in black. Rib knit crewneck collar. Lace-up fastening at side-seams. Tonal stitching.

4

Long sleeve cotton-blend jersey henley in heather 'medium' grey. Crewneck collar. Three-button placket. Rib knit cuffs. Tonal stitching.

5

Canvas slip-on sandals in black. Fringed edges throughout. Open round toe. Leather lining in beige. Round block heel. Tonal leather sole. Tonal stitching. Approx. 3\" heel.

 

通過上述案例展示可以看出,EasyNLP電商CLIP在圖文交互過程中可以捕捉更細粒度的時尚信息,更進一步在概念知識層級實現圖文樣本的跨模態對齊。如case 1所示,EasyNLP電商CLIP更準確的捕捉了目標商品圖片的主體爲“Midi skirt in pine green.”,並使得包含了“midi skirt”,“pine green”,“bow accent”,“ruffled detail”等細粒度時尚正確的圖像——正面荷葉邊、腰部含有蝴蝶結裝飾、松綠色、中長半身裙的商品圖與文本有更高的相似度。沒有在預訓練過程中注入電商知識的模型雖然也檢索到了松綠色的商品圖,但在商品主體定位上即產生了錯誤。case 4則更關注到了細粒度的時尚概念“three-button placket.”,使包含這些特徵的正確圖片(第二列)排名更靠前。case 4第三列的商品圖雖然同樣可以匹配“long sleeve”,“'medium' grey”等特徵,但相比於ground-truth圖像,其僅反映了query的部分信息。同樣的,case 5中的錯誤圖像僅關注了“in black”,“fringed edges”等細節概念,而忽視了query中特徵的主體應爲“sandals”。通過EasyNLP電商CLIP對於圖文時尚概念的對齊,則可以很好的避免這些錯誤的匹配。

EasyNLP框架中電商CLIP模型的實現

在EasyNLP框架中,我們在模型層構建了CLIP模型的Backbone,其核⼼代碼如下所示:

 

    def forward(self, inputs,feat=None):
        if self.model_type=='open_clip':
            _device=self.open_clip.text_projection.device
            logit_scale = self.open_clip.logit_scale.exp()
        elif self.model_type=='chinese_clip':
            _device=self.chinese_clip.text_projection.device
            logit_scale = self.chinese_clip.logit_scale.exp()
        else:
            _device=self.text_projection.weight.device
            logit_scale = self.logit_scale.exp()
        if 'pixel_values' in inputs:
            inputs['pixel_values']=inputs['pixel_values'].to(_device)
        else:
            inputs['pixel_values']=None
        if 'input_ids' in inputs:
            inputs['input_ids']=inputs['input_ids'].to(_device)
        else:
            inputs['input_ids']=None
        if self.model_type=='open_clip':
            image_embeds, text_embeds = self.open_clip(inputs['pixel_values'], inputs['input_ids']) 
        elif self.model_type=='chinese_clip':
            image_embeds, text_embeds = self.chinese_clip(inputs['pixel_values'], inputs['input_ids'])             
        else:
            image_embeds=None
            text_embeds=None
            if 'input_ids' in inputs:
                text_outputs = self.text_encoder(input_ids=inputs['input_ids'],
                token_type_ids=inputs['token_type_ids'].to(_device),
                attention_mask=inputs['attention_mask'].to(_device))
                text_embeds = text_outputs[1]
                text_embeds = self.text_projection(text_embeds)
                text_embeds = text_embeds / text_embeds.norm(dim=-1, keepdim=True)
            if 'pixel_values' in inputs:
                vision_outputs = self.vision_encoder(
                    pixel_values=inputs['pixel_values']
                )
                image_embeds = vision_outputs[1].detach()
                image_embeds = self.vision_projection(image_embeds)
                image_embeds = image_embeds / image_embeds.norm(dim=-1, keepdim=True)
        if feat is True:
            return {'image_embeds':image_embeds,'text_embeds':text_embeds}
        # cosine similarity as logits
        logits_per_text = torch.matmul(text_embeds, image_embeds.t()) * logit_scale
        logits_per_image = logits_per_text.T
        return {'logits_per_text':logits_per_text,'logits_per_image':logits_per_image,'image_embeds':image_embeds,'text_embeds':text_embeds}

    # contrastive loss function, adapted from
    # https://sachinruk.github.io/blog/pytorch/pytorch%20lightning/loss%20function/gpu/2021/03/07/CLIP.html
    def contrastive_loss(self,logits: torch.Tensor) -> torch.Tensor:
        return nn.functional.cross_entropy(logits, torch.arange(len(logits), device=logits.device))

    def clip_loss(self,similarity: torch.Tensor) -> torch.Tensor:
        caption_loss = self.contrastive_loss(similarity)
        image_loss = self.contrastive_loss(similarity.T)
        return (caption_loss + image_loss) / 2.0    

    def compute_loss(self, forward_outputs, label_ids, **kwargs):
        loss = self.clip_loss(forward_outputs['logits_per_text'])
        return {'loss': loss}

中英文CLIP模型使⽤教程

以下我們簡要介紹如何在EasyNLP框架使⽤CLIP模型。

安裝EasyNLP

⽤戶可以直接參考GitHubhttps://github.com/alibaba/EasyNLP)上的說明安裝EasyNLP算法框架。

數據準備

CLIP是一個finetune模型,需要用戶準備下遊任務的訓練與驗證數據,爲tsv文件。這⼀⽂件包含以製表符\t分隔的兩列,第一列是文本,第二列是圖片的base64編碼。樣例如下:

Long sleeve stretch jersey pullover in 'burnt' red. Turtleneck collar. Tonal stitching. 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

我們已準備好測試用的中英文數據,通過下列示例中的shell腳本即可自動下載。

 

CLIP文圖檢索微調與測試示例

我們提供了CLIP使用示例,位於EasyNLP/examples/clip_retrieval

中文示例

# 中文訓練,執行如下腳本時所需的數據文件會自動下載
sh run_clip_local.sh 0 train_cn #其中0代表所要使用的顯卡編號
# 我們提供兩種中文權重 
# alibaba-pai/clip_chinese_roberta_base_vit_base
# alibaba-pai/clip_chinese_roberta_base_vit_large
# 對應的命令如下,源碼細節請查看run_clip_local.sh文件
# easynlp \
# --mode train \
# --worker_gpu=1 \
# --tables=./MUGE_MR_train_base64_part.tsv,./MUGE_MR_valid_base64_part.tsv \
# --input_schema=text:str:1,image:str:1 \
# --first_sequence=text \
# --second_sequence=image \
# --checkpoint_dir=./clip_cn_model/ \
# --learning_rate=1e-6  \
# --epoch_num=1  \
# --random_seed=42 \
# --logging_steps=100 \
# --save_checkpoint_steps 200 \
# --sequence_length=32 \
# --micro_batch_size=32 \
# --app_name=clip \
# --save_all_checkpoints \
# --user_defined_parameters='pretrain_model_name_or_path=alibaba-pai/clip_chinese_roberta_base_vit_base'  

# 中文測試
sh run_clip_local.sh 0 evaluate_cn

# 生成離線文圖特徵示例
sh run_clip_local.sh 0 predict_cn_text
sh run_clip_local.sh 0 predict_cn_image

英文數據

# 英文訓練
# 英文同樣提供兩種尺寸的權重
# alibaba-pai/pai-clip-commercial-base-en
# alibaba-pai/pai-clip-commercial-large-en
sh run_clip_local.sh 0 train_en
# easynlp \
# --mode train \
# --worker_gpu=1 \
# --tables=./fashiongen_1to1_train.tsv,./fashiongen_1to1_test.tsv \
# --input_schema=text:str:1,image:str:1 \
# --first_sequence=text \
# --second_sequence=image \
# --checkpoint_dir=./clip_en_model/ \
# --learning_rate=1e-6  \
# --epoch_num=1  \
# --random_seed=42 \
# --logging_steps=100 \
# --save_checkpoint_steps 200 \
# --sequence_length=32 \
# --micro_batch_size=32 \
# --app_name=clip \
# --save_all_checkpoints \
# --user_defined_parameters='pretrain_model_name_or_path=alibaba-pai/pai-clip-commercial-base-en'  

# 英文測試
sh run_clip_local.sh 0 evaluate_en

未來展望

在未來,我們計劃在EasyNLP框架中集成更多NLP的多模態的知識模型,覆蓋各個常見領域和任務,敬請期待。我們也將在EasyNLP框架中集成更多SOTA模型(特別是中⽂模型),來⽀持各種NLP和多模態任務。此外, 阿⾥雲機器學習PAI團隊也在持續推進多模態模型的⾃研⼯作,歡迎⽤戶持續關注我們,也歡迎加⼊ 我們的開源社區,共建NLP和多模態算法庫!

Github地址:https://github.com/alibaba/EasyNLP

Reference

  1. Wang C, Qiu M, Zhang T, et al. EasyNLP: A Comprehensive and Easy-to-use Toolkit for Natural Language Processing. arXiv, 2021.
  2. Radford A, Kim J W, Hallacy C, et al. Learning transferable visual models from natural language supervision. PMLR, 2021.
  3. Rostamzadeh N, Hosseini S, Boquet T, et al. Fashion-gen: The generative fashion dataset and challenge. arXiv, 2018.
  4. Gao D, Jin L, Chen B, et al. Fashionbert: Text and image matching with adaptive loss for cross-modal retrieval. ACM SIGIR, 2020: 2251-2260.
  5. Zhuge M, Gao D, Fan D P, et al. Kaleido-bert: Vision-language pre-training on fashion domain. CVPR, 2021: 12647-12657.
  6. Yu L, Chen J, Sinha A, et al. Commercemm: Large-scale commerce multimodal representation learning with omni retrieval. ACM SIGKDD, 2022: 4433-4442.
  7. Ma H, Zhao H, Lin Z, et al. EI-CLIP: Entity-Aware Interventional Contrastive Learning for E-Commerce Cross-Modal Retrieval. CVPR, 2022: 18051-18061.
  8. Li Y, Liang F, Zhao L, et al. Supervision Exists Everywhere: A Data Efficient Contrastive Language-Image Pre-training Paradigm. ICLR 2022.

阿里靈傑回顧

原文鏈接:https://click.aliyun.com/m/1000360458/

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章