在序列模型中,特别是在命名实体识别(NER)任务中,我们通常会用一系列符号来表示输入序列、目标标签以及模型的结构和操作。本文列出一些常见的符号表示方法,结合NER任务进行解释。
一、什么是命名实体识别任务?
(1)命名实体识别的任务目标
命名实体识别(Named Entity Recognition,简称NER),是自然语言处理中的一个子任务,任务目标是从文本中自动检测具有特定意义的实体并将其分类的任务。
(2)什么是“命名实体”?
实体通常包括人名、地名、组织机构名、时间、数量等,它们被归类到预定义的类别中,比如人名(Person)、地点(Location)、组织(Organization)、时间表达式(Time)等。
(3)举个例子说明一下
这里有一句话:“Harry Potter and Hermione Granger invented a new spell”,命名实体识别(NER)的目标是识别出文本中的人名。
-
识别实体: 系统需要识别出“Harry Potter”和“Hermione Granger”是人名(Person)类别中的实体。这是因为“Harry Potter”和“Hermione Granger”是公众熟知的小说角色名称,属于文学作品《哈利·波特》系列中的虚构人物。
-
分类实体: 除了识别出这些是实体外,系统还会给这些实体分配正确的类型标签。在这个案例中,“Harry Potter”和“Hermione Granger”会被标记为Person类型。
-
忽略非实体或普通词汇: 句子中的其他词汇,如“and”、“invented”、“a”、“new”、“spell”,虽然对理解句子含义很重要,但它们不是命名实体,因此在NER任务中通常会被标记为非实体类别,常用'O'(Outside)来表示,意指这些词不属于任何特定的命名实体类别。
词汇 | 实体类型 |
---|---|
Harry Potter | Person |
Hermione Granger | Person |
invented | O |
a | O |
new | O |
spell | O |
此表格展示了每个词汇及其对应的命名实体识别分类结果,其中“Person”表示人名实体,“O”表示非实体类别。
二、如何用符号来表示句子?
还是用上面的例子,我先用一个表格直观的为大家展示出如何用符号表示句子,然后用文字进行必要且详细的解释。
X | Harry | Potter | and | Hermione | Granger | invented | a | new | spell |
符号 | |||||||||
y | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
符号 | |||||||||
表示第i个输入序列样本中的第t个元素 | |||||||||
表示第i个输出序列样本中的第t个元素 | |||||||||
表示第i个输入序列的长度为9 | |||||||||
表示第i个输出序列的长度为9 |
(1)输入序列表示
表示输入的文本序列,其中代表序列中的第个单词或token,而是序列的长度。
(2)输出序列表示
表示对应的标签序列,每个对应于的标签,用来指示该单词属于哪种类型的命名实体(如人名、地点、组织机构等)。在NER中,常用的标签编码方案有BIOES,其中B表示实体开始,I表示实体内部,E表示实体结束,O表示非实体。
三、如何表示一个句子中的单词?
(1)词典与独热编码的方式
可以使用词典与One-Hot编码的方式来表示句子中的每个单词。举例说明。
假设我们的词典包含10000个不同的单词,每个单词对应一个唯一的索引,从0到9999。如果句子“Harry Potter and Hermione Granger invented a new spell”中的所有单词都恰好在词典中,我们可以为每个单词创建一个长度为10000的向量,向量中对应单词索引的位置为1,其余位置为0。
理想情况下假设所有单词都在词典中:
- “Harry”假设词典索引为1,则其one-hot编码为:[0, 1, 0, ..., 0]
- “Potter”假设词典索引为2,则其one-hot编码为:[0, 0, 1, ..., 0]
- “and”假设词典索引为3,则其one-hot编码为:[0, 0, 0, 1, ..., 0]
- 以此类推
【注】如果词典中没有某个单词,则需要采取一些策略,比如使用“未知词<UNK>”,通常是词典中的一个特定索引,比如9999来表示未知词。
(2)其他更好地方式
由于实际操作中直接手动构建这样庞大的one-hot编码不太现实,通常我们会使用更高效的词嵌入技术(如Word2Vec、GloVe)来表示单词,这些方法能够在保持高效的同时捕获词汇的语义信息。