序列標註(sequence labeling)
/ SEE-kwens LAY-bul-ing /
序列標註是這樣一族任務:你沿著一個序列——通常是一句話裡的詞——一個接一個地走,給每一項依次貼上一個標籤,始終不丟失順序。想像一位老師朗讀一句話,逐詞地為每個詞喊出一個類別。它不同於把整篇文件歸進一個筐裡;在這裡,每一個位置都得到自己的答案,而每個答案都該與它的鄰居相稱。
許多著名的自然語言處理工作,骨子裡都是同一種形狀。詞性標註給每個詞貼上它的語法角色。命名實體識別把每個詞標為「一個名稱的開頭」「一個名稱的內部」或「根本不是名稱」。甚至把沒有空格的文本切成詞,也能這樣來表述。把它們串在一起的那根線是:每個詞元都有一個標籤,而這些標籤並非彼此獨立——「在一個機構名內部」只有當前一個詞是「一個機構名的開頭」時才說得通,所以好的模型會就整串標籤序列來推理,而非孤零零地看一個位置。
這件事值得起個名,因為看清這層共有的結構會有回報。經典方法用的是為尊重標籤依賴而設計的模型;現代方法則用神經網路(常常是那種既讀左又讀右的),為每個詞元產出一個標籤。那句誠實的提醒,與它的各個成員相同:這些系統從人們煞費苦心標註過的文本中學習,嚴重倚賴上下文,並在非正式語言、陌生詞,以及標註資料稀少的語言上搖擺不定。
在「Steve Jobs founded Apple」上做命名實體識別,標籤序列可能是:Steve = B-PERSON(開頭)、Jobs = I-PERSON(內部)、founded = O(外部)、Apple = B-ORG。「人名內部」只有緊跟在「人名開頭」之後才合法——這些標籤彼此約束。
每個詞元一個標籤,標籤之間彼此約束——這就是序列標註的形狀。
它的定義性特徵在於標籤並非獨立——每個標籤都取決於它的鄰居,所以模型預測的是一整串連貫的序列,而非彼此孤立的猜測。詞性標註和命名實體識別,都不過是序列標註換了身行頭。