LSTM+CRF for NER

本文探讨了在深度学习中如何提取和结合字符级与词级特征。首先介绍了使用CNN和Bi-LSTM进行字符级特征提取,这些特征能够捕捉词汇的形态学信息。接着,阐述了如何利用Glove或Word2vec预训练模型获取词向量,作为词级特征。最后,讨论了如何将这两种特征结合,作为BiLSTM-CRF模型的输入,用于序列标注任务。
摘要由CSDN通过智能技术生成

1. 词语特征表示

代码上,下面针对的都是1个batch(多个序列)进行优化时,如何获取batch中的不同序列(单词or句子)中的特征。

1.1 提取字符级别特征:

将单词看成序列,序列由字符构成,字符看成序列不同时刻的观测输入。

1)CNN for Character-level Representation
在这里插入图片描述
在这里插入图片描述

2)Bi-LSTM for Character-level Representation

下图是使用Bi-LSTM提取字符级别的特征。对于某个单词wi(例如CAT),w=[c1,…,cp],每个字符ci都有一个向量化表示。使用Bi-LSTM建模单词字符词向量序列,并将Bi-LSTM最后输出的隐藏层h1、h2向量(前向、后向各一个)连接起来,作为该词wi字符级别的特征,该特征能够捕获wi形态学特点。

在这里插入图片描述
然后,再将提取到的字符级别的特征和Glove预训练好的词语级别的特征连接起来,作为该词最终的特征。

1.2 Glove/Word2vec提取词向量,即词级别特征

将句子看成序列,序列由词语构成,词语看成序列不同时刻的观测输入。

  • 为不同时刻的观测输入设置id,这里也就是为词语设置id。目的是查找观测(某个句子的某个词)的向量化表示。
# shape = (batch size, max length of sentence in batch)
word_ids = tf.placehold

这里针对的是1个batch,batch由多个序列(句子)构成。要设置不同序列不同时刻的观测的id,也就是不同句子不同单词的id。因此word_ids的shape是二维的,Batch Size×Sentence LengthBatch Size×Sentence Length,Batch Size是这个Batch中序列的数量,Sentence Length是序列的最大长度,每个元素代表某个序列某个词语的id。

  • 为不同序列设置有效长度,这里也就是句子的单词数目。目的是记录batch中不同序列的有效长度
# shape = (batch size)
sequence_lengths = tf.placeholder(tf.int32, shape=[None])

根据上述的id查询观测词语的向量化表示:

L = tf.Variable(embeddings, dtype=tf.float32, trainable=False)
# shape = (batch size, sentence, word_vector_size)
pretrained_embeddings = tf.nn.embedding_lookup(L, word_ids)

L就是词向量矩阵,shape为Dictionary Size×Word Vector Size,即词语总数量乘以词的维数。注意trainable=False,我们不需要训练词向量,使用预训练好的Glove词向量,并借助Tensorflow自带的embedding_lookup来查找词向量。

这里直接查询到每个batch每个句子中不同单词的词向量。pretrained_embeddings的最后一维就是词向量的维数,因此pretrained_embeddings是3维的(Batch size × Sequence size × word vector size)

1.3 将两种特征concat到一起,作为BiLSTM-CRF的输入

reference:
http://xtf615.com/2018/11/27/ner/
《End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值