<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 6371字,需瀏覽 13分鐘

           ·

          2021-12-17 16:42

          作者:Maarten Grootendorst

          翻譯:陳超

          校對:趙茹萱


          本文約3200字,建議閱讀5分鐘

          本文介紹了使用圖片主題進(jìn)行建模。

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

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

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

          圖片主題建模,你需要做的一切。圖片來自作者

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

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

          概念的logo。圖片來自作者

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

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

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

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

          如同你注意到的,我們可以通過他們的文本表征和視覺表征來解釋這些概念。真正的概念建模可以通過結(jié)合這些表征來提取。

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

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

          概念建模指南

          Concept是一種利用CLIP和基于BERTopic技術(shù)來對圖片和文本進(jìn)行概念建模的工具。
          (https://colab.research.google.com/drive/1XHwQPT2itZXu1HayvGoj60-xAXxg9mqe?usp=sharing)

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

          第一步:安裝Concept包

          我們可以通過PyPI輕松安裝Concept:


          pip install concept

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

          為了進(jìn)行概念建模,我們需要一些圖片來聚類。我們將在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)備好圖片之后,我們就可以在沒有任何文本的情況下在Concept包中使用它。然而,這并不會構(gòu)建任何文本化的表征。所以下一步是準(zhǔn)備我們的文本。

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

          Concept有趣的地方在于,任何文本都可以喂給這個(gè)模型。理想狀況下,我們想把跟手邊圖片最相關(guān)的文本喂給模型。我們通常會對我們圖片中的細(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)中,我們以兩個(gè)原因納入了50,000個(gè)隨機(jī)名詞。第一,不需要將英文詞典上出現(xiàn)的所有名詞都納入進(jìn)來,因?yàn)槲覀兛梢约俣?0,000詞應(yīng)該表征了充分的實(shí)體。第二,這可以加速計(jì)算過程,因?yàn)槲覀冃枰獜母俚膯卧~當(dāng)中提取嵌入。

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

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

          下一步就是訓(xùn)練模型啦!像通常一樣,我們相對直接一點(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ù)測概念。

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

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

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

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

          對那些想要嘗試這個(gè)demo但是沒有GPU使用權(quán)限的人來說,我們可以從sentence-Transformers站點(diǎn)來加載預(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)在是有趣的部分,對概念進(jìn)行可視化!

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

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

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

          fig?=?concept_model.visualize_concepts()

          view rawvisualize.py?hosted with ??by?GitHub


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

          我們數(shù)據(jù)集當(dāng)中的大部分圖片斗魚大自然有關(guān)。然而,如果我們再深入看一看更多有趣的概念:

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

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

          第六步:檢索概念

          我們可以通過嵌入一個(gè)檢索術(shù)語以及發(fā)現(xiàn)表征類的最佳特征來快速檢索特定概念。舉例來看,我們檢索沙灘(beach)這個(gè)術(shù)語來看看我們能找到什么。為了做到這一點(diǎ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è)是概念類,另一個(gè)是檢索術(shù)語相似性。返回前五個(gè)最相似的主題。

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

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

          view rawvisualize_search.py?hosted with ??by?GitHub



          檢索術(shù)語“beach”。圖片來自作者

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

          第七步:算法概覽

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

          概念算法概覽。圖片來自作者

          1.?嵌入圖片和文件

          我們通過使用OpenAI的CLIP模型將圖片和文件嵌入相同的向量空間開始。這允許我們在圖片和文本面前比較。文件包括文字,短語,句子等。一切你覺得可以表征概念類的最佳方式。

          2.?概念聚類

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

          3.?概念表征

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

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

          4.?多模態(tài)

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

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

          感謝您的閱讀!

          如果你想我一樣對AI,數(shù)據(jù)科學(xué)或者心理學(xué)感興趣,請?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

          編輯:王菁
          校對:楊學(xué)俊




          譯者簡介




          陳超,北京大學(xué)應(yīng)用心理碩士在讀。本科曾混跡于計(jì)算機(jī)專業(yè),后又在心理學(xué)的道路上不懈求索。越來越發(fā)現(xiàn)數(shù)據(jù)分析和編程已然成為了兩門必修的生存技能,因此在日常生活中盡一切努力更好地去接觸和了解相關(guān)知識,但前路漫漫,我仍在路上。

          翻譯組招募信息

          工作內(nèi)容:需要一顆細(xì)致的心,將選取好的外文文章翻譯成流暢的中文。如果你是數(shù)據(jù)科學(xué)/統(tǒng)計(jì)學(xué)/計(jì)算機(jī)類的留學(xué)生,或在海外從事相關(guān)工作,或?qū)ψ约和庹Z水平有信心的朋友歡迎加入翻譯小組。

          你能得到:定期的翻譯培訓(xùn)提高志愿者的翻譯水平,提高對于數(shù)據(jù)科學(xué)前沿的認(rèn)知,海外的朋友可以和國內(nèi)技術(shù)應(yīng)用發(fā)展保持聯(lián)系,THU數(shù)據(jù)派產(chǎn)學(xué)研的背景為志愿者帶來好的發(fā)展機(jī)遇。

          其他福利:來自于名企的數(shù)據(jù)科學(xué)工作者,北大清華以及海外等名校學(xué)生他們都將成為你在翻譯小組的伙伴。


          點(diǎn)擊文末“閱讀原文”加入數(shù)據(jù)派團(tuán)隊(duì)~



          轉(zhuǎn)載須知

          如需轉(zhuǎn)載,請?jiān)陂_篇顯著位置注明作者和出處(轉(zhuǎn)自:數(shù)據(jù)派ID:DatapiTHU),并在文章結(jié)尾放置數(shù)據(jù)派醒目二維碼。有原創(chuàng)標(biāo)識文章,請發(fā)送【文章名稱-待授權(quán)公眾號名稱及ID】至聯(lián)系郵箱,申請白名單授權(quán)并按要求編輯。

          發(fā)布后請將鏈接反饋至聯(lián)系郵箱(見下方)。未經(jīng)許可的轉(zhuǎn)載以及改編者,我們將依法追究其法律責(zé)任。



          點(diǎn)擊“閱讀原文”擁抱組織



          瀏覽 76
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美日韩在线免费观看 | 一区二区无码区 | 操大逼视频 | 欧美二级在线 | 国产精品久久久久久久久久久久午夜片 |