/*版权声明:可以任意转载,转载时请标明文章原始出处和作者信息.*/                                                     author: 张俊林

问答社区算是一类已经比较成熟的互联网应用了,国外的比如QuoraStackOverflow,国内的比如老派的百度知道,新一代的知乎,都算是代表性的社交类问答社区。问答社区本质上就是个人肉知识库,通过一段时间的积累,会累积相当多以<问题,答案>方式存在的知识。

除了这些通用的问答社区外还有很多垂直领域的问答社区,比如我们畅捷通的会计家园,就是拥有数百万财会人员的知识交流社区,财会人员可以在社区提出自己的一些工作和生活中的疑问,会有很多热心网友或领域专家帮你答疑解惑,会计家园长这个样子:

这种问答社区往往有信息冗余的问题,就是说历史上已经有不少相同的问题以及答案,但是很多用户并不清楚这点,往往还会问出同样的问题,当然两个问题尽管是同一个问题,但是由于语言表达的灵活性,在字面上看起来可能问题还是有差别,就比如下面两个问题:

问题A:注册资本认缴制下实收资本的账务如何处理?

问题B:认缴制下成立的公司,一开始的账务处理是什么样的,实收资本要做吗?求解

为了能够增加信息的复用率,我们已经使用自然语言处理、搜索技术以及一些深度学习的技术做了问题推荐系统,在用户提问的时候就将语义相关的问题推荐出来,如果用户看到类似的问题直接看答案就行,所以用户提问的时候看到的这种交互界面:

但是我们想更进一步,能否在用户问出问题后,直接把答案交给用户?说实话,这其实是搜索引擎的近乎终极目标,就是用户提出疑问,直接给出答案。目前搜索引擎的交互方式还是比较原始的,比如用户发出问题,然后人要在搜索结果里面再筛一遍,找到真正自己关心的答案,所以其实是技术+人工的方式。将来的搜索引擎交互方式应该是用户问问题,搜索引擎直接给答案,当然具体体现形式可以有多种,比如目前比较火的聊天机器人本质上就是在往这个目标走的一个中间形式,也就是说是这种方式:

将来的话,如果全息投影技术普及后,应该就是科幻电影里常见的交互模式,那时候随时随地召唤出全息天使全天候为您服务,您不用担心雾霾天他有没胆出门的问题…..比如以这种附体方式:


   嗯,上面是口味比较重的用户的选择,大多数用户可能会更喜欢这种附体方式:

闲话少叙,让我们言归正传并且紧张严肃起来。形式化地说,现在我们面临的是如下问题:

找到与Qnew语义相同的问题Qi后,将Qi对应的答案Ai推荐给用户,就完成了用户提出新问题后,直接告诉用户答案的任务。所以这个问题本质上是个问句Paraphrase问题,就是说判断两个句子是否语义等价的问题。

(读者小Y画外音Qi:请说人话!

作者小张回答Ai请去京东买本初中数学教材!)

我们用Word Embedding加上卷积神经网络CNN来解决这个问题。CNN不必说了,目前在图像处理领域基本已经横扫,未来两年出现1000CNN网络叠加起来解决应用问题也不必惊奇。Word Embedding更是深度学习在文本处理领域的技术基石。如果现在做应用不用这两样东西估计你出门不太好意思跟同行打招呼吧,为了面子上挂得住,咱得掏出这两把刷子刷刷,以证明咱确实拥有这两把刷子。

一种直观的思路会用两个CNN来解决这个问题,其架构图如下:

就是说首先把两个要判断语义是否等价的句子转换为Word Embedding形式,作为整个神经网络的输入层,然后CNN1通过卷积层和池化层来抽取出一个句子的语义特征,CNN2抽取出另外一个句子的语义特征,之后两个CNN的池化层拼接起来作为后续三层神经网络的输入层,后续三层神经网络通过隐层对两组语义特征进行非线性变换,最后通过线性层分类输出,得出两个句子是语义相同(比如输出1)或者语义不同(比如输出0)的分类结果。

但是,我们想换种思路来做这个任务,能不能把输入层改造成真正的二维结构,就像一张图片那样,然后套上一个CNN来解决这个问题呢?让我们来试试,首先第一个问题是,给定两个句子SentenceASentenceB,如何把CNN的输入层改造成类似图片的二维结构?

在做之前,我们假设两个句子如下:(说明:这个例子只是为了方便画图和举例,真实的训练和测试例子是会计家园的实际问题对,长度大约在10几个字到几十个字左右)

SentenceA:电脑多少钱?

SentenceB:计算机价格?

可以这么做:

Step1:把SentenceA切割成3-Gram表达形式,于是SentenceA变成如下形式

SetA={电脑多,脑多少,多少钱}

Step2:把SentenceB切割成3-Gram表达形式,于是SentenceB变成如下形式

SetB={计算机,算机价,机价格}

Step3:把SetA的元素作为纵坐标,SetB的元素作为横坐标,将两个输入改造成二维结构,就像下面的图形:

Step4:那么这个矩阵格子里面的值怎么填呢?用横坐标和纵坐标对应的语言片段的语义相似性填充就可以。于是新问题又产生了,给了两个语言片段,比如“多少钱”和“机价格”,如何计算它们的语义相似性呢,请移步看Step5

Step5:计算两个语言片段的语义相似性。

此时锣鼓点响起,我们的小杀器Word Embedding该粉墨登场了。首先可以用Word2Vec训练出每个汉字的Word Embedding,也就是其低维向量表示,一定程度上代表其包含的语义信息。那么3-GRAM包含了三个汉字,这3-GRAM的语义向量Word Embedding该怎么表示?可以简单粗暴地把其三个汉字的Word Embedding相应维度上的值累加求和即可,看上去霸王硬上弓包办婚姻,但是其实这是一种通常的做法,一般应用效果还可以。嗯,我们土豪界办事情通常就是这么任性。

这样两个3-GRAM片段对应的Word Embedding都有了,剩下的就简单了,它们两个的语义相似性直接用Cosine计算两个Word Embedding在语义空间的向量夹角就成,一般语义越相似,Cosine得分越大。

Step 6:有了Step5的锦囊妙计,就可以完形填空,填充矩阵中对应格子的值了,假设填充完图形如下:

那么类似图片的二维输入结构就完成了。这个矩阵代表什么含义呢?代表的是两个句子任意两个语言片段之间的语义相似性。

有了上面填充好的二维矩阵作为神经网络的输入层,那么后面就简单了,你就当做输入的是个图片,然后直接套上一层或者多层CNN,最后再加上一个全联接分类层就齐活了。改造完的神经网络结构如下:

敲定了网络结构,剩下的就是训练神经网络了。我们利用目前已经做好的问题推荐系统,通过人工找到语义相同表达不同的句子对作为训练集的正例,把一些语义相近但是不同的句子对作为训练集的负例,然后就可以训练这个基于Word EmbeddingCNN的神经网络了。

通过实验我们发现,多层CNN并不能带来性能优势,所以最终仍然采用了一层CNN结构。然后用Torch 7训练模型,调整超参数比如隐层神经元个数,卷积层filter的个数等,最终最优分类精度在90.36%左右,效果还不错,说明祭出CNN这个大杀器和Word Embedding这个小杀器还是有效的。当然这跟负例中两个句子对的语义相关性有一定关系,很明显负例句子对语义相关性越高,分类难度越大,后面我们还会不断增加分类难度对模型进行调整。

致谢:感谢畅捷通公司智能平台沈磊、薛会萍、桑海岩和黄通文等同事在构建模型和整理训练数据方面的工作。

扫一扫关注微信号:“布洛卡区” ,深度学习在自然语言处理等智能应用的技术研讨与科普公众号。

利用卷积神经网络(CNN)构造社区问答系统相关推荐

  1. Deep Learning × ECG (4) :利用卷积神经网络CNN对心律失常ECG数据进行分类

    本文主要就是介绍搭建模型和模型训练了!! 文章目录 1. AAMI 标准 2. 模型搭建和训练 3. 模型搭建环境 1. AAMI 标准 根据 AAMI (简称:美国心脏病协会) 提供的标准:将心拍分 ...

  2. Keras : 利用卷积神经网络CNN对图像进行分类,以mnist数据集为例建立模型并预测

    我是本期目录酱! 引入 计算机视觉 图像特征 如何区分图像的类别 卷积神经网络 卷积Convolution 卷积层 池化Pooling 卷积神经网络 以mnist数据集为例建立模型并预测 简单分析 p ...

  3. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Functional)利用MNIST(手写数字图片识别)数据集实现多分类预测

    DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Functional)利用MNIST(手写数字图片识别)数据集实现多分类预测 目录 输出结果 设计思路 核心代码 输出结果 下边两张 ...

  4. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测

    DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测 目录 输出结果 设计思路 核心代码 输出结果 1.10 ...

  5. 使用深度双向LSTM模型构造社区问答系统

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 关于社区问答系统的问题背景,我们在之前的"利用卷积神经网络构造社区问答系统"一文里 ...

  6. 文本分类(下) | 卷积神经网络(CNN)在文本分类上的应用

    正文共3758张图,4张图,预计阅读时间18分钟. 1.简介 原先写过两篇文章,分别介绍了传统机器学习方法在文本分类上的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN在文本分类上的 ...

  7. 卷积神经网络(CNN)介绍与实践

    七月 上海 | 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习  快速带你入门阅读全文> 正文共4499个字,26张图,预计阅读时间18分钟. CNN的前世今世 1.1.大脑 ...

  8. 基于卷积神经网络 CNN 的猫狗识别详细过程

    目录 一.卷积神经网络(CNN) 1.1 卷积 1.2 前馈神经网络 1.3 卷积神经网络(CNN) 二.配置环境 三.猫狗数据分类建模 3.1 猫狗图像预处理 3.2 猫狗分类的实例--基准模型 3 ...

  9. 基于FPGA的一维卷积神经网络CNN的实现(二)资源分配

    资源分配 环境:Vivado2019.2. Part:xcku040-ffva1156-2-i,内嵌DSP个数 1920个,BRAM 600个也就是21.1Mb. 说明:通过识别加高斯白噪声的正弦波. ...

最新文章

  1. Windows 2000 SP4 Server 找不到网络名
  2. Android 编程规范与常用技巧
  3. 职高计算机word教学视频,职高计算机专业Word范例教学三例.doc
  4. LeetCode 717. 1-bit and 2-bit Characters
  5. Button控件的点击事件
  6. WEBPACK+ES6+REACT入门(3/7)-react组件以及props
  7. 图像拼接算法(zz)
  8. mapminmax函数
  9. MATLAB中拟合线性方程(最小二乘法)
  10. Vue模板挂载到页面源码简要解析
  11. Mac安装并配置Git+SourceTree使用
  12. 帕克西AR一键换发型,让你秒变潮人!
  13. 可视化 | Echarts基础异步加载数据交互组件数据集
  14. 电脑网络正常,浏览器无法打开怎么办?
  15. MATLAB AppDesigner 中TextArea保留原有信息并换行显示提示信息
  16. LDPC码的基础(1)
  17. 用于阿尔茨海默症分期早期检测的多模态深度学习模型
  18. pandas的菜鸟级应用(谁都能学会)
  19. 每日一题2021/5/22:黑板异或
  20. 《高级语言程序设计》习题集

热门文章

  1. 自然语言处理python培训
  2. Leetcode1278
  3. VBS 从Excel中获取数据,批量替换word中的文字
  4. 计算机关于容量换算long转double精确度更准确
  5. NLP自然语言处理学习笔记(十)(转自咕泡AI)
  6. 论hr面试问题:离职原因
  7. 2018年315晚会黑名单之夜,谁能逃过此劫?
  8. System.setOut(ps)重定义了输出流后,如何重定向控制台输出
  9. 用System中System.setOut()方法修改输出方式
  10. Paypal国际版网站集成简易教程