(QACNN)自然语言处理:智能问答 IBM 保险QA QACNN 实现笔记

train集:
包含若干条与保险相关的问题,每一组问题对为一行,示意如下:

可分为四项,第三项为问题,第四项为答案:

1.build_vocab
统计训练集中出现的词,返回结果如下(一个包含3085个元素的dict,每个词作为一个key,value为这些词出现的顺序):
2. load_word_embedding(vocab,embedding_size)
vocab为第一步获取的词集,embedding_size=100
load_vectors()
获取预先训练好的保存在vectors.nobin中的词向量
返回的vector中保存有22353个词的向量

然后通过暴力匹配,获取vocab中每个词的词向量,存在embeddings中,embedding中的序数对应的是vacab中的key的value

3. load_train_list
获取保存在train中18540个问题与答案

4. load_test_list
获取保存在test.sample中的问题与答案,共10000条
在测试集中,共有20个问题,每个问题包含若干个正确答案与错误答案,共500个答案,由每一行的第一个元素标识,为1时为正确答案,为0时为错误答案
5.load_data(trainList,vocab,batch_size)
batch_size=256
encode_sent(vocab,string,size) 讲string中的词转换成vocab中所对应的的序号
得到一个batch_size的train_1(问题),train_2(正确答案), train_3(错误答案)

6. QACNN Model

input1: 问题, input2:正向答案 input3:负向答案
word_embeddings: load_word_embedding中获取的3085个词的词向量
讲输入的内容为词序号的训练数据转换成词向量
将input拓展成4维的向量:(数量,1,每一句的词数量(此处统一为100),词向量的size)
设置filter,filter_sizes=[2,3,5]
对于每一个filter_size:
filter_shape=(num_filters,1,filter_size,embedding_size)=(500,1,2,100) (以第一个为例,下同理)
image_shape=(batch_size,1,sequence_len,embedding_size)=(256,1,100,100)
fan_in=filter_sizeembedding_size
fan_out=num_filters
fan_in
W_bound=0.00774
W初始化为最大值为W_bound,最小值为-w_bound,size为filter_shape=(500,1,2,100)的向量
偏置b初始化为[500,]的向量
卷积
对于问题input_x1:
1) (256,1,100,100)卷(500,1,2,100)
2) 然后最大池化,池化下采样后为(sequence_len-filter_size+1,1)=(99,1),也就是(256,500,99,1)
3) 然后输入tanh中 得到pooled_active
4)ouputs_1.append(pooled_active)

对正向答案input_2与负向答案input_3做相同的操作,得到ouputs_2.append(pooled_active), output_3.append(pooled_active)
self.params += [W,b]
遍历完filter_sizes中的3个元素后,得到各包含3个元素的ouputs_1,ouputs_2,ouputs_3,self.params

总共的filter数量为num_filter_total=500*3=1500
self.dbg_x1=input_x1
self.dbg_outputs_1=outputs_1[0].shape
将每个句子表示为(256,1500)的向量
使用dropout
计算问题与正向答案,问题与负向答案的cos夹角 cos12, cos13
计算损失函数得到cost
计算准确率

计算梯度
更新
epoch到一定数量时,validation
validation
加载test数据集得到问题,正向答案,负向答案 x1, x2, x3

__validation_model__输入问题,正向答案,负向答案,以及学习率,输出cos12, cos13
排序每一个问题中的cos12,根据分数最高的判断算法的正确性,如果排名最高的正确答案,则算法判断正确,否则,算法判断错误

总结:

该算法通过CNN学习得到一个模型,模型提取得到问题,正确答案,错误答案的相关特征,这些特征使得问题与正确答案相似,与错误答案不想似,最终从答案库中寻找到正确答案。





原文地址:https://www.cnblogs.com/combfish/p/6474298.html