標簽: 半監督學習,文本分類
作者:煉己者
歡迎大家訪問我的簡書以及我的博客,大家如果感覺格式看着不舒服,也可以去看我的簡書,里面也會有發布
本博客所有內容以學習、研究和分享為主,如需轉載,請聯系本人,標明作者和出處,並且是非商業用途,謝謝!
半監督學習文本分類系列
用半監督算法做文本分類(sklearn)
sklearn半監督學習(sklearn)
摘要
之前調用sklearn庫里的半監督算法——標簽傳播算法做文本分類,但是它無法支持大數據量的操作,所以就放棄了。小的數據量是可以跑的,詳情大家可以看以上兩篇文章。
本文主要講述的是基於自訓練的半監督學習算法做文本分類,自訓練算法是半監督學習中比較常見的方法之一,但是自訓練方法有一個很大的問題,在迭代過程中,如果初始訓練樣本集中已標注樣本的數量過少,則可能會出現錯誤標注,並通過迭代使錯誤逐漸被放大,最終導致錯誤累積。所以我們采用對未標注樣本重復標記策略來優化自訓練算法。
目錄
- 數據預處理
- 傳統自訓練方法
- 重復標記策略
- 總結與展望
1.數據預處理
把文本轉為TFIDF向量的過程,這里的操作可以看以下文章:
中文文本的預處理(sklearn)
使用不同的方法計算TF-IDF值
分類算法
xgboost分類算法
也可調用sklearn庫里的算法來操作,這里可自由發揮,拿各種算法包去試試
2. 傳統自訓練方法
(1).操作思路:
- 樣本集是由少量已標注的數據和大量未標注的數據組成
- 首先用監督學習算法(比如SVM)訓練已標注數據,然后再用訓練所得的初始分類器對未經標注數據進行預測,預測得出的預測類別概率越大,代表分類取得的置信度越高,將置信度較高的文本連同其分類標注一起加入到已標記的數據中,重新訓練分類器(每次都要從未標注樣本扣除被選擇的樣本),迭代訓練直到未標注樣本為空集結束。
(2).傳統自訓練方法的問題
- 很顯然自訓練算法的核心問題便是選擇高置信度的未標記樣本,完成訓練集的擴充。這里面問題很明顯,如果未標注的數據預測類別錯誤,那么每次迭代都會造成錯誤累積,長此以往分類器的性能勢必下降,所以我們對未標記樣本進行重復標記,減少分類錯誤在訓練過程的積累,進而提高分類效果
3.改進的自訓練方法
(1).什么是重復標記策略
- 重復標記策略的具體思想是在第t次迭代中,先對未標記數據進行預測,然后選擇數量大於第 t-1 次迭代的未標記數據來擴充樣本集,並且這些被選擇的未標記數據不再從原始的未標記數據集中刪除,而是每次迭代過程都對其進行重復標記,以此來保證錯誤標記的樣本能在后續迭代過程中被修正。
如果不是很理解的話大家可以看一下算法步驟
(2).算法步驟
輸入:標注數據集X1 ,未標注數據集X2,參數:預測概率p,預測概率的減小速率c
輸出:最終分類器
1)初始化預測概率>p的樣本集U1為空,初始化樣本集U2為空
注釋:
- U1的作用是添加每次迭代滿足條件的未標注數據集
- U2的作用是把符合要求的數據添加訓練數據中,起的是中間過度作用
- 這里划分U1和U2原因是U1每次迭代后要重置為空,而U2才是真正把符合要求的未標注數據加入到已標注數據中。U2就是個中間人
2)while(len(U2) < len(x2))
注釋:
這里的意思是說只要滿足條件的未標注數據量等於未標注數據的總量則跳出循環。
以下內容都是在while循環中完成
3)利用X1訓練初始分類器clf0
4)利用clf0對X2進行標記
5)選擇預測概率>p的數據放到U1中,准備對X1進行擴充
6) if: len(U2) != 0 and len(U1) <= len(U2),則p = p - c(預測概率降低)
else: U2 = U1
注釋:
這里的意思是指如果本次預測概率>p的未標注樣本集比上一次迭代的小而且上一次的不可以是空,那么讓預測概率降低,否則把U1賦值給U2
7)重置U1為空集
8)把U2添加到X1中(更新樣本集),再去訓練分類器
如此循環往復,直到滿足循環跳出條件,得到最終的分類器
(3).算法流程圖
理解要點:
- 未標記數據從頭到尾沒有減少過
- 每次迭代只是從中取出滿足條件的數據,用來訓練分類器,讓分類器越來越好。知道最終產生的分類器可以讓所有未標記數據滿足條件。這里的條件是在變化的,預測概率在降低
4.總結與展望
基於自訓練的半監督學習算法做出來的效果有點奇怪,模型效果先下降后上升,由於數據量很大,代碼還在運行,效果目前未知,后面代碼運行結果出來再更新在這里。希望本文會對大家有所幫助