詞袋模型(文本/圖像的應(yīng)用)

冒泡~詞袋模型應(yīng)該是當(dāng)初畢設(shè)就想寫的一篇了吧...拖到現(xiàn)在。其實最近在思考我這樣輸出是否真的有用...因為自己的實踐太差了..但是不輸出的話 連理論都不會了 所以還是要努力鴨!
——————————————————

詞袋模型

詞袋模型即Bag-of-words model (BoW model) 最早出現(xiàn)在神經(jīng)語言程序?qū)W(NLP)和信息檢索(IR)領(lǐng)域。該模型忽略掉文本的語法和語序, 用一組無序的單詞(words)來表達(dá)一段文字或一個文檔,將其僅僅看做是一個詞集合,或者說是詞的一個組合,文本中每個詞的出現(xiàn)都是獨(dú)立的,不依賴于其他詞是否出現(xiàn)。近年來, BoW模型被廣泛應(yīng)用于計算機(jī)視覺中. 與應(yīng)用于文本的BoW類比, 圖像的特征(feature)被當(dāng)作單詞(Word),把圖像“文字化”之后,有助于大規(guī)模的圖像檢索。

文本實例

先舉個例子說明一下 詞袋模型在文本的實際應(yīng)用過程
例如有如下兩個文檔:
1.Bob likes to play basketball, Jim likes too.
2.Bob also likes to play football games.
基于這兩個文本文檔,構(gòu)造一個詞典:
Dictionary = {1:”Bob”, 2. “l(fā)ike”, 3. “to”, 4. “play”, 5. “basketball”, 6. “also”, 7. “football”, 8. “games”, 9. “Jim”, 10. “too”}。
可以看出:這個詞典一共包含10個不同的單詞,利用詞典的索引號,上面兩個文檔每一個都可以用一個10維向量表示(用整數(shù)數(shù)字0~n(n為正整數(shù))表示某個單詞在文檔中出現(xiàn)的次數(shù)):
1:[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
2:[1, 1, 1, 1 ,0, 1, 1, 1, 0, 0]
接下來可以將次數(shù)化為直方圖,我們查看文本中單詞的直方圖,即將每個單詞計數(shù)視為一個特征。如果文檔具有相似的內(nèi)容,則文檔是相似的,并且,僅從內(nèi)容中我們可以了解文檔的含義。

通過例子的簡單理解,可以發(fā)現(xiàn)詞袋模型涉及兩件事:
①已知單詞的詞匯。
②衡量已知單詞的存在。
它被稱為單詞的“ 包 ”,因為關(guān)于文檔中單詞的順序或結(jié)構(gòu)的任何信息都被丟棄。該模型僅關(guān)注文檔中是否出現(xiàn)已知單詞,而不是文檔中的位置。

詞袋可復(fù)雜性在于:如何設(shè)計已知單詞(或標(biāo)記)的詞匯?如何對已知單詞的存在進(jìn)行評分?
(可采用布爾值去評分看是否出現(xiàn))具體參考--你知道詞袋模型嗎?

圖像實例

那么如何將詞袋模型運(yùn)用到圖像分類上呢?其實,同理為了表示一幅圖像,我們可以將圖像看作文檔,即若干個“視覺詞匯”的集合,同樣的,視覺詞匯相互之間沒有順序。接下來做個詳解:
由于圖像中的詞匯不像文本文檔中的那樣是現(xiàn)成的,我們需要首先從圖像中提取出相互獨(dú)立的視覺詞匯,需經(jīng)過如下三個步驟:
①特征檢測②特征表示③單詞本的生成

同一類目標(biāo)的不同實例之間雖然存在差異,但我們?nèi)匀豢梢哉业剿鼈冎g的一些共同的地方,比如說人臉,雖然說不同人的臉差別比較大,但眼睛,嘴,鼻子等一些比較細(xì)小的部位,卻觀察不到太大差別,我們可以把這些不同實例(即眼睛、嘴等)之間共同的部位提取出來,作為識別這一類目標(biāo)的視覺詞匯。
SIFT算法是提取圖像中局部不變特征的應(yīng)用最廣泛的算法,因此我們可以用SIFT算法從圖像中提取不變特征點(diǎn),作為視覺詞匯,并構(gòu)造單詞表,用單詞表中的單詞表示一幅圖像。

接下來通過一個例子來敘述這個過程:
現(xiàn)在有三個目標(biāo)類,分別是人臉、自行車和吉他。
①利用SIFT算法,從每類圖像中提取視覺詞匯,將所有的視覺詞匯集合在一起,如下所示:

②利用K-Means算法構(gòu)造單詞表。K-Means算法是一種基于樣本間相似性度量的間接聚類方法,此算法以K為參數(shù),把N個對象分為K個簇,以使簇內(nèi)具有較高的相似度,而簇間相似度較低。SIFT提取的視覺詞匯向量之間根據(jù)距離的遠(yuǎn)近,可以利用K-Means算法將詞義相近的詞匯合并,作為單詞表中的基礎(chǔ)詞匯,假定我們將K設(shè)為4,那么單詞表的構(gòu)造過程如下圖所示:
③利用單詞表的中詞匯表示圖像。利用SIFT算法,可以從每幅圖像中提取很多個特征點(diǎn),這些特征點(diǎn)都可以用單詞表中的單詞近似代替,通過統(tǒng)計單詞表中每個單詞在圖像中出現(xiàn)的次數(shù),可以將圖像表示成為一個K=4維數(shù)值向量。
從上圖可以看到,我們從人臉、自行車和吉他三個目標(biāo)類圖像中提取出的不同視覺詞匯,而構(gòu)造的詞匯表中,會把詞義相近的視覺詞匯合并為同一類,經(jīng)過合并,詞匯表中只包含了四個視覺單詞,分別按索引值標(biāo)記為1,2,3,4。通過觀察可以看到,它們分別屬于自行車、人臉、吉他、人臉類。統(tǒng)計這些詞匯在不同目標(biāo)類中出現(xiàn)的次數(shù)可以得到每幅圖像的直方圖表示:
人臉: [3,30,3,20]
自行車:[20,3,3,2]
吉他: [8,12,32,7]

通過上面的例子可以發(fā)現(xiàn):這其實就是針對人臉、自行車和吉他這三個文檔,抽取出相似的部分(或者詞義相近的視覺詞匯合并為同一類),構(gòu)造一個詞典,詞典中包含4個視覺單詞,即Dictionary = {1:”自行車”, 2. “人臉”, 3. “吉他”, 4. “人臉類”},人臉、自行車和吉他這三個文檔皆可以用一個4維向量表示,最后根據(jù)三個文檔相應(yīng)部分出現(xiàn)的次數(shù)得到直方圖。
【補(bǔ)充說明:實際應(yīng)用中,為了達(dá)到較好的效果,單詞表中的詞匯數(shù)量K往往非常龐大,并且目標(biāo)類數(shù)目越多,對應(yīng)的K值也越大,一般情況下,K的取值在幾百到上千】
那么可以總結(jié)一下:
bow在圖像應(yīng)用上的步驟即為:sift→k-means→直方圖
參考來源:BOW 原理及代碼解析
代碼可以參考:使用詞袋模型對圖像進(jìn)行分類


八月最后一篇了~ending!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容