机器学习项目(二) 人工智能辅助信息抽取(九)

关系抽取

关系抽取的应用

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并行计算能力差
机器学习项目(二) 人工智能辅助信息抽取(九)_第1张图片

PCNN

分段max pooling 可并行训练与预测
机器学习项目(二) 人工智能辅助信息抽取(九)_第2张图片

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],[2],[3],[3],[3],[3],[0]])

print(input_mask.eval())
print(input_mask.eval().shape)

mask = tf.nn.embedding_lookup(mask_embedding,input_mask)
print(mask.eval(),mask.eval().shape)

# mask *100 在第二个位置上增加一个维度
a = tf.expand_dims(mask * 100,2)
print(a.eval(),a.eval().shape)

# 将卷积层的feature map取出
x = tf.constant([[[1,0],[2,1]],[[2,1],[3,2]],
                  [[3,2],[4,3]],[[4,3],[5,4]],[[5,4],[6,5]],[[6,5],[7,6]],[[7,6],[8,7]],[[8,7],[9,8]],[[9,8],[0,0]],[[0,0],[0,0]]])
print(x.eval())
print(x.eval().shape)

# 在最后一维扩展一个维度
b = tf.expand_dims(x,-1)
print(b.eval())
print(b.eval().shape)

# a:(10,1,1,3)
# b:(10,2,2,1)
# 利用广播机制 维度小的会复制成维度大的部分
c = a+b
print(c.eval())
print(c.eval().shape)

print(c.eval()[0])
print("----------")
print(c.eval()[2])


d = tf.reduce_max(c,axis=1)
print(d.eval())
print(d.eval().shape)

# 还原回去
e = d-100
print(e.eval())

feature_dim = x.shape[-1]
print(feature_dim)

f = tf.reshape(e,[-1,feature_dim*3])
f.eval()

# 对f进行非线性激活 小于0的时候是0  大于0的时候是线性的
h = tf.nn.relu(f)
# 分段maxpooling的结果
h.eval()

i = tf.reduce_max(x,axis=-2)
i.eval()

sess.close()

你可能感兴趣的:(机器学习实战)