document-question-answering-bot(文档问答机器人)

任务说明:

https://wiki.deepin.org 上有900多条deepin系统相关的中文教程和词条,请编写能根据这些内容回答问题的中文聊天机器人。使用者通过命令行界面输入问题,机器人输出回答和参考的wiki文档的链接。

聊天机器人要能根据 deepin wiki 内容回答问题;且回答和问题有80%以上概率的相关性;对于每个问题,机器人要给出3个可能的回答;编写博客,记录开发过程的心得与体会。

代码仓库在此自提,欢迎star:

ArkShin / project225 · GitLab (eduxiji.net)

题目分析与设计思路:

这道题的本质是制作一个问答系统,属于NLP任务。传统上问答系统有3条技术路线,一是利用知识图谱构建deepin系统各概念之间的关系并以此回答;二是将问题和参考文档一起放进BERT等语言模型,预测答案所在文章位置;三是利用生成式语言模型直接输出结果,但这可能存在“幻觉”问题,即模型输出错误。前两个技术路线更成熟,但实现步骤繁琐,需要大量数据集,回答不够自然流畅。

这里最终采用sBERT+生成式模型的路线来完成该问答机器人。首先就输入问题和所有教程文档比对语义,匹配出相似度高的文档;再将文档和问题作为prompt输入生成式LLM(large language model),让它参考文档内容生成回答。这克服了传统问答系统回答不够自然的问题和LLM的“幻觉”问题,保证了输出的流畅与准确。

1、利用sBERT完成文档匹配,它是双塔模型(Deep Structured Semantic Model,DSSM)的一种:

(1)双塔模型包括user塔和item塔;item塔负责对所有文档进行词嵌入得到词向量,对词向量进行处理得到文档的向量表示。user塔负责对输入的问题进行词嵌入,同样处理得到问题语句的句向量。

(2)计算向量间的余弦距离,返回最相近的k个作为参考文档。题目要求给出3个参考回答,取k=3。

(3)sBERT使用BERT对文档进行嵌入,通过pooling得到句向量编码;并衡量他们的余弦距离。

 双塔模型就是这样子的;当然这是最原始的,我们使用的sBERT后面会提到。

2、问答利用LLM进行:

我们将匹配的文档内容和用户问题一起作为LLM的prompt。LLM会在给定参考文档内寻找答案并输出结果,这样的“阅读题”保证了答案的可靠性;生成式QA让机器人回答更自然流畅。另外即使参考文档不准确LLM也会根据自己知识进行补充。这里我们使用gpt-3.5-turbo模型作为LLM。

系统框架:

系统由三个部分组成。

1、输入模块:用户需要配置选择的模型类型、文档位置、GPT-API密钥等信息,并选择自己的问题所属类型并输入问题。

2、匹配模块:将输入文字用向量表示并通过sBERT得到和问题匹配度高的文档。

3、回答模块:将问题和文档一起作为prompt传给gpt-3.5并使之回答问题。计算文本间的相似度:对于测试集中的问答衡量所给答案和测试集标准答案的相似度;对于测试集外的问答衡量问题和答案所在文档间的相似度。

实现重点描述:

1、由于deepin wiki网站设置了反爬虫,无法通过爬虫获得文档信息;只能手工复制粘贴的方式将网站的文档信息全部转移到本地,存储在data.zip中;每个.txt文档均包含了页面的文字信息和其URL链接。

2、词嵌入(word-embedding)即对词语进行向量化表示,使向量能反映语义。比对多种嵌入方式,我们最终使用BERT模型对文档进行词嵌入,得到了词向量的合理表示。在这里我们试验了不同的预训练BERT,根据表现最后选择Chinese-BERT-wwm预训练模型。 这个模型是由哈工大讯飞联合实验室训练的,效果比Google的中文BERT要好,模型链接放在这里了:hfl/chinese-bert-wwm-ext · Hugging Face

3、BERT只是对每个词进行了嵌入,之后还需要通过pooling(mean-pooling或max-pooling)得到整个文档或句子的句向量,这里我们使用mean-pooling完成池化。将用户问题的嵌入向量(user塔)和所有文档的嵌入向量(item塔)逐一比较余弦距离,距离最小的相似度最高。

4、调用gpt-3.5-turbo的API过程中,传送给GPT的prompt定义为:

prompt="参考资料:"+sBERT匹配出的document+"请据此回答问题:"+question

对GPT的提示角色内容是:

"role": "system", "content": "你是一个自动问答系统;请回答问题,你可以参考提供的资料作答."

如果文档过长超过了GPT的tooken限制,会放弃这一文档并依序用下一个文档内容进行提问;直到输出3个回答。

每个回答之后系统会输出该文档中记录的网页地址作为参考链接,并给出二者的余弦相似度。

系统测试情况:

1、开发过程中针对每个函数体均进行了单元测试;针对文档匹配、GPT提问等模块均单独进行了构件测试,确保项目各构件之间的交互没有问题。

2、为衡量问题回答的效果,我们从deepin文档中抽取信息构建了30个问-答对序列作为数据集存储在dataset.json中。运行时每个问题系统都会给出最可能的3个答案,比较这些答案和数据集标准答案之间的余弦相似度;这样一共得到了90个结果。余弦相似度的公式为:

Similarity=CosineDistance(TrueAnswer.encode(),PredictAnswer.encode())

3、对90个答案分别求取余弦相似度,本系统可以保证输出的回答与正确答案语义上90+%的相似度,且从匹配度越高的文档中得到的回答相似度越高。

系统效果:

可以看出基本上还是能给出比较靠谱的回答的~

机器人给的链接都是可以点开的,不是GPT编出来的~

 收获&后记:

这个项目是大学生操作系统大赛的一道题,要求制作一个国产操作系统的问答机器人;这篇博客也投放到了deepin社区中,算是为国产操作系统做出了一点微不足道的贡献吧。

该项目的核心还是NLP,我们考察了很多比较传统的模型包括知识图谱等,最后还是决定借着大模型的风口,做一些GPT的应用吧。GPT的出现的确改变了NLP的很多,但感觉还是需要调教;像这里是通过类似阅读题的方式让它不要胡说八道。

最后整个项目都是模块化的,你可以轻易组装;比如用Word2Vec或者别的encoding方式替换我们的BERT;我们也希望将来有一天能用文心一言等国产大模型替换GPT来生成回答。

参考文献:

1、Deepin Wiki - 深度百科 | DeepinWiki

2、Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks  arXiv:1908.10084 [cs.CL]

3、Revisiting Pre-Trained Models for Chinese Natural Language Processing  arXiv:2004.13922 [cs.CL]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21814.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS真机调试、发布TestFlight等流程

IOS真机调试、发布TestFlight等流程 1、真机调试步骤 使用最新版本的xcode 14 可以简单的进行真机调试,不需要添加钥匙串之类的。 1、在Xcode -> Preferences -> Accounts 中添加苹果ID 2、创建你的项目,在Bundle Identifier中填写项目Identifie…

ChatGPT/InstructGPT论文(二)

一. 导读 第一篇解读:ChatGPT/InstructGPT论文(一) 继ChatGPT大火后,越来越多人想了解ChatGPT相关技术。OpenAI官网虽然没有给出ChatGPT足够详细的信息,但给出了一篇推荐阅读论文InstructGPT,经过对比&…

2023了,学习深度学习框架哪个比较好?

PPT、视频和对应的文章免费开源在:https://chenzomi12.github.io/ 都2023年,才来回答这个问题,自然毫无悬念地选择PyTorch,TensorFlow在大模型这一波浪潮中没有起死回生,有点惋惜,现在GLM、GPT、LLaMA等各种…

【ChatGPT】人工智能发展的背后厉害:跌宕起伏的近百年

文章目录 前言一、麦卡洛克-皮特斯神经元二、赫布式学习三、感知机四、反向传播算法五、卷积神经网络六、递归神经网络七、通用计算GPU芯片八.生成式神经网络与大型语言模型总结 前言 今天,ChatGPT等大型语言预训练神经网络模型已经成为广为人知的名字,…

ChatGPT又添劲敌?OpenAI核心员工创业,新模型获一片叫好

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 作者:Edison_G 在 ChatGPT 巨人的肩膀上又有了改进。 转自《机器之心》 ChatGPT 给 AI 领域带来的变革&#xff0c…

aigc分享

AIGC技术分享 AIGC概述 AIGC的概念、应用场景和发展历程https://36kr.com/p/2135547607286144 ppt https://36kr.com/p/2243237713604482 机器学习基础 机器学习的基本概念、分类和常用算法,如线性回归、决策树、支持向量机、神经网络等。 深度学习基础 深度学…

【倒计时2天】CCIG文档图像智能分析与处理论坛开启直播预约,共探智能文档处理前沿技术

文档是人们在日常生活、工作中产生的信息的重要载体,各领域从业者几乎每天都要与金融票据、商业规划、财务报表、会议记录、合同、简历、采购订单等文档“打交道”。让计算机具备阅读、理解和解释这些文档图像的能力,在智能金融、智能办公、电子商务等许…

Chatgpt-plus帮我写的Python教程

Chatgpt-plus帮我写的Python教程 昨天急不可耐的开通了Chatgpt plus,就想着赶快试用下,不得不说真的强大!,现在还只是gpt4模型,不知道gpt5模型出来会变成什么样子,下面是gpt花了三分钟帮我写的教程&#x…

程序员与chatgpt的碰撞

背景:生产环境要复制一条数据,并修改指定字段且id要自增 ChatGPT是一款非常出色的聊天机器人,它使用了最先进的自然语言处理技术,可以与人类进行自然的对话。它可以回答各种问题,包括一般的知识问题、天气、新闻、娱乐…

AI掌绘艺术:揭秘Stable Diffusion华美图韵背后那些提示词的秘密

开篇 好了好了,我知道这个标题有点大,大得像我妈的锅一样。但是,我保证,当你读完这篇文章后,你不仅会明白我为什么敢用这样的标题,而且你也会想试试宝贵的AI画画方法。 首先,我要说&#xff0…

ChatGPT背后的开源AI框架Ray,现在值10亿美元

机器之心报道 编辑:泽南、小舟 Ray 被 OpenAI、亚马逊等科技公司用来开发大模型,是最近异军突起的框架。 最近一段时间,文本生成的人工智能在互联网上掀起了一阵风暴:ChatGPT 因为可以对人们能想到的几乎任何问题提供非常详细、近…

ChatGPT背后的故事和秘密是什么?

大家好。近期,德国一家公司在公司内部暂停了使用人工智能应用ChatGPT,原因竟然是担心其可能会泄露敏感数据。这则消息引发了广泛的关注和探讨,下面我们来了解其中的详情吧! 首先,让我们了解一下ChatGPT是什么。ChatGP…

【阿里云】第一次进行域名注册、备案以及使用全过程

前言 随着ChatGPT的爆火,让我直面感受到了一项技术的突破可以产生堪比原子弹爆炸的威力,因而在品尝过ChatGPT带来的便利与甜头后,就一直在跟进,同时也在能力范围内,让数十位朋友使用上了ChatGPT 前段时间&#xff0c…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)转换文本(中文chatgpt版)

设置 翻译 通用翻译器 语调变换 格式转换 拼写检查/语法检查。 转换 在本笔记中,我们将探索如何使用大型语言模型进行文本转换任务,例如语言翻译、拼写和语法检查、语气调整和格式转换。 设置 import openai import osfrom dotenv import load_dotenv, f…

ChatGPT游戏领域的创新助手|小智ai

ChatGPT丨小智ai丨chatgpt丨人工智能丨OpenAI丨聊天机器人丨AI语音助手丨GPT-3.5丨开源AI平台 导语: ChatGPT(Chat Generative Pre-trained Transformer)作为一种先进的自然语言处理模型,不仅在对话领域取得了突破,而且…

用ChatGPT控制NPC,行动逼真到像正常人!斯坦福谷歌新研究炸场,赋予大模型准确记忆力...

萧箫 发自 凹非寺量子位 | 公众号 QbitAI 放任25个AI共同生活,他们竟然模拟起了人类的行动! 不仅像人一样起床、刷牙、吃饭、睡觉,还会被迫“出门打工”,甚至在闲暇时分一起庆祝节日。 这一切,来自斯坦福和谷歌的一项新…

ChatGPT背后的技术和多模态异构数据处理的未来展望——我与一位资深工程师的走心探讨

上周,我和一位从业三十余年的工程师聊到ChatGPT。 作为一名人工智能领域研究者,我也一直对对话式大型语言模型非常感兴趣,在讨论中,我向他解释这个技术时,他瞬间被其中惊人之处所吸引🙌,我们深…

openai项目部署服务器,使用反向代理时候,响应数据缺失的问题

openai项目部署服务器,使用nginx配置反向代理后遇到的问题 一、问题描述二、问题解决 一、问题描述 openapi的问题,当你成功科学上网接入chatgpt3.5的时候(使用的是流式响应),在本地跑应用如丝般顺滑,然后满心欢喜的把应用部署上…

ChatGLM模型通过api方式调用响应时间慢怎么破,Fastapi流式接口来解惑,能快速提升响应速度

ChatGLM-6B流式HTTP API 本工程仿造OpneAI Chat Completion API(即GPT3.5 API)的实现,为ChatGLM-6B提供流式HTTP API。 文章目录 ChatGLM-6B流式HTTP API前言一、下载代码安装环境二、接口服务脚本代码三、运行启动命令总结 前言 现在市面上…

相见恨晚,这才是横跨三大操作系统的终极神器!真的太太太好用了。。。

点关注公众号,回复“1024”获取2TB学习资源! 此前给大家推荐过无数的Chrome插件,涉及工作、生活、学习、娱乐等方方面面,大大提高了浏览器的可玩性。 但回到桌面端,我们依然还是需要下载大量的软件客户端,来…