閑聊結構化預測(structured learning)

閑聊結構化預測(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實現文本分類初嘗試

TAG:機器學習 | 自然語言處理 |