1. 引言
目前大型语言模(LLMs) [1]在自然语言处理[2]领域展示了显著的能力,但它们也存在一系列固有的缺点。如模型幻觉问题:生成的内容不准确或与问题不一致;模型时效性问题:生成的内容已经过时,不具有当前的时效性。数据安全性问题:敏感信息存在可能泄露的风险。基于以上问题,检索增强生成(RAG) [3]在弥补LLMs的局限性方面取得了显著进展,尤其是在解决幻觉问题和提升实效性方面。在之前提到的LLMs存在的问题中,特别是幻觉问题和时效性问题,RAG技术通过引入外部知识库的检索机制,成功提升了生成内容的准确性、相关性和时效性。同时在词向量嵌入模型(Word2Vec) [4]的有力加持下,可以实现更加准确的文本语义匹配和检索功能。
2. 相关工作
2.1. 算法介绍
本算法的设计思路是通过Word2Vec模型实现对文本数据的词嵌入并生成索引词汇表,再通过此模型实现计算句子之间的余弦相似度。通过问题与文本数据之间的相似比较,按照相似度的大小进行重排序,最后将最相似的文本数据和问题编写在大语言模型ChatGPT的提示中,通过ChatGPT输出最后的答案,实现检索增强生成。
算法的实现流程如下:首先,在39健康网上爬取数据并对数据进行预处理,然后使用Word2Vec模型建立词汇表,再以此设计出计算相似度的函数,最后通过调用大语言模型接口并编写模型提示(Prompt)输入到大语言模型并获取问题答案。
2.2. RAG模型
如今LLMs展现出了令人印象深刻的能力,但它们在处理特定领域或知识密集型任务时仍面临挑战,例如产生幻觉、知识过时以及推理过程不透明和不可追溯。为了克服这些挑战,RAG通过从外部数据库检索知识来增强LLMs,特别是在知识密集型任务中提高了生成的准确性和可信度,并允许持续的知识更新和特定领域信息的整合。
RAG通过整合外部数据库的知识,提高了语言模型在知识密集型任务中的准确性和可信度。通过引用外部知识,RAG有效减少了生成事实错误的信息的问题。同时,RAG允许模型进行持续的知识更新,保持信息的时效性。RAG还可以整合特定领域的信息,提高模型在特定应用场景下的表现。与纯生成模型相比,RAG的推理过程更加透明,因为它结合了检索到的文档和原始问题来生成答案。因此,RAG特别适合处理需要多步推理和深入理解大量材料的复杂查询。最简单的RAG模型是朴素RAG (Naive RAG),也是最早的RAG方法论,紧跟着ChatGPT的广泛采用而出现。它遵循传统的“检索–阅读”框架,包括索引、检索和生成三个主要步骤。检索部分是RAG框架的第一步,它负责从大量的数据源中检索出与用户查询最相关的信息片段。其中包括构建文本索引、词嵌入向量、相似性计算和检索出最匹配文档等关键步骤。生成部分是RAG框架的第二步,它使用检索到的信息来辅助语言模型生成回答。其中RAG会将第一步检索到的文档与原始查询集合起来,形成一个全面的问题提示(Prompt),再利用大语言模型(LLM)根据整合后的上下文提示回答问题。增强部分是RAG框架的第三步,它旨在改善检索到的信息与生成回答之间的协同作用,提高整体性能。这三个部分共同工作,使得RAG框架能够有效地结合外部知识源和语言模型的生成能力,以提高对知识密集型任务的处理能力。通过精心设计的检索和生成策略,以及针对性的增强技术,RAG能够生成更加准确、可靠和信息丰富的回答。
RAG应用的基本流程大致如图1所示。
Figure 1. RAG application process
图1. RAG应用流程
2.3. Word2Vec模型
Figure 2. CBOW model diagram
图2. CBOW模型图
Word2Vec是一种基于神经网络的词嵌入方法,用于将词语映射到低维向量空间中。它是自然语言处理领域中广泛应用的模型之一,旨在捕捉词语之间的语义关系。Word2Vec模型有CBOW (Continuous Bag of Words)和Skip-gram两种主要的实现方式。
CBOW模型的目标是通过上下文词来预测中心词,即用
,去预测xn。它通过将上下文词向量求和并输入到一个神经网络中来预测中心词,CBOW模型图如图2所示。CBOW模型适用于较小的数据集和常见的词汇,其训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。
Skip-gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量,Skip-gram模型图如图3所示。它在训练过程中通过最大化中心词和上下文词之间的相似性来学习词向量。Skip-gram模型适用于较大的数据集和较少出现的词汇。Skip-gram以当前词预测其上下文词汇,即用xn去预测
。
Figure 3. Skip-gram model diagram
图3. Skip-gram模型图
Word2Vec模型是基于浅层神经网络结构的词嵌入模型,通过训练大规模的文本语料库来学习词向量。它能够捕捉词语之间的语义关系,特别适用于计算文本相似度的任务,如信息检索、文档聚类、情感分析和推荐系统等。Word2Vec在自然语言处理领域被广泛应用,其优势在于能够提供准确的语义表示和较好的相似度计算性能。
3. 实验过程
3.1. 算法流程
3.1.1. 数据采集与预处理
如表1所示,数据采集:使用Requests和BeautifulSoup库对39健康网的病例信息进行爬取。通过爬虫程序自动化地获取病例名称、病症描述和治疗方法等相关信息,并保存到本地文件或数据库中。
Table 1. Medical information collection data table
表1. 医疗信息采集数据表
序号 |
病例名称 |
详细症状 |
1 |
冠心病 |
冠心病症状典型症状:胸骨后的压榨感…… |
2 |
肩周炎 |
肩周炎症状早期症状:肩部呈阵发性疼痛…… |
1192 |
慢性咽炎 |
慢性咽炎症状典型症状:一般无明显…… |
如表2所示,对采集到的文本数据详细症状进行分词和去除停用词处理。
Table 2. Medical information data preprocessing table (Segment detailed symptoms and remove stop words)
表2. 医疗信息数据预处理表(对详细症状分词、去除停用词)
序号 |
病例名称 |
详细症状 |
1 |
冠心病 |
冠心病症状典型症状:胸骨后压榨感…… |
2 |
肩周炎 |
肩周炎症状早期症状:肩部呈阵发性疼痛…… |
1192 |
慢性咽炎 |
慢性咽炎症状典型症:状一般无明显…… |
3.1.2. 使用Word2Vec模型构建词汇表
通过将处理好的文本数据传入Word2Vec模型,设置向量长度为每句话的平均长度,在降低计算资源消耗的同时保留原意。设置skip-gram参数为1,可以更准确获取词的上下文信息。最后,构建好的模型词汇表如表3所示。
Table 3. Vocabulary built by Word2Vec model
表3. Word2Vec模型建立的词汇表
Figure 4. Visual representation of the word vector space of the Word2Vec model
图4. Word2Vec模型的词向量空间的可视化表示
通过Word2Vec,我们将输入的文本数据建立为2332个词汇大小的词汇表,且词向量空间的可视化表示如图4所示。
3.1.3. 使用余弦相似度计算句向量相似度
在使用余弦相似度算法计算句子相似程度时,因为Word2Vec模型只能嵌入词向量,并不能直接嵌入句向量。因此,我们要用特殊的方式计算出详细症状和输入问题的句向量。我们使用的方法是通过将每句包含的词向量相加求和再取平均的方式来表示句向量。在公式(1) (2)中Vsentencei表示句向量,Vi表示词向量,n表示单句文本中包含的词向量个数,m表示句向量个数。
(1)
(2)
3.1.4. 调用ChatGPT3.5模型接口
通过OpenAI官网获取OPENAI_API_KEY,在配置好模型接口后,就可以通过接口调用ChatGPT模型实现问答功能。
3.1.5. 修改提示(Prompt)并使用模型回答问题
Prompt是用户与语言模型交互的起始点,它可以告诉模型用户的意图,并且期望模型能以有意义且相关的方式回应。 通过精心设计的Prompt,我们可以引导大语言模型(LLM)更好地理解用户的意图,并生成更准确、有用的回答。Prompt工程涉及开发、优化和测试迭代Prompt,以帮助用户有效地与语言模型进行交互[5]。
例如在我们原有问题“我的嗓子疼,喉咙干痒是什么病?”的基础上,增加提示词为“你是一个医疗专家,帮我结合给定的资料,回答一个问题。如果问题无法从资料中获得,请输出结合给定的资料,无法回答问题。资料:{0}问题:{1}”,资料:{0}是通过检索得到的相关知识文档,问题:{1}是我们的原有问题。
在原有的提示基础上增加了更为精准的提示,如“你是一个医疗专家”,这就能使模型更为准确的定位到问题领域,从而能更好地推理出我们问题的答案。
3.2. 实验结果分析
实验结果对比
Table 4. Document retrieval results of Word2Vec model
表4. Word2Vec模型的文档检索结果
问题输入:头疼、流鼻血是怎么回事,该怎么治疗? |
应用模型:Word2Vec |
模型回答: 病症名称:副鼻窦炎 治疗方法:副鼻窦炎诊疗知识 就诊科室:耳鼻喉科 治疗费用:市三甲医院约(1000~5000元) 治疗方法:药物治疗支持性治疗副鼻窦炎一般治疗 |
续表
一. 西医治疗 如何治疗:急性副鼻窦炎药物治疗为主(头孢唑啉钠),手术治疗为辅。慢性副鼻窦炎药物治疗为辅,手术治疗为主。 手术治疗方法介绍鼻内窥镜功能性微创手术治疗副鼻窦炎: 鼻内窥镜功能性微创手术已经成为治疗慢性副鼻窦炎最重要的手术,是近年来发展起来的一项全新技术。可以精确的去除鼻窦内病变组织,开放或扩大鼻窦自然开口,恢复鼻窦的正常生理功能。鼻内窥 镜鼻窦手术具有传统鼻窦炎手术无法比拟的微创性。被誉为功能性鼻窦内窥镜手术,即是在彻底清除鼻窦内炎性病变的基础上,重新建立鼻腔、鼻窦的良好的通气引流,从而达到彻底治疗各种鼻窦炎、鼻窦囊肿及鼻息肉等目的。此项技术具有手术精细,一次性彻底,病人手术后恢复的时间缩短,创伤小,基本无痛苦,不需住院等特点。副鼻窦炎辨证论治。 |
二. 中医治疗 1. 可选用的中成药 肺经风热型:1) 筋通鼻炎水:外用滴鼻。一次2~3滴,一日3~4次。2)胆香鼻炎片:成人每次4~6片,一日3次,温开水送服,儿童减半。3) 鼻渊丸:每次服用12粒,一日3次,温开水送服。4) 苍耳子鼻炎胶囊:口服,按本品说明书要求服用。5) 鼻炎丸:每次6 g,一日2次,温开水送服。6) 香菊片:每次2~4次,一日3次,温开水送服。7) 辛苹冲剂:成人每次1袋,一日3次,开水冲服,小儿用量酌减。8) 鼻通丸:每次服用1丸,一日2次,温开水送服。9) 鼻渊舒口服液。 2. 按摩治疗法 按摩部位: 1) 足底部反射区:额窦、头部(大脑)、脑垂体、小脑及脑干、鼻、肺及支气管、腹腔神经丛、甲状腺、甲状旁腺、肾上腺、肾、输尿管、膀胱、失眠点、生殖腺。2) 足外侧反射区:生殖腺。3) 足背部反射区:上颌、下颌、扁桃体、喉与 气管、胸部淋巴腺(胸腺)、上身淋巴结、下身淋巴结。 3. 常用手法 1) 足底部反射区:拇指指端点法、食指指间关节点法、按法、食指关节刮法、拇指推法、擦法、拳面叩击法等。2) 足外侧反射区:食指外侧缘刮法、拇指推法、叩击法等。3) 足背部反射区:拇指指端点法、食指指间关节点法、食指推法、拇指推法等。另外按摩迎香穴、上迎香穴和内迎香穴,每日每穴30次。也可用微型鼻炎治疗仪按摩鼻通穴。均有治疗作用。 |
下面,我们将通过单纯词嵌入模型的文档检索结果和单纯的大语言模型ChatGPT的问答结果与RAG框架下二者结合后的模型回答结果做出比较,观察那种方法效果最佳。统一的模型问题输入为:头疼、流鼻血是怎么回事,该怎么治疗?
1) 单纯通过Word2Vec模型的文档检索结果,如表4所示。
2) 单纯通过ChatGPT大语言模型回答生成结果,如表5所示。
Table 5. ChatGPT large language model answer generation results
表5. ChatGPT大语言模型回答生成结果
问题输入:头疼、流鼻血是怎么回事,该怎么治疗? |
应用模型:ChatGPT |
模型回答: 脑袋疼并流鼻血可能是由于多种原因引起的。可能是由于头部受伤导致出血,也可能是由于高血压或血管破裂等情况引起出血。建议尽快就医,进行专业检查,以便明确病因。在就医之前,可以采取以下措施缓解症状: 1) 保持头部平放,避免剧烈运动; 2) 坐姿或半躺姿势; 3) 用冰袋敷在鼻子上,帮助止血; 4) 避免用手触摸鼻子。需要尽快就医以确定病因,并接受治疗。治疗措施可能包括止血药物、手术或其他药物治疗。不要忽视脑疼和流鼻血的症状,及时就医是非常重要的。祝您早日康复! |
3) 使用RAG框架结合Word2Vec模型和ChatGPT大语言模型后的检索增强生成结果,如表6所示。
Table 6. The RAG framework combines the Word2Vec model and the ChatGPT large language model to enhance retrieval and generate results
表6. RAG框架结合Word2Vec模型和ChatGPT大语言模型后的检索增强生成结果
问题输入:头疼、流鼻血是怎么回事,该怎么治疗? |
应用模型:RAG框架(结合Word2Vec模型与ChatGPT模型) |
模型回答: 根据给定的资料,病症名称为副鼻窦炎,主要表现为头部疼痛和流鼻血。治疗方法包括药物治疗和手术治疗。药物治疗为主,常用的药物有头孢唑啉钠。对于慢性副鼻窦炎,还可以考虑鼻内窥镜功能性微创手术。另外,中医治疗可选择中成药和按摩治疗法。具体治疗方案可以在耳鼻喉科就诊后,医生根据病情进行综合治疗。因此,如果出现头部疼痛和流鼻血的症状,建议尽快就医进行诊断和治疗。 |
通过给三种不同模型相同的输入,我们可以明显的观察到,通过使用Word2Vec模型,可以在外部的文本数据库中根据输入检索出最相关的病例数据,描述的角度也非常专业。但是将同样的输入传入给ChatGPT,它会对输入的内容进行相关的推理,但是并不能给出更加专业的医疗建议。因此,再通过RAG框架的加持下,我们把由Word2Vec模型检索出的专业数据知识和用户提出的问题通过编写Prompt的方式传入给ChatGPT后,ChatGPT可以根据相关的医疗数据知识和问题,结合自身强大的推理能力,成功地总结出一套既专业又人性化的答案。
4. 实验结论
由上述三种实验结果可见,单纯使用Word2Vec模型得到的文档检索结果是把原有数据库中的文本数据通过相似度匹配实现最佳相似的文本检索,内容虽然详细,但是过于繁琐,没有大语言模型的推理效果好。单纯的使用大语言模型的结果虽然推理结果较为符合问题,但明显的缺陷是回答不够精确。例如知识库中给出的病例结果是副鼻窦炎,大语言模型并不具备相关的医疗方面知识,所以生成的答案比较通用化,并不能很好的给出专业性更强的答案。通过使用RAG框架实现了基于Word2vec模型的文档检索和大语言模型的学习推理能力,取长补短,实现了检索增强生成,使大语言模型不但具备了具体专业领域内的知识,而且利用其自身强大的推理能力实现了返回给用户更加精确合理的答案。
通过对RAG技术的应用,使我们能够更加高效地使用大模型。但目前RAG技术发展还有很多不足之处,如检索阶段可能会遇到精度和召回率的问题,RAG技术可能需要更多的计算资源问题等等。但是我相信随着技术的不断发展,这些问题终将迎刃而解。
基金项目
大连民族大学创新创业训练计划(202312026027)资助。