不要太糾結小樣本中的正確率
比如常見辭彙的雜音處理,作為一個菜B,我馬上想到了以下兩種方法:
1、超高頻詞語削掉(比如空格這種高頻詞語幾乎就是雜音……直接砍掉,不加到訓練用的網路里)
2、倒數出現次數的詞袋(在訓練時,對當前train中某詞語的個數乘以1/這個詞語的總出現次數,比如空格雖然出現了30幾次,但是在全樣本中出現了30萬次,這個時候它在對這次train的貢獻只有萬分之一。而「二狗子」這個詞語雖然在這裡只出現了一次,但是在全樣本中總共出現也就兩次,對這次train的貢獻就是.5,那麼就相當於變相增加了「二狗子」的重要程度,削減了空格的雜音)
那麼,問題就來了。
先講第一個。
1.如果把超高頻詞語削掉,準確率下降了怎麼辦?舉個例子,像「的」,「and」,「so」,「你」,「這」,之類的這種高頻詞語,不一定是雜音,雖說是語氣詞,在特定的環境下可能表達出了有效的語意思比如「你這孫子」顯然不應該把「你這」倆高頻詞語去掉,只留「孫子」。有可能「你這孫子」明顯是情緒為負的,但是「孫子」就會識別成情緒為正。
所以,多高的頻率以上去掉,就是一個問題了。
然後,如果我們要提高準確率,通常會做這樣一件事,把每個字,和之前的字,之後的字,保留順序組成詞語,比如「今天天氣真好」作為單字,處理出來是6個特徵,但是把前後字的2字組合加上,就是6+5個特徵,再加上3字特徵的話,就是6+5+4個特徵。
很明顯,這個中間的「今天」是有意義的,但是也很明顯「氣真」這個詞就是無意義的。
如果用了這種組詞的方法,因為「今天」出現的頻率更高,很有可能把無意義的「氣真」留下,把有意義的「今天」去掉。
這種情況怎麼辦呢?
當然,我們可以加深層,識別更多特徵(簡單理解,比如識別出形容詞,動詞這類特徵,就可以避免留下「氣真」,去掉「今天」的錯誤),但是這樣耗時耗力,很可能機器識別的特徵和我們理解的有偏差,無法遷移。
這種時候,轉個角度思考,我們一開始為什麼糾結呢?因為高頻詞語削弱了,準確率下降了(比如95%的準確率下降到了92%),但是換個角度考慮,把高頻詞語砍了,神經網路的負荷自然也小了,運轉速度更快了(有可能提升數十倍的速度)。
那麼,如果不糾結於小樣本中的準確率,把這提升的數十倍的速度,換個角度考慮,增加數十倍的樣本訓練呢?準確率比之前更低還是更高呢?
如果這個速度,用在迭代更多次數,更多樣本上,準確率更高,那麼,削弱了高頻詞語導致概率空間的縮小,也許並不是很重要的事。
某種程度上來說,機器學習就像是有限制時間的盲人摸象,大概摸摸,把全身摸了,能八九不離十地知道這是個動物。然而仔仔細細,一點一點的摸,也許仔細了半天,只摸了一條腿,反而把象識別成了柱子。
所以說,不要太糾結於小樣本的準確率,也許你也就拿了個小腿在那裡摸呢?
用比較玄的詞來描述的話,不糾結於小範圍的對錯,跳出這個小樣本,尋找到更大的空間里,廣闊天地大有作為,大概就是格局吧。
exciteing!
推薦閱讀:
※《Ranking Relevance in Yahoo Search》(上)
※MLE,MAP,EM 和 point estimation 之間的關係是怎樣的?
TAG:机器学习 | 深度学习DeepLearning | 文本分析 |