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学习得到一个模型,模型提取得到问题,正确答案,错误答案的相关特征,这些特征使得问题与正确答案相似,与错误答案不想似,最终从答案库中寻找到正确答案。

(QACNN)自然语言处理:智能问答 IBM 保险QA QACNN 实现笔记的更多相关文章

  1. (QA-LSTM)自然语言处理:智能问答 IBM 保险QA QA-LSTM 实现笔记.md

    train集: 包含若干条与保险相关的问题,每一组问题对为一行,示意如下: 可分为四项,第三项为问题,第四项为答案: 1.build_vocab 统计训练集中出现的词,返回结果如下(一个包含3085个 ...

  2. 管正雄:基于预训练模型、智能运维的QA生成算法落地

    分享嘉宾:管正雄 阿里云 高级算法工程师 出品平台:DataFunTalk 导读:面对海量的用户问题,有限的支持人员该如何高效服务好用户?智能QA生成模型给业务带来的提效以及如何高效地构建算法服务,为 ...

  3. Android之智能问答机器人

    本文主要利用图灵机器人的接口,所做的一个简单的智能问答机器人 实现 由于发送与接收消息都是不同的listView,所以要用有两个listVeiw的布局文件 接收消息布局文件 <?xml vers ...

  4. springboot+lucene实现公众号关键词回复智能问答

    一.场景简介 最近在做公众号关键词回复方面的智能问答相关功能,发现用户输入提问内容和我们运营配置的关键词匹配回复率极低,原因是我们采用的是数据库的Like匹配. 这种模糊匹配首先不是很智能,而且也没有 ...

  5. 智能问答中的NLU意图识别流程梳理

    NLU意图识别的流程说明 基于智能问答的业务流程,所谓的NLU意图识别就是针对已知的训练语料(如语料格式为\((x,y)\)格式的元组列表,其中\(x\)为训练语料,\(y\)为期望输出类别或者称为意 ...

  6. 自然语言处理:问答 + CNN 笔记

    参考 Applying Deep Learning To Answer Selection: A Study And An Open Task follow: http://www.52nlp.cn/ ...

  7. 基于百度ai,图灵机器人,Flask 实现的网站语音智能问答

    准备以下模块中的函数 from aip import AipSpeech import time import os import requests APP_ID = '15420654' API_K ...

  8. Android 智能问答机器人的实现

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38498353 ,本文出自:[张鸿洋的博客] 今天看到一个ios写的图灵机器人,直 ...

  9. 开源VS商用,IBM区块链从Hyperledger到商用平台之道 | 对话IBM高级架构师【 笔记】(转)

    https://www.toutiao.com/a6520005731867951619/?tt_from=weixin&utm_campaign=client_share&times ...

随机推荐

  1. Windows10下Apache2.4配置Django

    开发环境 Windows 10 x64 Apache 2.4 x64 Python 2.7.11 x64 Django 1.9.6+ 下载和安装mod_wsgi 到 http://download.c ...

  2. 学会用core dump调试程序错误

    最来在项目中遇到大型程序出现SIGSEGV ,一直不知道用core dump工具来调试程序,花了近一周的时间,才定位问题,老大很生气,后果很严重,呵呵,事后仔细学习了这块的知识,了解一点core du ...

  3. Naive Bayesian文本分类器

    贝叶斯学习方法中有用性非常高的一种为朴素贝叶斯学习期,常被称为朴素贝叶斯分类器. 在某些领域中与神经网络和决策树学习相当.尽管朴素贝叶斯分类器忽略单词间的依赖关系.即如果全部单词是条件独立的,但朴素贝 ...

  4. [ACM] hdu 1217 Arbitrage (bellman_ford最短路,推断是否有正权回路或Floyed)

    Arbitrage Problem Description Arbitrage is the use of discrepancies in currency exchange rates to tr ...

  5. Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。

    Python3 与 C# 面向对象之-继承与多态   文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...

  6. nodejs 模板字符串

    范例1: for (var i=0;i<10;i++){ var data = `公司名:${i}`; console.log(data) } 输出: 实例2: var name = '丁香医生 ...

  7. 【CODEFORCES】 B. Dreamoon and Sets

    B. Dreamoon and Sets time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. Ubuntu16.04下Django项目的部署

    起飞前的准备 # 首先在Ubuntu的当前用户zhang下新建data文件夹,然后在data文件夹下新建你的项目目录root@zhang-virtual-machine:/home/zhang/dat ...

  9. C# 比较两个数组中的内容是否相同的算法

    这里要比较的是两个数组中的内容是否相同,以int数组为例 int[] Arraya=new[] {1,2,3,4,5} int[] Arrayb=new[] {5,3,2,1,4} 以上两个数组内的值 ...

  10. 同一世界服务器架构--Erlang游戏服务器

        Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中.之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现.底层的框架需要写很多代码实现,这样既浪费时间 ...