自然语言处理

序列标注(sequence labeling)

/ SEE-kwens LAY-bul-ing /

序列标注是这样一族任务:你沿着一个序列——通常是一句话里的词——一个接一个地走,给每一项依次贴上一个标签,始终不丢失顺序。想象一位老师朗读一句话,逐词地为每个词喊出一个类别。它不同于把整篇文档归进一个筐里;在这里,每一个位置都得到自己的答案,而每个答案都该与它的邻居相称。

许多著名的自然语言处理工作,骨子里都是同一种形状。词性标注给每个词贴上它的语法角色。命名实体识别把每个词标为「一个名称的开头」「一个名称的内部」或「根本不是名称」。甚至把没有空格的文本切成词,也能这样来表述。把它们串在一起的那根线是:每个词元都有一个标签,而这些标签并非彼此独立——「在一个机构名内部」只有当前一个词是「一个机构名的开头」时才说得通,所以好的模型会就整串标签序列来推理,而非孤零零地看一个位置。

这件事值得起个名,因为看清这层共有的结构会有回报。经典方法用的是为尊重标签依赖而设计的模型;现代方法则用神经网络(常常是那种既读左又读右的),为每个词元产出一个标签。那句诚实的提醒,与它的各个成员相同:这些系统从人们煞费苦心标注过的文本中学习,严重倚赖上下文,并在非正式语言、陌生词,以及标注数据稀少的语言上摇摆不定。

在「Steve Jobs founded Apple」上做命名实体识别,标签序列可能是:Steve = B-PERSON(开头)、Jobs = I-PERSON(内部)、founded = O(外部)、Apple = B-ORG。「人名内部」只有紧跟在「人名开头」之后才合法——这些标签彼此约束。

每个词元一个标签,标签之间彼此约束——这就是序列标注的形状。

它的定义性特征在于标签并非独立——每个标签都取决于它的邻居,所以模型预测的是一整串连贯的序列,而非彼此孤立的猜测。词性标注和命名实体识别,都不过是序列标注换了身行头。

又称
sequence taggingtoken classification序列标注序列标记词元分类