偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一文讀懂多模態(tài) embeddings

人工智能 開(kāi)發(fā)
在本文中,我將討論多模態(tài) embeddings ,并通過(guò)兩個(gè)實(shí)際用例分享它們的功能。

傳統(tǒng)上,AI研究被劃分為不同的領(lǐng)域:自然語(yǔ)言處理(NLP)、計(jì)算機(jī)視覺(jué)(CV)、機(jī)器人學(xué)、人機(jī)交互(HCI)等。然而,無(wú)數(shù)實(shí)際任務(wù)需要整合這些不同的研究領(lǐng)域,例如自動(dòng)駕駛汽車(CV + 機(jī)器人學(xué))、AI代理(NLP + CV + HCI)、個(gè)性化學(xué)習(xí)(NLP + HCI)等。

盡管這些領(lǐng)域旨在解決不同的問(wèn)題并處理不同的數(shù)據(jù)類型,但它們都共享一個(gè)基本過(guò)程。即生成現(xiàn)實(shí)世界現(xiàn)象的有用數(shù)值表示。

歷史上,這是手工完成的。這意味著研究人員和從業(yè)者會(huì)利用他們(或其他人)的專業(yè)知識(shí),將數(shù)據(jù)顯式轉(zhuǎn)換為更有用的形式。然而,今天,這些可以通過(guò)另一種方式獲得。在本文中,我將討論多模態(tài)embeddings,并通過(guò)兩個(gè)實(shí)際用例分享它們的功能。

Embeddings

embeddings是通過(guò)模型訓(xùn)練隱式學(xué)習(xí)的數(shù)據(jù)的有用數(shù)值表示。例如,通過(guò)學(xué)習(xí)如何預(yù)測(cè)文本,BERT學(xué)習(xí)了文本的表示,這些表示對(duì)許多NLP任務(wù)很有幫助[1]。另一個(gè)例子是Vision Transformer(ViT),它在Image Net上進(jìn)行圖像分類訓(xùn)練,可以重新用于其他應(yīng)用[2]。

這里的一個(gè)關(guān)鍵點(diǎn)是,這些學(xué)習(xí)到的embeddings空間將具有一些底層結(jié)構(gòu),使得相似的概念彼此接近。如下面的玩具示例所示。

文本和圖像embeddings的表示

前面提到的模型的一個(gè)關(guān)鍵限制是它們僅限于單一數(shù)據(jù)模態(tài),例如文本或圖像。這阻止了跨模態(tài)應(yīng)用,如圖像字幕生成、內(nèi)容審核、圖像搜索等。但如果我們可以合并這兩種表示呢?

多模態(tài) Embeddings

盡管文本和圖像在我們看來(lái)可能非常不同,但在神經(jīng)網(wǎng)絡(luò)中,它們通過(guò)相同的數(shù)學(xué)對(duì)象(即向量)表示。因此,原則上,文本、圖像或任何其他數(shù)據(jù)模態(tài)都可以由單個(gè)模型處理。

這一事實(shí)是多模態(tài)embeddings的基礎(chǔ),它將多個(gè)數(shù)據(jù)模態(tài)表示在同一向量空間中,使得相似的概念位于相近的位置(獨(dú)立于它們的原始表示)。

多模態(tài)embeddings空間的表示

例如,CLIP將文本和圖像編碼到共享的embeddings空間中[3]。CLIP的一個(gè)關(guān)鍵見(jiàn)解是,通過(guò)對(duì)齊文本和圖像表示,模型能夠在任意一組目標(biāo)類上進(jìn)行零樣本圖像分類,因?yàn)槿魏屋斎胛谋径伎梢员灰暈轭悩?biāo)簽(我們將在后面看到一個(gè)具體示例)。

然而,這個(gè)想法不僅限于文本和圖像。幾乎任何數(shù)據(jù)模態(tài)都可以以這種方式對(duì)齊,例如文本-音頻、音頻-圖像、文本-腦電圖、圖像-表格和文本-視頻。這解鎖了視頻字幕生成、高級(jí)OCR、音頻轉(zhuǎn)錄、視頻搜索和腦電圖到文本等用例[4]。

對(duì)比學(xué)習(xí)

對(duì)齊不同embeddings空間的標(biāo)準(zhǔn)方法是對(duì)比學(xué)習(xí)(CL)。CL的一個(gè)關(guān)鍵直覺(jué)是相似地表示相同信息的不同視圖[5]。

這包括學(xué)習(xí)表示,以最大化正對(duì)之間的相似性并最小化負(fù)對(duì)的相似性。在圖像-文本模型的情況下,正對(duì)可能是帶有適當(dāng)標(biāo)題的圖像,而負(fù)對(duì)可能是帶有不相關(guān)標(biāo)題的圖像(如下所示)。

對(duì)比訓(xùn)練中使用的正對(duì)和負(fù)對(duì)示例

CL的兩個(gè)關(guān)鍵方面促成了其有效性:

  • 由于正對(duì)和負(fù)對(duì)可以從數(shù)據(jù)的固有結(jié)構(gòu)(例如,網(wǎng)絡(luò)圖像的元數(shù)據(jù))中策劃,CL訓(xùn)練數(shù)據(jù)不需要手動(dòng)標(biāo)記,這解鎖了更大規(guī)模的訓(xùn)練和更強(qiáng)大的表示[3]。
  • 它通過(guò)特殊的損失函數(shù)同時(shí)最大化正對(duì)和最小化負(fù)對(duì)的相似性,如CLIP所示[3]。

CLIP用于文本-圖像表示對(duì)齊的對(duì)比損失[3]

示例代碼:使用CLIP進(jìn)行零樣本分類和圖像搜索

在了解了多模態(tài)embeddings的工作原理后,讓我們看看它們可以做的兩個(gè)具體示例。在這里,我將使用開(kāi)源的CLIP模型執(zhí)行兩個(gè)任務(wù):零樣本圖像分類和圖像搜索。

這些示例的代碼在GitHub倉(cāng)庫(kù)中免費(fèi)提供:https://github.com/ShawhinT/YouTube-Blog/tree/main/multimodal-ai/2-mm-embeddings。

用例1:零樣本圖像分類

使用CLIP進(jìn)行零樣本圖像分類的基本思想是將圖像與一組可能的類標(biāo)簽一起傳遞給模型。然后,通過(guò)評(píng)估哪個(gè)文本輸入與輸入圖像最相似來(lái)進(jìn)行分類。

我們首先導(dǎo)入Hugging Face Transformers庫(kù),以便可以在本地下載CLIP模型。此外,PIL庫(kù)用于在Python中加載圖像。

from transformers import CLIPProcessor, CLIPModel
from PIL import Image

接下來(lái),我們可以導(dǎo)入一個(gè)版本的clip模型及其相關(guān)的數(shù)據(jù)處理器。注意:處理器處理輸入文本的標(biāo)記化和圖像準(zhǔn)備。

# import model
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch16")

# import processor (handles text tokenization and image preprocessing)
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch16")

我們加載下面的貓的圖像,并創(chuàng)建兩個(gè)可能的類標(biāo)簽列表:“一張貓的照片”或“一張狗的照片”。

# load image
image = Image.open("images/cat_cute.png")

# define text classes
text_classes = ["a photo of a cat", "a photo of a dog"]

輸入的貓照片

接下來(lái),我們將預(yù)處理圖像/文本輸入并將它們傳遞給模型。

# pass image and text classes to processor
inputs = processor(text=text_classes, images=image, return_tensors="pt", 
                                                    padding=True)

# pass inputs to CLIP
outputs = model(**inputs) # note: "**" unpacks dictionary items

要進(jìn)行類預(yù)測(cè),我們必須提取圖像logits并評(píng)估哪個(gè)類對(duì)應(yīng)于最大值。

# image-text similarity score
logits_per_image = outputs.logits_per_image 
# convert scores to probs via softmax
probs = logits_per_image.softmax(dim=1) 

# print prediction
predicted_class = text_classes[probs.argmax()]
print(predicted_class, "| Probability = ", 
                       round(float(probs[0][probs.argmax()]),4))
>> a photo of a cat | Probability =  0.9979

模型以99.79%的概率準(zhǔn)確識(shí)別出這是一張貓的照片。然而,這是一個(gè)非常簡(jiǎn)單的例子。讓我們看看當(dāng)我們將類標(biāo)簽更改為:“丑貓”和“可愛(ài)貓”時(shí)會(huì)發(fā)生什么。

>> cute cat | Probability =  0.9703

模型輕松識(shí)別出圖像確實(shí)是一只可愛(ài)的貓。讓我們做一些更具挑戰(zhàn)性的標(biāo)簽,例如:“貓表情包”或“非貓表情包”。

>> not cat meme | Probability =  0.5464

雖然模型對(duì)這個(gè)預(yù)測(cè)的信心較低,只有54.64%的概率,但它正確地暗示了圖像不是表情包。

用例2:圖像搜索

CLIP的另一個(gè)應(yīng)用基本上是用例1的逆過(guò)程。與其識(shí)別哪個(gè)文本標(biāo)簽與輸入圖像匹配,我們可以評(píng)估哪個(gè)圖像(在一組中)與文本輸入(即查詢)最匹配——換句話說(shuō),在圖像上執(zhí)行搜索。我們首先將一組圖像存儲(chǔ)在列表中。在這里,我有三張貓、狗和山羊的圖像。

# create list of images to search over
image_name_list = ["images/cat_cute.png", "images/dog.png", "images/goat.png"]

image_list = []
for image_name in image_name_list:
    image_list.append(Image.open(image_name))

接下來(lái),我們可以定義一個(gè)查詢,如“一只可愛(ài)的狗”,并將其與圖像一起傳遞給CLIP。

# define a query
query = "a cute dog"

# pass images and query to CLIP
inputs = processor(text=query, images=image_list, return_tensors="pt", 
                                                  padding=True)

然后,我們可以通過(guò)提取文本logits并評(píng)估對(duì)應(yīng)于最大值的圖像來(lái)將最佳圖像與輸入文本匹配。

# compute logits and probabilities
outputs = model(**inputs)
logits_per_text = outputs.logits_per_text
probs = logits_per_text.softmax(dim=1)


# print best match
best_match = image_list[probs.argmax()]
prob_match = round(float(probs[0][probs.argmax()]),4)


print("Match probability: ",prob_match)
display(best_match)
>> Match probability:  0.9817

查詢“一只可愛(ài)的狗”的最佳匹配

我們看到(再次)模型在這個(gè)簡(jiǎn)單示例中表現(xiàn)出色。但讓我們嘗試一些更棘手的例子。

query = "something cute but metal ??"
>> Match probability:  0.7715

查詢“可愛(ài)但金屬的東西??”的最佳匹配

query = "a good boy"
>> Match probability:  0.8248

查詢“一個(gè)好男孩”的最佳匹配

query = "the best pet in the world"
>> Match probability:  0.5664

查詢“世界上最好的寵物”的最佳匹配

盡管最后一個(gè)預(yù)測(cè)頗具爭(zhēng)議,但所有其他匹配都非常準(zhǔn)確。這可能是因?yàn)橄襁@樣的圖像在互聯(lián)網(wǎng)上無(wú)處不在,因此在CLIP的預(yù)訓(xùn)練中被多次看到。

接下來(lái)可以做什么?

多模態(tài)embeddings解鎖了涉及多個(gè)數(shù)據(jù)模態(tài)的無(wú)數(shù)AI用例。在這里,我們看到了兩個(gè)這樣的用例,即使用CLIP進(jìn)行零樣本圖像分類和圖像搜索。像CLIP這樣的模型的另一個(gè)實(shí)際應(yīng)用是多模態(tài)RAG,它包括自動(dòng)檢索多模態(tài)上下文到LLM。在本系列的下一篇文章中,我們將了解其內(nèi)部工作原理并回顧一個(gè)具體示例。

【參考文獻(xiàn)】

  • [1] BERT:https://arxiv.org/abs/1810.04805
  • [2] ViT:https://arxiv.org/abs/2010.11929
  • [3] CLIP:https://arxiv.org/abs/2103.00020
  • [4] Thought2Text: 使用大型語(yǔ)言模型(LLMs)從腦電圖信號(hào)生成文本:https://arxiv.org/abs/2410.07507
  • [5] 對(duì)比學(xué)習(xí)視覺(jué)表示的簡(jiǎn)單框架:https://arxiv.org/abs/2002.05709
責(zé)任編輯:趙寧寧 來(lái)源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2021-08-09 10:20:04

Thanos監(jiān)控架構(gòu)

2021-08-27 10:14:16

Thanos監(jiān)控開(kāi)源

2025-03-25 09:06:11

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領(lǐng)云

2024-11-13 09:39:13

2022-10-20 08:01:23

2021-12-29 18:00:19

無(wú)損網(wǎng)絡(luò)網(wǎng)絡(luò)通信網(wǎng)絡(luò)

2023-11-27 17:35:48

ComponentWeb外層

2022-07-05 06:30:54

云網(wǎng)絡(luò)網(wǎng)絡(luò)云原生

2023-05-20 17:58:31

低代碼軟件

2022-07-26 00:00:03

語(yǔ)言模型人工智能

2022-12-01 17:23:45

2022-09-22 09:00:46

CSS單位

2025-04-03 10:56:47

2018-09-28 14:06:25

前端緩存后端

2022-11-06 21:14:02

數(shù)據(jù)驅(qū)動(dòng)架構(gòu)數(shù)據(jù)

2019-06-13 21:31:19

AI

2019-08-23 12:12:49

MQ消息隊(duì)列

2021-04-06 11:03:12

加密貨幣比特幣貨幣
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)