你知道该如何搭建 AI 智能问答系统吗?

article/2025/11/6 18:20:24
640?wx_fmt=gif
640?wx_fmt=jpeg

 

作者 | 李秋键
责编 | 刘静
出品 | CSDN(ID:CSDNnews)

今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统,具体的效果如下所示:

640?wx_fmt=png

下面简单了解下智能问答系统和自然语言处理的概念,智能问答系统是自然语言处理的一个重要分支。现在普遍认为智能问答能够独立解决很多问题,但是必须要承认现在技术所处的初级阶段的性质。也就是说,智能问答系统在现阶段最大的价值在于为客服人员附能,而并非独立于人自行解决众多目前还有巨大错误率和不确定性的问题。一旦具有这样的思想基础——通过智能问答系统为客服人员附能,那么将智能问答系统做成一个工具和产品的基础就有了,只有通过产品化、工具化的方式,才能够实现这个预期。

自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。

下面开始搭建我们的智能问答系统,首先我们需要 导入的库:

import requests
from lxml import etree
import jieba
import re
import sys,time
import os
其中requests库用来向搜索引擎搜索答案,lxml用来获取答案,jieba库用来提取问题以及做出问题分析,re是处理语言的正则匹配库,sys以及time库用来调试输出效果,os模块用来写入文件以搭建模式选择。

我们知道一个真正的语言回答应该是逐字回答的才符合人的回答习惯,下面为了达到语言对话的效果,我们定义一个函数:

def print_one_by_one(text):sys.stdout.write("\r " + " " * 60 + "\r") # /r 光标回到行首sys.stdout.flush() #把缓冲区全部输出for c in text:sys.stdout.write(c)sys.stdout.flush()time.sleep(0.1)
就是用来逐字输出的效果。

下面是真正搭建的部分,为了对语言进行处理,首先我们要加载停用词,去除掉语言中无意义的词,比如“了”,“啊”等等:

stop = [line.strip() for line in open('stopwords.txt',encoding='utf-8').readlines() ]
开始执行的判断输出一下,以及使用者的输入:
print("小智:您好,请问您需要问什么呢(对话(快,慢),可控制输出速度)")
input_word=input("我:")
为了控制文字输出的速度,我们借助文件读取控制模式:
#默认为慢速
#print(input_word)
if input_word == "快":f = open("1.txt", "w")f.write("0")f.close()
elif input_word =='慢':f = open("1.txt", "w")f.write("1")f.close()
下面用Jieba分词,去除掉无用的停用词:
sd=jieba.cut(input_word,cut_all=False)
final=''
for seg in sd:#去停用词#print(seg)if seg not in stop :final +=segprocess=final
此时process是仅仅最简单语言的处理结果,为了适应更多语言习惯,使用正则表达式匹配另一种语言习惯,一个“问”时的处理:
#匹配问后面全部内容
pat=re.compile(r'(.*?)问(.*)')
#一个“问”时的处理
try:rel=pat.findall(final)process=rel[0][1]
except:pass
另外再添加语言习惯,两个“问”的处理:
#两个问时的处理
try:rel=pat.findall(final)rel0=rel[0][1]#print(rel0)rel1=pat.findall(rel0)process=rel1[0][1]
except:pass
这样输出的效果就可以适应多种语言习惯,为了区分问答句和模式选择句加入判断语句:
print("问题:"+process)
if process=='':print("小智:OK")
在else中使用搜索引擎获取答案,首先使用请求头,百度百科网址:
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}url=requests.get("https://baike.baidu.com/search/word?word="+process,headers=header)
为了防止中文乱码问题,使用编码如下:
#为了防止中文乱码,编码使用原网页编码url.raise_for_status()url.encoding = url.apparent_encoding
下面使用匹配获取内容:
bject=etree.HTML(url.text)print(object)
#正则匹配搜索出来答案的所有网址
#获取词条
#head =object.xpath('/html/head//meta[@name="description"]/@content')
#详细内容para=object.xpath('/html/body//div[@class="para"]/text()')
然后为了判断提问者提出的问题是否可行,以及模式匹配的选择,加入判断:
result='小智:'for i in para:result+=iif result=='小智:':print("小智:对不起,我不知道")else:f = open("1.txt", "r")s=f.read()if s=="1":print_one_by_one(result)else:print(result)
然后循环执行问答系统即可:
while(True):if os.path.exists('1.txt'):chuli()else:f = open("1.txt", "w")f.write("1")f.close()chuli()
如下图所示,提问的语句可以任意,不需要固定格式,这样才具有智能性不是吗?

640?wx_fmt=png

那么让我们再接着了解自然语言处理的发展历程吧,最先的语义解读各个方面的研究是自然语言。1949年,非裔威弗首先明确提出了自然语言方案。20世纪60八十年代,外国对自然语言曾有大规模的研究,花费了巨额开销,但人们以前似乎是高估了语义的复杂度,语法处置的学说和新技术皆不成冷,所以成果并不大。主要的作法是储存两种语法的单字、单词相同译名的辞典,翻译成时双射,新技术上只是变更语法的同条次序。但现实生活中的语法的翻译成近不是如此非常简单,很多时候还要参照某句话前后的意即。

约90八十年代开始,语义处置各个领域再次发生了极大的变动。这种变动的两个显著的特点是:

(1)系统对输出,拒绝研发的语义处置该系统能处置大规模的现实文档,而不是如现在的学术性该系统那样,不能处置极少的词典和类似于字词。只有这样,研发的该系统才有确实的实用性。

(2)系统对的输入,鉴于现实地解读语义是难于的,系统对非常拒绝能对语义文档展开深层的解读,但要能借此提取简单的数据。例如,对语义文档展开系统会地萃取目录词语,过滤器,索引,系统会萃取最重要数据,展开系统会概要等等。

同时,由于特别强调了"大规模",特别强调了"现实语料",上面两各个方面的开拓性管理工作也获得了推崇和强化。

(1)大规模现实语料的研发。大规模的经过有所不同深度加工的现实文档的语料,是研究工作语义统计资料物理性质的根基。没它们,统计资料方式不能是无源之水。

(2)大规模、数据非常丰富的字典的编制工作。数量为几万,十几万,甚至几十万词语,所含非常丰富的数据(如包括词语的配上数据)的计算机系统能用字典对语义处置的必要性是很显著的

作者简介:李秋键,CSDN 博客专家,CSDN达人课作者。

声明:本文为作者原创投稿,未经允许请勿转载。

【END】

2019年人工智能系统学:

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

640?wx_fmt=jpeg

 热 文 推 荐 

 


http://chatgpt.dhexx.cn/article/INLBnhg9.shtml

相关文章

NLP: 基于文本语义的智能问答系统

向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx 问答系统是自然语言处理领域一个很经典的问题,它用于回答人们以自然语言形式提出的问题,有着广泛的应用。 经典应用场景包括:智…

浅谈基于知识图谱构建智能问答系统

“人才引进落户政策”“企业法人变更登记”“如何办理公积金贷款”……在智慧政务业务中,智能客服能够7*24小时响应群众、企业关于日常事务办理、民生政策、企业经营法规等咨询,大力提升了信息获取的便利性。 智能问答系统涉及自然语言处理、语音技术、…

从0到1构建一个基于知识图谱的智能问答系统

目录 一、前言二、知识图谱2.1 数据入库2.1.1 Nebula Graph搭建2.1.2数据导入 三、后端3.1 搭建Flask框架,处理http请求3.2 处理请求(核心)3.2.1 实体提取和意图分类建立AC树实体提取建立意图特征库意图模板匹配 3.2.2 转换成ngql语句 3.3 连接nebula查询结果返回 一…

智能问答系统产品设计详解

问答系统的概述 我想大家肯定看过很多关于自然语言处理(简称:NLP)技术方面的书籍或者论文,但在这里我不会详细叙述NLP技术方面的知识,而是想通过产品化思路结合NLP相关技术来搭建一个基础版的问答系统。本文通过基于问…

基于Bert的知识库智能问答系统

项目完整地址:https://github.com/1105425455/Bert/tree/master 有训练好的模型 可以先看一下Bert的介绍。 Bert简单介绍 一.系统流程介绍。 知识库是指存储大量有组织、有结构的知识和信息的仓库。这些知识和信息被存储为实体和实体关系的形式,通常用于…

智能问答系统实践——答案选择

问题描述 这个问题来自于SemEval-2015Task3: Answer Selection in Community Question Answering. 简单的说就是从一堆问题和答案中找出他们之间的相关性。 这个Task包含两个Subtasks: 1.给定一个问题和一些答案,将答案进行为3类:good/potential/bad。 2.给定一个判定问题…

构建一个完整的中文智能问答系统

向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程 公众号:datayx 简略概述要求: 构建一个完整的QA系统整个系统由三部分构成:前台,后台,知识库前台:请设计一个…

智能问答

问答系统是信息检索的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获取信息的需求。其中问答系统是目前人工智能和自然语 言处理领域中倍受关注并具有广泛发展前景的研究方向。不同类型的问答系…

智能答疑系统

问答系统是目前自然语言处理领域中的研宄热点,它既能让用户通过自然语言直接发问,又能直接向用户返回精确、简洁的答案,而不是一系列相关网页。 从算法与模型上来说,问答系统主要分成两个流派,一派是搜索式问答&#x…

人工智能AI系列 - 问答系统

目录: http://aias.top/ 问答系统 问答系统(Question Answering System, QA)是信息检索系统的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获取信息的需求。问答系统是人工智能和…

智能问答系统:问句预处理、检索和深度语义匹配技术

更多干货内容敬请关注「平安寿险PAI」(公众号ID:PAL-AI),文末有本期分享内容资料获取方式。 智能问答系统是人机交互的核心技术之一,常见的应用场景主要是智慧客服。通过构建该系统,机器人可以快速找到与用户问题相匹配的答案并自动回答,从而大大减少企业的人力成本;除…

自然语音处理(NLP)系列(五)——详解智能问答系统

为方便客户进行网上登记,提升各大官网系统的智能化水平,很多官网已上线“智能小客服”。“智能小客服”支持语音引导、机器人24小时智能问答、文字提问、上传图片咨询、关联问题推荐、远程人工客服等多种便利化的贴心咨询服务。这些服务中运用到了自然语…

FAQ智能问答系统设计与实现

一、项目介绍 FAQ(FAQ,frequently-asked questions)问答系统表示常见问题问答系统,常用于一些特定领域的智能客服,将用户经常问到的高频问答对索引起来,当新的提问命中时可以快速回答,准确而高…

react全家桶实战

整个目录结构如下: package.json代码如下: {"name": "active","version": "0.1.0","private": true,"dependencies": {"react": "^16.4.1","react-dom"…

React全家桶学习

来源:尚硅谷视频教程 - 张天禹 一、React简介 1 react特点 React:用于构建用户界面的javascript库。是一个将数据渲染为HTML视图的开源JavaScript库。 react的特点: 1.采用组件化模式、声明式编码,提高开发效率及组件复用率。…

react全家桶实战(千峰教育)

说明&#xff1a;本笔记为本人基于千锋教育2022版React全家桶教程_react零基础入门到项目实战完整版的学习笔记&#xff0c;知识点不清或不全&#xff0c;可以到视频教程中学习 文章目录 一、安装create-react-app&#xff0c;新建react项目1、安装脚手架create-react-app<s…

搭建react全家桶

1.安装react项目 ①使用webpack安装 npx create-react-app my-app cd my-app npm start ②使用vite安装 创建Vite项目 npm create vitelatest my-vue-app --template react cd my-app npm run dev 配置vite.config.js import { defineConfig } from vite import react from vit…

React 全家桶

文章目录 前言一、React是什么&#xff1f;二、基础内容1. React 相关 js 库2. React 开发者调试工具3. JSX语法规则4. 模块与组件、模块化与组件化5. 类的基本知识 三、React 面向组件编程1. 函数式组件2. 类式组件3. 组件实例的三个核心属性&#xff1a; state、refs、props-…

React全家桶

文章目录 第1章&#xff1a;React入门1.1. React简介1.1.1. 官网1.1.2. 介绍描述1.1.3. React的特点1.1.4. React高效的原因 1.2. React的基本使用1.2.1. 效果1.2.2. 相关js库1.2.3. 创建虚拟DOM的两种方式1.2.4. 虚拟DOM与真实DOM 1.3. React JSX1.3.1. 效果1.3.2. JSX1.3.3. …

react全家桶有哪些?(详细)

一 、 create-react-app脚手架 对于现在比较流行的三大框架都有属于自己的脚手架&#xff08;目前这些脚手架都是使用node编写的&#xff0c;并且都是基于webpack的&#xff09;&#xff1a; Vue的脚手架&#xff1a;vue-cliAngular的脚手架&#xff1a;angular-cliReact的脚手…