模型图:项目中model.png
请参照模型图理解代码
1.项目大致流程描述:
word/char Embedding(特征嵌入层):
在词级别的向量基础上加入字符级的信息,这样的embedding可以捕捉前缀后缀这样的形态特征。
先用skip-gram word2vec 模型预训练得到的词向量表将每个词映射为一个词向量,然后把每个词中字母用一个向量表示,把一个词中所包含的字母的向量送入 BiLSTM, 把前后两个最终状态和 词向量进行拼接,得到词的embedding
BiLSTM层:
把句子中所包含词的embedding输入,然后将前向、后向 每个对应位置的hidden state拼接起来得到新的编码序列。
CRF Layer:
采用BIO标注策略,使用CRF引入标签之间的依赖关系,
计算每个词得到不同标签的分数
计算句子的标签序列概率
采用Viterbi算法得到分数最高的序列标签
在进行命名实体时 通过最小化交叉熵损失 来达到 优化网络参数和CRF的目的,测试时用Viterbi算法得到分数最高的序列标签
Label Embedding:
实体标签的embedding。训练时真实标签,测试时为预测标签
Heads Relations:
输入为BiLSTM的hidden state和label Embedding的拼接。可以预测多个头,头和关系的决策是一块完成的,而不是先预测头,再用关系分类器预测关系
标签策略: CRF层的输出是采用BIO标注策略的实体识别结果,head Relations层只有在和其他实体有关系时 会给出对应实体的尾单词和关系;在与其他实体没有关系时 head为原单词