关系抽取
关系抽取的应用
1.建立新的结构化的知识库
2.扩大现有知识库
3.支持QA系统
关系分类VS关系抽取
关系分类:一般是判断一个句子中两个实体(entity)是哪种关系,属于多分类问题。
关系抽取:从一个句子中判断两个entity是否有关系,一般是一个二分类问题,指定某种关系。
关系抽取方式
1.手写规则
2.监督学习
3.半监督/无监督学习
人工规则
优点:有高准确率、可以为特定领域定制
缺点:低召回率、要考虑周全所有可能的模式(pattern)很难,也很费时间精力需要为每条关系来定意思pattern
监督学习
选择我们想提取的关系集合
选择相关的命名体集合
寻找并标注数据 选择有代表性的语料库 标记命名实体 人工标注实体间的关系 分成训练、开发、测试集
训练分类器:MaxEnt、Naive、Bayes、SVM
半监督学习
利用少量的标注信息进行学习,就bootstrap的方法利用少量的实例作为初始种子(seed tuples)的集合,然后利用pattern学习方法进行学习,通过不断的迭代,从非结构化数据中抽取实例,然后从新学到的实例中学习新的pattern 并扩充pattern集合。
PCNN
深度学习用到的特征通常有:
Word embeddings
Position embeddings
Knowledge embeddings
模型通常有:CNN/RNN+Attention
RNN+Attention
实体多时,需判断的实体对较多。RNN并行计算能力差
PCNN
分段max pooling 可并行训练与预测
import tensorflow as tf
sess = tf.InteractiveSession()
# 定义一个常量 4行3列
mask_embedding = tf.constant([[0,0,0],[1,0,0],[0,1,0],[0,0,1]])
# 11是第一段 222是第二段 3333是第三段 后面补一个0
input_mask = tf.constant([[1],[1],[2],[2]