閑聊結構化預測(structured learning)
來自專欄機器學習演算法與自然語言處理20 人贊了文章
一、Structured Learning
我們首先需要明白什麼是結構化預測。好,開始:
在機器學習過程中,對數據的擬合其實就是在找一個擬合函數f:
比如對於回歸問題(Regression)來說,這個函數輸出一個標量(scalar)、
對於分類問題(Classification)來說,這個函數輸出一個類別(一個one-hot的向量)
但是有一類的預測,它並不是輸出一個標量或者一個類別,而是輸出些有結構的輸出,比如,一個序列,一個句子,一個圖,一顆樹...
那麼我們將輸出這些結構化結果的過程叫做結構化預測(Structured Prediction)
二、Example(例子)
這部分,我們對於Output Sequence和Output Matrix舉一些我們常見的例子,昨天聽了車萬翔老師的talk,對於nlp的基礎任務分詞,詞性標註,parsing,等等內容都可以歸結為結構化預測,目前還沒有拿到slides,之後拿到了會更新。
Output Sequence
對於機器翻譯(Machine Translation),輸入是一個語言序列,輸出是另一種語言序列:
對於語音識別(Speech Recognition),輸入是一段音頻,輸出是識別的文字序列:
對於聊天機器人(chat-bot)
輸入是user的話序列,輸出是機器人回復的response序列:
Output Matrix
對於image to image任務來說:
輸入是一個圖片,輸出是另一個圖片(matrix像素點)
Text to image任務
輸入是一段文字描述,輸出是圖片(matrix像素點)
三、Why Structured Learning Challenging?
首先給出李宏毅老師ppt,解釋如下:
在分類任務中,每一個類別都有一定的樣例Sample,但是在結構化預測中,如果把每一個output當做一個類別來看的話,輸出空間就非常大了,因為測試數據的輸出很有可能都是訓練數據沒有見過的,什麼意思呢?如果把每一個sequence當做一個類別的話,完全相同的sequence會比較少,那麼造成每一個類別的訓練樣例很少,而且測試數據輸出不一定在訓練數據中出現過,比如是對話任務的話,一個問題的回復很可能在訓練數據沒有出現過,訓練數據相同問題的回復可以換了一種表達了。
比如說:
訓練數據中,對話是input:哈工大的地址在哪? output:哈工大位於哈爾濱教化街29號
將這個回復當做一個類別看待的話。
而測試數據的樣本是intput:哈工大的地址在哪?output:哈爾濱教化街29號是哈工大的地址。
那麼這兩個output的意思一樣,但是是不同的輸出,這樣就需要機器自己有一些額外的能力,不然你在訓練數據中沒有見過測試數據的output,就很難正確生成。這裡是解釋一下為什麼結構化預測問題中output space巨大的問題。
這是結構化預測的一個難點。
參考:李宏毅老師slides
推薦閱讀:
※<Attention is All You Need>閱讀筆記
※《Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling》
※自底向上——知識圖譜構建技術初探
※tensorflow用高級api實現文本分類初嘗試