CNN用于自动特征学习,一般在图像任务中应用比较广泛,在NLP中出现的频率可能不及CV任务,但在某些场景下依然能够发挥不错的效果。下面将根据基于论文《Classifying Relations by Ranking with Convolutional Neural Networks》阐述CNN与关系抽取任务之间如何碰撞出火花
论文中大概的流程可分为以下三步:(1)将句子中的词转化为可以进行卷积操作的词向量,即我们熟悉的Embedding过程。(2)进行卷积操作后得到该句子的向量表示。(3)对句子的向量进行关系的分类。下面将详细解释各步骤的原理和tricks
(1)Embedding操作
word embedding操作是NLP任务的基础,只有将语言中的字词转化成数字向量才能进行运算,本文也是如此。
在论文中的embedding分为两个过程,分别是word embeddings 和 word position Embeddings过程。
word embeddings
本过程一句话概括就是根据需被转换的单词的索引(或位置)提取出向量表中特定行的数字进而组合成一个向量用来表示该单词。
将一个句子表示为,句子中的第
个词表示为
,则
再令每个单词转化成向量后表示,则整个句子向量化后表示为
令embedding转化矩阵为每个单词的词嵌入过程就是从这个矩阵中提取出相对应的行,其中
是单词转化为数字向量后该向量的长度,
是总的单词表的大小。embedding的过程可以用以下式子表示,简而言之就是用一个对应位置的one-hot向量
与
矩阵相乘
word position embeddings
句子中单词的位置顺序对于意思的表达很重要,该论文使用了position embedding的方法导入了每个单词相对于两个目标词的位置信息。比如下面这个句子,与
的距离为-1,与
的距离为2。
The [car] left the [plant].
将这两个距离分别映射到一个维度为的向量得到
和
,再将这两个向量进行拼接得到某单词的最终位置向量
最后将前面得到的word embedding 和word position emb 再进行拼接得到整个句子的表示
(2)sentence Representation操作
此过程的目的是为了获得句子的向量表示
,此时很自然地可以想到我们需要面临的两个问题:(1)句子的长度是变化的而我们是用一个固定长度的
去表示它;(2)包含句子的关键意思的单词有可能出现在该句子的任意位置。
sentence representation的过程具体分为以下几步
- 规定一个窗口大小k,挑出在某个单词的前后k的范围内的单词构成一个局部词块
。这一步的目的是为了学习局部特征。
注意:为了保证取出来词块数与原句子中的单词相对应(数目相等),需要在句首句尾的单词作
的padding操作。
- 接下来便进行卷积操作了。令卷积核为
,用这个卷积核对每一个词块
进行卷积运算(相当于权值共享了),则每个词块得到以一个
维的向量。
- 将这些词块的向量按照索引位置进行分组,比如0组表示将所有词块向量中索引为0的数字挑出来归到一组,1组表示将所有词块向量中索引为1的数字挑出来归为一组,后面以此类推,共有
组。然后从每组中挑选出最大的数字放到
向量的相应位置中,比如0组最大的数字就放到
中,后面依次类推。形式化表达如下
(3)class score
最后一步就是根据句子的向量表达来计算每种类别的得分。每个关系类别都会有一个权重矩阵,记为则该句子对应每个类别的得分如下式计算
(4)损失函数的设计
论文中损失函数的设计也颇为巧妙,每句话的训练都输入一个正样本类别和一个负样本
(实际是从所有的负样本中计算并挑出一个最最相似的作为负样本类别),loss function 如下所示
其中和
是边缘参数,而
是个扩展因子,有助于加大对分类错误的惩罚。负类别的挑选如前面所述,