有個迷思是如果我用正則來構建數據集,那麼我訓練出的模型最好情況不就是學習到我是怎麼正則化的嗎?那我何必還訓練個模型呢?直接用正則不就好了嗎?


看完問題才知道想知道點啥。

首先,經驗來看,正則和詞典之類的方法,只要規則問題不大,大部分情況下能有很高的準確,這對於很多需求而言已經足夠了,所以這個並不是什麼有問題的思路。

第二,nlp需要建模型,大部分是因為召回不足的時候需要模型來補召回,這個非常重要,模型是具有泛化能力的,一個正類樣本過正則沒搞出來,過模型可能就有了,整個系統看來,召回率就有了。

第三,不用擔心整體的準確率,統計口徑看來,正則一般能召回7到8成的東西,準確率90,模型弄了2到3成的東西出來,準確率70,算算整體準確率大概多少,所以模型的準確率只要不是爆炸差,影響真的不大。注意,這裡不是玩統計陷阱,這是用戶真正感知到的准招,用戶才不管你是什麼方法出來的呢。

在這個前提下看來,模型的要求不是很高甚至必要。那麼我們怎麼構建呢?

1. 人工,沒啥多說的。

2. 爬蟲,這個也沒啥好說的。

3. 各種網路資源發掘,常用場景基本上都有資源,好人一生平安。

4. 比賽,論文,裡面都會有給數據集,在官方允許的情況下用。

5. 規則和詞典。

談談用模型學規則的這個問題,我舉個例子吧,例如識別美食意圖。我想吃漢堡,規則知道我想吃是一個美食意圖標誌詞,這樣就過了,但是模型可不是這麼想,他知道我想吃漢堡是正類,我想吃雖然見多了知道肯定有美食意圖的語義,但是他還見過了漢堡呀,漢堡被模型識別了,以後你來一句漢堡真好吃,那其實就能被識別為美食了,這就是模型泛化能力的體現。所以不用太過擔心學規則的問題,更需要擔心的是,規則對不對,可不能讓模型學壞了。


工業界nlp任務中,給業務方提供的nlp原始數據打標籤本身就是任務最耗時間,最麻煩的一部分。 最常用的辦法還是用正則打標籤冷啟動加主動學習的辦法訓練模型。 首先用正則打標籤的訓練集訓練初始模型,之後手工挑出模型標的不對的樣本,人工打標籤,扔回去再訓練迭代,依次往複。

真正遇到大型,場景固定,且不涉及商業機密的nlp任務,比如某些客服對話系統,才會用到外包團隊 人工打標籤, 製作訓練集


試問,用正則怎麼體現詞或者字之間的關係?如果後面的模型恰好要用到這個關係怎麼表達。

樓上各位的回答已經比較到位,我再做一點補充。

NLP是一個比較大的範疇,目前有幾個比較典型的應用,譬如,找到一句話的各種同語義表達方式,找到一個問題的最佳回答(以上兩點知乎就會用到吧),還有機器翻譯,機器寫作等等。

這些方向上面的研究,最難的地方就是沒辦法逐一構建正則數據集。舉例子,用與訓練好的詞向量去做詞嵌入的時候,如果擁有一個萬能正則,可以對任意長度的一段語言符號,找到相反的,相近的,10%相近的,50%相近的,80%相近的另一個語言符號串,那構造一個數據集來取代預訓練好的詞向量也應該是非常OK的。可是找不到啊。

另一個例子,訓練機器寫作的時候,即使是使用生成對抗網路(GAN),怎樣構造一個數據集呢。理想的數據集合應該包含任意多種人類寫作的邏輯,這個空間幾乎接近了語言文字的任意長度的組合,但是又包含了應有的邏輯在裡面,怎麼去尋找這樣一個正則呢。

以上是我的一點淺顯的理解,希望批評指正。

歡迎關注我的公眾號「三歲學技術」


正則表達式:我給定所有的規律,只接受確定的結果,讓機器按照我的規律去搜索答案

模型:我給定一部分規律,我接受開放性的結果,讓機器按照我的規律去探索規律

上面這個定義並非教科書的定義,只是個人直覺的總結~


謝邀。談談一點個人的理解。構造數據集的目的是對學習任務提供一定量的來自人類監督。以此目的展開需要確定 收集數據的方式,使其儘可能的代表問題的實際分布。如果問題本身需要額外的人類標註,一般需要採用眾包方式獲取標註。對於偏客觀的問題,一般人類標註能產生較高的共識,需要多份標註來提高標註質量。


正則+人工進行冷啟動

模型學習並泛化

積累數據

迭代調優


這麼理解吧,正則是保證準確率,但是召回率在新數據集上可能表現會差一些,以及遇到一些歧義詞或者歧義句時會導致判斷失敗;

而模型,即便是按照正則構建出來的數據集來進行訓練,但是對於新數據(需預測的數據)的泛化效果會明顯好很多,原因其一:1.模型是由統計概率計算出來的,正則是不可能出現低概率事件,而自己訓練的模型是可能的,有時候訓練出來的這個低概率事件可能受益性還比較高,可以考慮一下CRF和正則抽取的命名實體識別;2.如果模型有添加額外的先驗知識,比如引入訓練好的詞向量模型word2vec、Bert等,則會將語義知識範圍泛化得更廣,打個比方:蛋糕和甜點兩個詞在詞向量里是不是存在於相似的語義空間內。

另外再補充一點,直接使用正則產生的數據進行模型,這時候再加入小小部分噪音數據,你的模型的魯棒性會變得更強。

Good Luck!


首先你要有


我們在做模型的時候,不可能冷啟動版本的模型就在線上數據中達到較好的效果,需要不停地對預測數據進行標註迭代模型,使得模型效果不斷地優化,這是模型的意義。

在項目剛開始的時候,因為沒有數據,我們可以用正則產生一批數據讓模型訓練,這樣模型就具有了正則的能力,還會具備部分泛化的能力。後續通過不停地迭代,模型效果不斷地提升,這是我們的目的。

關鍵是因為冷啟階段,沒有數據(如果沒有足夠人力標註)。


推薦閱讀:
相关文章