評測時如何構造訓練數據分布與測試數據分布一致

在很多評測的時候,主辦方只會給我們標準數據,並不會給我們測試數據,這個時候,如果我們用標準數據來訓練,但是在真實的測試過程中,輸入數據的並不會是標準數據,這會導致訓練與測試的兩個過程中的數據分布不一樣,那麼自然最後的結果不一樣。

那麼評測時如何構造訓練數據分布與測試數據分布一致呢?

昨天在問了德川之後,我們一個評測中的處理辦法如下:

評測的內容是得到句法分析之後的結果,但是需要端對端的一個要求,句法分析的輸入時分詞和詞性標註完的結果,而主辦方給的訓練數據中,一句話的分詞和詞性標註都是正確的。

如果我們是基於這個標準數據訓練出來的模型,在測試集合中一定效果不好,因為訓練和測試的數據分布就不一樣,這個怎麼理解呢?

因為在訓練的過程中,比如「我去北京」訓練數據送給句法分析的分詞和詞性標註的輸入是我/n 去/v 北京/n,所有的數據就會基於這樣一個標準正確的數據分布訓練得到一個模型。

但是在真實的測試過程中,來了一個句子「我去北京」,首先通過自己的分詞和詞性標註器處理後,得到的結果可能有錯誤,比如結果為我去/n 北京/n,然後送給句法分析器中去,得到句法分析,那麼句法分析的結果肯定就不好,因為兩者數據的分布就不一樣。

主辦方只給標準gold訓練數據的情況下,為了構造訓練數據分布與測試數據分布一致,我們可以對訓練數據作如下改動。

首先可以將訓練數據分為10份,將其中的9份作為訓練集(如下藍色部分),其中的一份作為測試集(如下黃色部分)

通過這個訓練數據,訓練一個分詞和詞性標註器,然後對測試數據進行分詞和詞性標註。這個結果對黃色部分數據來說,就會與測試數據的分布接近,已經不是標準數據了。

然後還有其他9份數據,這個時候類似於K折交叉驗證的思想。我們再將其餘的9份數據依次作為測試數據。

比如下圖類似:

圖來自:K折交叉驗證 · GitBook

這樣處理之後,原來訓練數據的10份數據都不再是原來的標準gold數據(因為事實上測試的時候,準確率不可能是100%,也就是不會是標準gold數據)而是經過前期處理後的數據,每一份都是基於自動的分詞和詞性標註器產生的數據,這樣與測試數據的分布能夠更近。

參考:文中圖與題圖來自於K折交叉驗證 · GitBook

致謝:德川、驍騁師兄、灝洋、曉明師兄

推薦閱讀:

多輪對話之對話管理(Dialog Management)
PaperWeekly 第37期 | 論文盤點:檢索式問答系統的語義匹配模型(神經網路篇)
詞向量
【專知薈萃05】聊天機器人Chatbot知識資料全集(入門/進階/論文/軟體/數據/專家等)(附pdf下載)
DeepMind新論文:3D環境中教AI學人話,還要用形式語言指揮它們

TAG:机器学习 | 自然语言处理 | 深度学习DeepLearning |