语义分析的一些方法(下篇)
3 圖片語義分析
3.1 圖片分類
圖片分類是一個最基本的圖片語義分析方法。
基于深度學習的圖片分類
傳統的圖片分類如下圖所示,首先需要先手工提取圖片特征,譬如SIFT, GIST,再經由VQ coding和Spatial pooling,最后送入傳統的分類模型(例如SVM等)。
圖23. 傳統圖片分類流程圖
傳統方法里,人工特征提取是一個巨大的消耗性工作。而隨著深度學習的進展,不再需要人工特征,通過深度學習自動提取特征成為一種可能。接下來主要講述卷積神經網絡在圖片分類上的使用。
下圖是一個經典的卷積神經網絡模型圖,由Hinton和他的學生Alex Krizhevsky在ILSVRC(Imagenet Large Scale Visual Recognition Competition) 2012中提出。 整個網絡結構包括五層卷積層和三層全連接層,網絡的最前端是輸入圖片的原始像素點,最后端是圖片的分類結果。一個完整的卷積層可能包括一層convolution,一層Rectified Linear Units,一層max-pooling,一層normalization。
圖24. 卷積神經網絡結構圖
對于每一層網絡,具體的網絡參數配置如下圖所示。InputLayer就是輸入圖片層,每個輸入圖片都將被縮放成227*227大小,分rgb三個顏色維度輸入。Layer1~ Layer5是卷積層,以Layer1為例,卷積濾波器的大小是11*11,卷積步幅為4,本層共有96個卷積濾波器,本層的輸出則是96個55*55大小的圖片。在Layer1,卷積濾波后,還接有ReLUs操作和max-pooling操作。Layer6~ Layer8是全連接層,相當于在五層卷積層的基礎上再加上一個三層的全連接神經網絡分類器。以Layer6為例,本層的神經元個數為4096個。Layer8的神經元個數為1000個,相當于訓練目標的1000個圖片類別。
圖25. CNN網絡參數配置圖
基于Alex Krizhevsky提出的cnn模型,在13年末的時候,我們實現了用于廣點通的圖片分類和圖片檢索(可用于廣告圖片作弊判別),下面是一些示例圖。
圖片分類示例:
圖26. 圖片分類示例圖
圖片檢索示例:
圖27. 圖片檢索示例圖
圖片分類上的最新進展
在ILSVRC 2012中,Alex Krizhevsky基于GPU實現了上述介紹的,這個有60million參數的模型(簡稱為AlexNet),贏得了第一名。這個工作是開創性的,它引領了接下來ILSVRC的風潮。2013年,Clarifai通過cnn模型可視化技術調整網絡架構,贏得了ILSVRC。2014年,google也加入進來,它通過增加模型的層數(總共22層),讓深度更深[48],并且利用multi-scale data training,取得第一名。baidu最近通過更加“粗暴”的模型[44],在GooLeNet的基礎上,又提升了10%,top–5錯誤率降低至6%以下。具體結果如下圖所示。
圖28. ImageNet Classification Result
先簡單分析一下“GoogLeNet”[48,51]所采用的方法:
- 大大增加的網絡的深度,并且去掉了最頂層的全連接層:因為全連接層(Fully Connected)幾乎占據了CNN大概90%的參數,但是同時又可能帶來過擬合(overfitting)的效果。
- 模型比以前AlexNet的模型大大縮小,并且減輕了過擬合帶來的副作用。Alex模型參數是60M,GoogLeNet只有7M。
- 對于google的模型,目前已有開源的實現,有興趣請點擊Caffe+GoogLeNet。
再分析一下“Deep Image by baidu[44]”所采用的方法:
- Hardware/Software Co-design。baidu基于GPU,利用36個服務節點開發了一個專為深度學習運算的supercompter(名叫Minwa,敏媧)。這臺supercomputer具備TB級的host memory,超強的數據交換能力,使能訓練一個巨大的深層神經網絡成為可能。而要訓練如此巨大的神經網絡,除了硬件強大外,還需要高效的并行計算框架。通常而言,都要從data-parallelism和model-data parallelism兩方面考慮。
- data-parallelism:訓練數據被分成N份。每輪迭代里,各個GPU基于各自的訓練數據計算梯度,最后累加所有梯度數據并廣播到所有GPU。
- model-data parallelism:考慮到卷積層參數較少但消耗計算量,而全連接層參數相對比較多。所以卷積層參數以local copy的形式被每個GPU所持有,而全連接層的參數則被劃分到各個CPU。每輪迭代里,卷積層計算可以由各個GPU獨立完成,全連接層計算需要由所有GPU配合完成,具體方法請參考[46]。
- Data augmentation。訓練一個如此巨大的神經網絡(100billion個參數),如果沒有充分的訓練數據,模型將很大可能陷入過擬合,所以需要采用眾多data augmentation方法增加訓練數據,例如:剪裁,不同大小,調亮度,飽和度,對比度,偏色等(color casting, vignetting, lens distortion, rotation, flipping, cropping)。舉個例子,一個彩色圖片,增減某個顏色通道的intensity值,就可以生成多張圖片,但這些圖片和原圖的類目是一致的,相當于增加了訓練數據。
- Multi-scale training:訓練不同輸入圖片尺度下(例如512*512,256*256)的多個模型,最后ensemble多個模型的輸出結果。
3.2 Image2text,Image2sentence
上面講述的圖片分類對圖片語義的理解比較粗粒度,那么我們會想,是否可以將圖片直接轉化為一堆詞語或者一段文本來描述。轉化到文本后,我們積累相對深的文本處理技術就都可以被利用起來。
Image2text
首先介紹一種樸素的基于卷積神經網絡的image to text方法。
- 首先它利用深度卷積神經網絡和深度自動編碼器提取圖片的多層特征,并據此提取圖片的visual word,建立倒排索引,產生一種有效而準確的圖片搜索方法。
- 再充分利用大量的互聯網資源,預先對大量種子圖片做語義分析,然后利用相似圖片搜索,根據相似種子圖片的語義推導出新圖片的語義。
其中種子圖片,就是可以覆蓋所有待研究圖片的行業,但較容易分析語義的圖片集。這種方法產生了更加豐富而細粒度的語義表征結果。雖說簡單,但效果仍然不錯,方法的關鍵在于種子圖片。利用比較好的種子圖片(例如paipai數據),簡單的方法也可以work得不錯。下圖是該方法的效果圖。
圖29. 圖片語義tag標注示例圖
上面的baseline方法,在訓練數據優質且充分的情況下,可以取得很不錯的圖片tag提取效果,而且應用也非常廣泛。但上面的方法非常依賴于訓練數據,且不善于發現訓練數據之外的世界。
另一個直觀的想法,是否可以通過word embedding建立image與text的聯系[26]。例如,可以先利用CNN訓練一個圖片分類器。每個類目label可以通過word2vec映射到一個embedding表示。對于一個新圖片,先進行分類,然后對top-n類目label所對應的embedding按照權重(這里指這個類目所屬的概率)相加,得到這個圖片的embedding描述,然后再在word embedding空間里尋找與圖片embedding最相關的words。
Image detection
接下來再介紹下image detection。下圖是一個image detection的示例,相比于圖片分類,提取到信息將更加豐富。
圖30. 圖片detection示例
目前最先進的detection方法應該是Region-based CNN(簡稱R-CNN)[75],是由Jeff Donahue和Ross Girshick提出的。R-CNN的具體想法是,將detection分為尋找object和識別object兩個過程。在第一步尋找object,可以利用很多region detection算法,譬如selective search[76],CPMC,objectness等,利用很多底層特征,譬如圖像中的色塊,圖像中的邊界信息。第二步識別object,就可以利用“CNN+SVM”來做分類識別。
圖31. Image detection系統框圖
- 給定一張圖片,利用selective search方法[76]來產生2000個候選窗口。
- 然后利用CNN進行對每一個候選窗口提取特征(取全連接層的倒數第一層),特征長度為4096。
- 最后用SVM分類器對這些特征進行分類(每一個目標類別一個SVM分類器),SVM的分類器的參數個數為:4096*N,其中N為目標的類別個數,所以比較容易擴展目標類別數。
這里有R-CNN的實現,請點擊rcnn code
Image2sentence
那能否通過深度學習方法,直接根據image產生sentence呢?我們先看一組實際效果,如下圖所示(copy from 文獻[43])。
圖32. image2sentence示例圖
關于這個方向,最近一年取得了比較大的突破,工業界(Baidu[77],Google[43],Microsoft[80,81]等)和學術界(Stanford[35],Borkeley[79],UML[19],Toronto[78]等)都發表了一系列論文。
簡單歸納一下,對這個問題,主要有兩種解決思路:
- Pipeline方法。這個思路相對直觀一點,先學習到image中visual object對應的word(如上一節image detection所述),再加上language model,就可以生成sentence。這種方法各個模塊可以獨立調試,相對來說,更靈活一點。如下圖所示,這是microsoft的一個工作[81],它分為三步:(1)利用上一節提到的思路detect words;(2)基于language model(RNN or LSTM)產生句子;(3)利用相關性模型對句子打分排序。
圖33. “pipeline” image captioning
- End-to-end方法,即通過一個模型直接將image轉換到sentence。google基于CNN+RNN開發了一個Image Caption Generator[43]。這個工作主要受到了基于RNN的機器翻譯[27][42]的啟發。在機器翻譯中,“encoder” RNN讀取源語言的句子,將其變換到一個固定長度的向量表示,然后“decoder” RNN將向量表示作為隱層初始值,產生目標語言的句子。那么一個直觀的想法是,能否復用上面的框架,考慮到CNN在圖片特征提取方面的成功應用,將encoder RNN替換成CNN,先利用CNN將圖片轉換到一個向量表示,再利用RNN將其轉換到sentence。可以通過圖片分類提前訓練好CNN模型,將CNN最后一個隱藏層作為encoder RNN的輸入,從而產生句子描述。如下圖所示。
圖34. “CNN+LSTM” Image Caption Generator
Li-Feifei團隊在文獻[35]也提到一種image2sentence方法,如下圖所示。與google的做法類似,圖片的CNN特征作為RNN的輸入。
圖35. “CNN+RNN”生成圖片描述
此方法有開源實現,有興趣請參考:neuraltalk
3.3 訓練深度神經網絡的tricks
考慮到圖片語義分析的方法大部分都是基于深度學習的,Hinton的學生Ilya Sutskever寫了一篇深度學習的綜述文章[47],其中提到了一些訓練深度神經網絡的tricks,整理如下:
- 保證訓練數據的質量
- 使訓練數據各維度數值的均值為0,方差為一個比較小的值
- 訓練時使用minbatch,但不要設得過大,在合理有效的情況下,越小越好。
- 梯度歸一化,將梯度值除于minbatch size。
- 設置一個正常的learning rate,validation無提升后,則將原learning rate除于5繼續
- 模型參數隨機初始化。如果是深層神經網絡,不要設置過小的random weights。
- 如果是在訓練RNN or LSTM,對梯度設置一個限值,不能超過15 or 5。
- 注意檢查梯度計算的正確性
- 如果是訓練LSTM,initialize the biases of the forget gates of the LSTMs to large values
- Data augmentation很實用。
- Dropout在訓練時很有效,不過記得測試時關掉Dropout。
- Ensembling。訓練多個神經網絡,最后計算它們的預測值的平均值。
4 總結
4.1 語義分析方法在實際業務中的使用
前面講述了很多語義分析方法,接下來我們看看如何利用這些方法幫忙我們的實際業務,這里舉一個例子,用戶廣告的語義匹配。
在廣點通系統中,用戶與廣告的關聯是通過定向條件來匹配的,譬如某些廣告定向到“北京+男性”,那么當“北京+男性”的用戶來到時,所有符合定向的廣告就將被檢索出,再按照“ecpm*quality”排序,將得分最高的展示給用戶。但是憑借一些人口屬性,用戶與廣告之間的匹配并不精確,做不到“廣告就是想用戶所想”,所以用戶和廣告的語義分析就將派上用場了,可以從這樣兩方面來說明:
- 特征提取。基于上面介紹的方法,提取用戶和廣告的語義特征。
- 用戶語義特征。可以從用戶的搜索,購物,點擊,閱讀記錄中發現用戶興趣。考慮到最終的用戶描述都是文本,那么文本topic分析,文本分類,文本keyword提取,文本核心term提取都可以運用起來,分析出用戶的語義屬性,還可以利用矩陣分解和文本分類找到相似用戶群。
- 廣告語義特征。在廣點通里,廣告可以從兩個維度來描述,一方面是文本,包括廣告title和landing page,另一方面是廣告展示圖片。利用文本和圖片的語義分析方法,我們可以提取出廣告的topic,類目,keyword,tag描述。
- 語義匹配。提取到相應的語義特征之后,怎么用于改善匹配呢?
- 用戶-廣告的語義檢索。基于keyword、類目以及topic,對廣告建立相應的倒排索引,直接用于廣告檢索。
- 用戶-廣告的語義特征。分別提取用戶和廣告的語義特征,用于計算用戶-廣告的relevance,pctr,pcvr,達到精確排序。
4.2 Future
對于文本和圖片的語義分析,可以看到:最近幾年,在某些任務上,基于深度學習的方法逐漸超過了傳統方法的效果。但目前為止,對于深度學習的發掘才剛剛開始,比較驚艷的神經網絡方法,也只有有限幾種,譬如CNN,RNN,RBM等。
上文只是介紹了我們在工作中實踐過的幾個小點,還有更多方法需要我們去挖掘:
- Video。Learn about 3D structure from motion。如文獻[19]所示,研究將視頻也轉換到自然語言。
- Deep Learning + Structured Prediction,用于syntactic representation。
4.3 總結
上文主要從文本、圖片這兩方面講述了語義分析的一些方法,并結合個人經驗做了一點總結。
原本想寫得更全面一些,但寫的時候才發現上面所述的只是滄海一粟,后面還有更多語義分析的內容之后再更新。另外為避免看到大篇理論就頭痛,文中盡可能不出現復雜的公式和理論推導。如果有興趣,可以進一步閱讀參考文獻,獲得更深的理解。謝謝。
總結
以上是生活随笔為你收集整理的语义分析的一些方法(下篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 语义分析的一些方法(中篇)
- 下一篇: 机器学习性能改善备忘单