国产肉体XXXX裸体137大胆,国产成人久久精品流白浆,国产乱子伦视频在线观看,无码中文字幕免费一区二区三区 国产成人手机在线-午夜国产精品无套-swag国产精品-国产毛片久久国产

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 獨(dú)家 | 圖片主題建模?為什么不呢?!

獨(dú)家 | 圖片主題建模?為什么不呢?!

發(fā)布人:數(shù)據(jù)派THU 時(shí)間:2021-12-18 來(lái)源:工程師 發(fā)布文章

作者:Maarten Grootendorst

翻譯:陳超

校對(duì):趙茹萱

主題建模是一種允許用戶(hù)在無(wú)監(jiān)督情況下,在海量數(shù)據(jù)當(dāng)中尋找主題的一系列技術(shù)合集、在這些文件內(nèi)容當(dāng)中嘗試建模并跑EDA模型的時(shí)候是非常冒險(xiǎn)的一種行為。

之前我發(fā)明了一個(gè)主題建模技術(shù)叫做BERTopic,這種技術(shù)可以利用BERT和基于類(lèi)的TF-IDF來(lái)創(chuàng)建密集的類(lèi)用于易解釋主題。

一段時(shí)間之后,我開(kāi)始思考它在其他領(lǐng)域的可解釋性,比如計(jì)算機(jī)視覺(jué)。如果我們可以將其應(yīng)用于圖片主題建模那將是一件多么酷的事情呀!

1.png

圖片主題建模,你需要做的一切。圖片來(lái)自作者

這件事確實(shí)花了一些時(shí)間,但是若干實(shí)驗(yàn)之后,我想到了解決方法:Concept!

Concept是一個(gè)同時(shí)介紹圖片和文本主題建模概念的包。然而,由于主題通常指的是文本或者口語(yǔ),它通常不能很好地涵蓋圖片組的含義。我們這里將圖片組和文字都定義為概念。

2.png

概念的logo。圖片來(lái)自作者

因此,Concept包可以做Concept建模,這種建模是一種統(tǒng)計(jì)模型,用于在圖片集合以及相應(yīng)文件當(dāng)中發(fā)現(xiàn)抽象的概念。

概念模型是圖片和文本主題建模的泛化

為了讓你更好地了解,以下是從概念建模當(dāng)中抽取的概念:

3.png

由概念建模生成的多模態(tài)概念。圖片來(lái)自作者

如同你注意到的,我們可以通過(guò)他們的文本表征和視覺(jué)表征來(lái)解釋這些概念。真正的概念建??梢酝ㄟ^(guò)結(jié)合這些表征來(lái)提取。

概念建模允許一種概念的多模態(tài)表征

一圖勝千言。但是如果我們給圖片增加文字呢??jī)深?lèi)交流方法的協(xié)同作用(synergy)可以豐富概念的解釋和理解。

概念建模指南

Concept是一種利用CLIP和基于BERTopic技術(shù)來(lái)對(duì)圖片和文本進(jìn)行概念建模的工具。

(https://colab.research.google.com/drive/1XHwQPT2itZXu1HayvGoj60-xAXxg9mqe?usp=sharing)

在本文當(dāng)中,我將帶大家了解如何用Concept包構(gòu)建你自己的概念模型。你可以跟隨上方的Google Colab notebook鏈接一起學(xué)習(xí)。

第一步:安裝Concept包

我們可以通過(guò)PyPI輕松安裝Concept:

pip install concept

第二步:準(zhǔn)備好圖片

為了進(jìn)行概念建模,我們需要一些圖片來(lái)聚類(lèi)。我們將在UNsplash上下載25,000張圖片,這些圖片已經(jīng)被Sentence-Transformers包整理好了。

import os
import glob
import zipfile
from tqdm import tqdm
from sentence_transformers import util
# Download 25k images from Unsplash
img_folder = 'photos/'
if not os.path.exists(img_folder) or len(os.listdir(img_folder)) == 0:
    os.makedirs(img_folder, exist_ok=True)
    photo_filename = 'unsplash-25k-photos.zip'
    if not os.path.exists(photo_filename):   #Download dataset if does not exist
        util.http_get('http://sbert.net/datasets/'+photo_filename, photo_filename)
    #Extract all images
    with zipfile.ZipFile(photo_filename, 'r') as zf:
        for member in tqdm(zf.infolist(), desc='Extracting'):
            zf.extract(member, img_folder)
# Load image paths
img_names = list(glob.glob('photos/*.jpg'))
view rawload_images.py hosted with ? by GitHub

準(zhǔn)備好圖片之后,我們就可以在沒(méi)有任何文本的情況下在Concept包中使用它。然而,這并不會(huì)構(gòu)建任何文本化的表征。所以下一步是準(zhǔn)備我們的文本。

第三步:準(zhǔn)備好文本

Concept有趣的地方在于,任何文本都可以喂給這個(gè)模型。理想狀況下,我們想把跟手邊圖片最相關(guān)的文本喂給模型。我們通常會(huì)對(duì)我們圖片中的細(xì)節(jié)產(chǎn)生一些理解。

然而,事實(shí)卻并不總是如此順利。所以為了闡明目的,我們需要給模型喂英文詞典當(dāng)中的一堆詞:

import random
import nltk
nltk.download("wordnet")
from nltk.corpus import wordnet as wn
all_nouns = [word for synset in wn.all_synsets('n') for word in synset.lemma_names()
             if "_" not in word]
selected_nouns = random.sample(all_nouns, 50_000)
view rawprepare_text.py hosted with ? by GitHub

在上述文本當(dāng)中,我們以?xún)蓚€(gè)原因納入了50,000個(gè)隨機(jī)名詞。第一,不需要將英文詞典上出現(xiàn)的所有名詞都納入進(jìn)來(lái),因?yàn)槲覀兛梢约俣?0,000詞應(yīng)該表征了充分的實(shí)體。第二,這可以加速計(jì)算過(guò)程,因?yàn)槲覀冃枰獜母俚膯卧~當(dāng)中提取嵌入。

從實(shí)踐角度來(lái)看,如果你有已知與圖片相關(guān)的文本數(shù)據(jù),用他們替代名詞即可。

第四步:訓(xùn)練模型

下一步就是訓(xùn)練模型啦!像通常一樣,我們相對(duì)直接一點(diǎn)兒。只需將每個(gè)圖片的路徑和我們選擇的名詞提供給模型:

from concept import ConceptModel
concept_model = ConceptModel()
concepts = concept_model.fit_transform(img_names, docs=selected_nouns)
view rawtrain_concept.py hosted with ? by GitHub

Concept變量包括了每幅圖的預(yù)測(cè)概念。

劃線的概念模型是Openai的CLIP,這是一個(gè)訓(xùn)練大量圖片和文本對(duì)的神經(jīng)網(wǎng)絡(luò)。這意味著模型在生成嵌入時(shí)受益于使用GPU。

最后,運(yùn)行concept_model.frequency來(lái)看一下包括概念頻率的數(shù)據(jù)框。

注意:使用Concept(embedding_model="clip-ViT-B-32-multilingual-v1")來(lái)選擇一個(gè)支持50+種語(yǔ)言的模型!

預(yù)訓(xùn)練圖片嵌入

對(duì)那些想要嘗試這個(gè)demo但是沒(méi)有GPU使用權(quán)限的人來(lái)說(shuō),我們可以從sentence-Transformers站點(diǎn)來(lái)加載預(yù)訓(xùn)練的圖像嵌入:

import pickle
from sentence_transformers import util
# Load pre-trained image embeddings
emb_filename = 'unsplash-25k-photos-embeddings.pkl'
if not os.path.exists(emb_filename):   #Download dataset if does not exist
    util.http_get('http://sbert.net/datasets/'+emb_filename, emb_filename)
with open(emb_filename, 'rb') as fIn:
    img_names, image_embeddings = pickle.load(fIn)
img_names = [f"photos/{path}" for path in img_names]
view rawpretrained_embeddings.py hosted with ? by GitHub

之后,我們將預(yù)訓(xùn)練的嵌入添加到模型中并訓(xùn)練它:

from concept import ConceptModel
# Train Concept using the pre-trained image embeddings
concept_model = ConceptModel()
concepts = concept_model.fit_transform(img_names,
                                       image_embeddings=image_embeddings,
                                       docs=selected_nouns)
view rawpretrained_modeling.py hosted with ? by GitHub

第五步:概念可視化

現(xiàn)在是有趣的部分,對(duì)概念進(jìn)行可視化!

就像之前提到的,最終的概念是多模態(tài)的,也就是說(shuō)包括了視覺(jué)和文本化雙重本質(zhì)。我們需要找到一種方式來(lái)從單一視角來(lái)表征兩者。

為了做到這一點(diǎn),我們選取了一些最能表征每個(gè)概念的一組圖片,并找到最能表征這些圖片的名詞。

通常,我們會(huì)以如下直觀方式創(chuàng)建可視化:

fig = concept_model.visualize_concepts()
view rawvisualize.py hosted with ? by GitHub

4.png

九個(gè)最常用的概念可視化。圖片來(lái)自作者

我們數(shù)據(jù)集當(dāng)中的大部分圖片斗魚(yú)大自然有關(guān)。然而,如果我們?cè)偕钊肟匆豢锤嘤腥さ母拍睿?/p>

5.png

更常見(jiàn)的概念,標(biāo)記概念多樣性。圖片來(lái)自作者

以上結(jié)果為如何在概念建模中直觀地思考概念提供了一個(gè)漂亮的例子。我們不僅可以通過(guò)圖片集來(lái)看可視化表征,也可以通過(guò)文本表征來(lái)幫助我們更深入地理解我們可以在這些概念當(dāng)中發(fā)現(xiàn)的內(nèi)容。

第六步:檢索概念

我們可以通過(guò)嵌入一個(gè)檢索術(shù)語(yǔ)以及發(fā)現(xiàn)表征類(lèi)的最佳特征來(lái)快速檢索特定概念。舉例來(lái)看,我們檢索沙灘(beach)這個(gè)術(shù)語(yǔ)來(lái)看看我們能找到什么。為了做到這一點(diǎn),我們可以簡(jiǎn)單地運(yùn)行以下代碼:

>>> search_results =concept_model.find_concepts("beach")
>>> search_results
[(100, 0.277577825349102),
 (53, 0.27431058773894657),
 (95, 0.25973751319723837),
 (77, 0.2560122597417548),
 (97, 0.25361988261846297)]
view rawsearch.py hosted with ? by GitHub

每一個(gè)元組包含兩個(gè)值,第一個(gè)是概念類(lèi),另一個(gè)是檢索術(shù)語(yǔ)相似性。返回前五個(gè)最相似的主題。

現(xiàn)在,讓我們對(duì)概念進(jìn)行可視化來(lái)看看這個(gè)檢索函數(shù)是如何工作的:

fig = concept_model.visualize_concepts(concepts=[concept for concept, _ in search_results])

view rawvisualize_search.py hosted with ? by GitHub

6.png

檢索術(shù)語(yǔ)“beach”。圖片來(lái)自作者

我們可以看到,結(jié)果概念與我們的檢索術(shù)語(yǔ)非常相似!多模態(tài)的模型本質(zhì)使得我們可以輕易地檢索到概念和圖片。

第七步:算法概覽

對(duì)于那些對(duì)概念機(jī)制感興趣的朋友,以下為創(chuàng)造結(jié)果概念的方法抽象概覽:

7.png

概念算法概覽。圖片來(lái)自作者

1. 嵌入圖片和文件

我們通過(guò)使用OpenAI的CLIP模型將圖片和文件嵌入相同的向量空間開(kāi)始。這允許我們?cè)趫D片和文本面前比較。文件包括文字,短語(yǔ),句子等。一切你覺(jué)得可以表征概念類(lèi)的最佳方式。

2. 概念聚類(lèi)

使用UMAP+HDBSCAN,我們可以聚類(lèi)圖片特征并創(chuàng)建視覺(jué)和語(yǔ)義相似的類(lèi)。我們指的是那些表征多模態(tài)本質(zhì)的概念類(lèi)。

3. 概念表征

為了表征這些概念類(lèi),我們選取與每個(gè)概念最相關(guān)的圖片,叫做范例(exemplar)。依賴(lài)于概念類(lèi)的大小,每個(gè)類(lèi)里范例的數(shù)量可能會(huì)超過(guò)幾百,因此需要一個(gè)過(guò)濾器。

我們使用MMR來(lái)選擇那些與概念特征最相關(guān)但是彼此之間仍然充分不相似的圖片。這樣,我們可以盡可能多地來(lái)展示這個(gè)概念。選中的圖片將合稱(chēng)為單圖來(lái)創(chuàng)建單個(gè)可視化表征。

4. 多模態(tài)

最后,我們提取文本特征并與創(chuàng)建的概念類(lèi)特征進(jìn)行比較。使用余弦相似性,我們選出那些最相關(guān)的特征。將多模態(tài)引入概念表征之中。

注意:使用 c-TF-IDF的 concept_model = ConceptModel(ctfidf=True) 提取文本表征也是一種選擇。

感謝您的閱讀!

如果你想我一樣對(duì)AI,數(shù)據(jù)科學(xué)或者心理學(xué)感興趣,請(qǐng)?jiān)贚inkedIn

(https://www.linkedin.com/in/mgrootendorst/)

上添加我或者關(guān)注我的Twitter(https://twitter.com/MaartenGr)。

你可以在下方找到Concept包,以及它的文件:

概念建模:文本和圖片主題建模(https://github.com/MaartenGr/Concept)

概念文檔(https://maartengr.github.io/Concept/)

原文標(biāo)題:

Topic Modeling on Images? Why Not?! 

原文鏈接:

https://towardsdatascience.com/topic-modeling-on-images-why-not-aad331d03246

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。

三維掃描儀相關(guān)文章:三維掃描儀原理


關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉