基于文本语义的智能问答系统以及数据格式应用
NLP: 基于文本语义的智能问答系统
应用场景:
智能语音交互,在线客服,知识获取,情感类聊天等
常见的分类:生成型,检索型问答系统;
单论问答,多轮问答系统;
面向开放领域,特定领域的问答系统
example:
基于检索,面向特定领域的问答系统——智能客服机器人
1. 传统客服机器人的搭建流程:
思路一:需要将相关领域知识转化为一系列的规则和知识图谱
弊端=[重度依赖"人工",换个场景,换个用户都需要大量的重复劳动]
2. 基于语义理解的对话机器人搭建:
思路二: 深度语言模型会将问题和文档转为语义向量, 从而找到最后的匹配答案,
本文借助Google开源bert+Faiss开源向量搜索引擎 =中文问答系统
3.FAQ 全名[Frequently Asked Questions] ——FAQ问答机器人
假定我们有一个常见问题和答案的数据库,现在用户提出了一个新问题,能不能自动从常见问题库中抽取出最相关的问题和答案来作答呢?
项目核心技术点:
通过深度学习模型判断问题与答案的匹配得分
使用BERT模型特征提取并判断问题相似度
使用检索引擎Faiss索引构建和检索
构建在线FAQ问答系统
**项目宗旨:**
结合Faiss和bert提供的模型实现了一个中文问答系统,旨在提供一个用Faiss结合各种AI模型实现语义相似度匹配的解决方案。
项目实例实现:文本语义相似度文本检索系统和FAQ问答机器人
QA数据格式标准化:
汽车之家拥有全球最大的汽车社区论坛。积累了丰富的用户问答数据,能够解决用户在看车、买车、用车等方面遇到的各种问题。
数据多样性以及用语不规范:
针对用户在平台上提出的各种问题,从海量的高质量问答库中匹配语义最相似的问题和答案。
文本数据具有表达多样化、用语不规范(如:车型车系用语存在大量缩写、简写、语序颠倒等现象)、歧义性强(如:“北京”可能指汽车品牌,也可能指城市)等特点,这给传统基于关键词匹配的搜索方法带来了很大挑战。因此,在传统关键词匹配的基础上,进一步引入语义搜索技术,将精华问答库的问题映射为多维向量,进行语义匹配,提升问题匹配准确性。
智能对话闲聊系统:
Data format: query-answer 对如下
不要骂人 好的,听你的就行了
不要骂人严重的直接禁言 好的,听你的就行了
不要骂人了吧 好的,听你的就行了
不要骂人哦 好的,听你的就行了
不要骂人小心封号啊 好的,听你的就行了
不认识你不记得你 你当我傻逼啊
不认识你昂 你当我傻逼啊
不认识你老哥了 你当我傻逼啊
智能问答常用解决方案:
针对FAQ检索式问答系统,一般处理流程
问答对数据集的清洗
Embedding
模型训练
计算文本相似度
在问答库中选出与输入问题相似度最高的问题
返回相似度最高的问题所对应的答案
搭建一个FAQ问答系统一般实现方法
基于ES的智能问题系统
(通过关键词匹配获取答案,类似电商、新闻搜索领域关键词召回)
基于TF-IDF方式
(计算每个单词的tfidf数值,分词后换算句子表示。TF-IDF 方式也在用在关键词提取)
基于Doc2Vec 模型(考虑词和段,相比于word2vec来说有了段落信息)
通过深度学习语言模型bert 提取向量,然后计算相似度
方案可以扩展到的业务需求(本文介绍的是一种文本语义匹配通用解决方案)
智能客服领域语义匹配
(对话系统检索式智能问答系统,答案在知识库中且返回唯一的数据记录)
以图搜索(resnet 图片向量化表示)
新闻领域文本相似推荐(相似新闻推荐等)
基于文本语义匹配检索系统(文本相似性rank )
针对这类问题,重点文本等通过某种方式进行向量化表示(word2vec、doc2vec、elmo、bert等),然后把这种特征向量进行索引(faiss/Milus) ,最终实现在线服务系统的检索,然后再通过一定的规则进行过滤,获取最终的数据内容。
传统文本匹配方法存在问题:
传统的文本匹配技术有BoW、VSM、TF-IDF、BM25、Jaccord、SimHash等算法,主要解决字面相似度问题。
面临的困难:
由 于中文含义的丰富性,通常很难直接根据关键字匹配或者基于机器学习的浅层模型来确定两个句子之间的语义相似度。
深度学习文本匹配
深度学习模型文本做语义表示逐渐应用于检索式问答系统。
相比传统的模型优点:
能够节省人工提取特征的大量人力物力
从大量的样本中自动提取出词语之间的关系,并能结合短语匹配中的结构信息和文本匹配的层次化特性,发掘传统模型很难发掘的隐含在大量数据中含义不明显的特征
本文采用相似问题匹配来实现一个FAQ问答系统。
问题:什么是相似问题匹配?
答案:即对比用户问题与现有FAQ知识库中问题的相似度,返回用户问题对应的最准确的答案
深度语义匹配模型可以分为两大类,分别是representation-based method 和 interaction-based method,这里我们针对Represention-based Method这种方法进行探索。
问答系统关键技术
Google 的 BERT 模型在 NLP 领域中具有巨大的影响力。它是一个通用的语言表示模型,可以应用于诸多领域。本文的项目是将 Faiss与 BERT 模型结合搭建文本语义匹配检索系统,使用 BERT 模型将文本数据转成向量,结合 Faiss特征向量相似度搜索引擎可以快速搜索相似文本,最终获取想要的结果
Faiss
Faiss是Facebook AI团队开源的针对聚类和相似性搜索库,为稠密向量提供高效相似度搜索和聚类,支持十亿级别向量的搜索,是目前最为成熟的近似近邻搜索库。它包含多种搜索任意大小向量集(备注:向量集大小由RAM内存决定)的算法,以及用于算法评估和参数调整的支持代码。Faiss用C++编写,并提供与Numpy完美衔接的Python接口。除此以外,对一些核心算法提供了GPU实现。相关介绍参考《Faiss:Facebook 开源的相似性搜索类库》
Bert
BERT 模型是 Google 发布的一个新的语言表达模型(Language Representation Model),全称是 Bidirectional Encoder Representations from Transformers,即双向编码表征模型。
BERT 模型的优势体现在两方面。
一方面,它使用基于特别设计的注意力机制(Attention Mechanism)的简单全连接网络取代了复杂的 CNN 和 RNN 网络。不但大大减少了训练时间,同时有效地提升了网络性能。
另一方面,BERT 模型是第一个真正捕获上下文语义信息的预训练语言表示模型。这是因为 BERT 模型使用了 Transformer 作为算法的主要框架,而 Transformer 框架能更彻底地捕捉语句中的双向关系。
Google 提供了一些预先训练的模型,其中最基本的两个模型是BERT-base 模型和 BERT-large 模型。具体参数如下表所示:
BERT-base 模型和 BERT-large 模型的参数总量大小和网络层数不同,BERT-large 模型所占计算机内存较多,所以本文项目选用 BERT-base 模型对文本数据进行向量转化。(注:其中,层数(即 Transformer 块个数)表示为 L,隐藏尺寸表示为 H ,自注意力头数表示为 A 。)
数据规范:
id question answer
10000 为什么男人长胡子,女人不长胡子 在男人的身体里,有一种较雄性激素的东西,这种雄性激素能刺激男人的脸上长出毛茸茸的胡子,男孩从…
10001 身体的左边与右边是一样的吗 从外形上看,人的身体似乎是对称的,其实,人体并不对称,就拿左右手来说吧,粗细长段就不一样,眼…
10002 为什么人走路时手脚左右交错摆动 人们走路之所以要手脚左走摆动,就是为了保持身体的平衡,走起路来也非常省力。看到运动员在跑到上…
10003 为什么人早上比晚上高 人体各部分是由关节和韧带连载一起的。经过白天的工作和学习后,全身各肌肉,关节和韧带都处于…
10004 为什么有的人长得高,有的人长得矮 人的高矮决定于遗传,营养及体育锻炼等因素。一般说,父母长得高,孩子也会较高,父母个子矮…
针对不同的业务系统,我们只需要提供这种数据格式,通过本文的模板就可以快速搭建一个demo了,祝大家学习愉快。