面试题 1.1
为什么大模型需要外挂(向量)知识库?如何将外部知识注入大模型,最直接的方法:利用外部知识对大模型进行微调
回答
大模型需要外挂(向量)知识库的原因:
- 知识更新频率:大模型在训练时使用的知识是静态的,而实际应用中知识不断更新,外挂知识库可以确保模型使用最新的信息。
- 知识覆盖范围:单纯依靠模型训练时的数据可能无法覆盖所有领域的知识,通过外挂知识库可以扩展模型的知识覆盖范围。
- 效率问题:在大模型中直接嵌入所有知识不仅训练成本高,而且在推理过程中也会导致效率低下,使用外挂知识库可以提高响应速度和效率。
将外部知识注入大模型的最直接方法:利用外部知识对大模型进行微调
思路:构建几十万量级的数据,然后利用这些数据对大模型进行微调,以将额外知识注入大模型。
优点:简单粗暴,能够直接将额外知识嵌入模型。
缺点:
- 效果有限:几十万量级的数据可能无法很好地将额外知识注入大模型,导致知识融合效果不理想。
- 训练成本高:需要多卡并行训练,且需要训练很多天,成本昂贵。
既然大模型微调不是将外部知识注入大模型的最优方案,那是否有其它可行方案?
可行方案:
-
使用外挂(向量)知识库:
-
- 背景介绍:外挂知识库可以通过向量化的方式存储大量的知识点,并在模型推理过程中动态调用这些知识。知识库可以不断更新,确保模型使用最新的信息。
- 实现方式:在模型推理时,通过检索和匹配机制,调用外挂知识库中的相关知识,以补充模型的回答。
-
知识蒸馏(Knowledge Distillation):
-
- 背景介绍:知识蒸馏是一种从大模型向小模型传递知识的方法,可以将大模型中的知识提取并注入到小模型中,从而降低计算成本。
- 实现方式:训练一个辅助模型,利用大模型的输出作为标签,指导小模型学习,从而将知识注入小模型。
-
检索增强模型(Retrieval-Augmented Generation, RAG):
-
- 背景介绍:RAG模型结合了检索和生成的能力,通过检索模块找到相关的知识,再由生成模块生成回答。
- 实现方式:在生成回答之前,首先通过检索模块找到相关知识,然后将检索到的信息与模型输入结合,通过生成模块生成最终回答。
-
动态适应机制(Dynamic Adaptation Mechanism):
-
- 背景介绍:动态适应机制允许模型在推理过程中根据上下文动态调整和调用外部知识。
- 实现方式:设计模型架构,使其能够在推理过程中动态调用外部知识库,并根据上下文信息进行调整和生成答案。
面试题 1.2
基于LLM+向量库的文档对话思路是怎么样?
回答
基于LLM+向量库的文档对话的基本思路包括以下步骤:
-
加载文件
-
- 背景介绍:首先,需要加载包含要对话的文档文件。这可以是各种格式的文档,如PDF、Word、TXT等。
- 实现方式:使用适当的库(如PyMuPDF、docx等)将文件加载到系统中。
-
读取文本
-
- 背景介绍:将加载的文件内容读取成纯文本格式,便于后续处理。
- 实现方式:利用文件处理库读取文本内容,并进行必要的预处理,如去除多余的空格和特殊字符。
-
文本分割
-
- 背景介绍:为了便于向量化处理和提高检索效率,需要将长文本分割成较小的段落或句子。
- 实现方式:可以使用自然语言处理技术进行段落或句子的分割,常用的方法包括按段落、句子或固定长度进行分割。
-
文本向量化
-
- 背景介绍:将分割后的文本转换为向量表示,以便进行相似性计算。
- 实现方式:利用预训练的语言模型(如BERT、GPT等)将文本段落转换为向量表示。可以使用开源库(如Sentence-BERT、Transformers等)实现向量化。
-
问句向量化
-
- 背景介绍:将用户输入的问题转换为向量表示,以便与文档向量进行匹配。
- 实现方式:同样使用预训练的语言模型将问题转换为向量表示。
-
在文本向量中匹配出与问句向量最相似的Top K个
-
- 背景介绍:利用相似性度量(如余弦相似度)在文本向量库中找到与问句向量最相似的Top K个向量。
- 实现方式:计算问句向量与所有文本向量的相似度,选择相似度最高的Top K个文本向量。可以使用快速检索算法(如FAISS)提高匹配效率。
-
匹配出的文本作为上下文和问题一起添加到Prompt中
-
- 背景介绍:将找到的最相似的文本段落作为上下文信息,与用户的问题一起形成新的Prompt,提供给LLM生成回答。
- 实现方式:将选中的Top K个文本段落拼接成一个上下文字符串,并将其与用户的问题一起构造新的输入Prompt。
-
提交给LLM生成回答
-
- 背景介绍:将构造好的Prompt提交给预训练的大语言模型(LLM),生成最终的回答。
- 实现方式:调用大语言模型的API或框架(如GPT-3、ChatGPT等),将Prompt输入模型,获取生成的回答。
面试题 1.3
基于LLM+向量库的文档对话核心技术是什么?
回答
基于LLM+向量库的文档对话核心技术:embedding
思路:
将用户知识库内容经过 embedding 存入向量知识库,然后用户每一次提问也会经过 embedding,利用向量相关性算法(例如余弦算法)找到最匹配的几个知识库片段,将这些知识库片段作为上下文,与用户问题一起作为 prompt 提交给 LLM 回答。
-
Embedding(嵌入)技术
-
- 背景介绍:Embedding 是将文本数据转换为固定长度的向量表示的技术,这些向量捕捉了文本的语义信息,便于后续的相似度计算和检索。
- 实现方式:使用预训练的语言模型(如BERT、GPT)将文本转换为高维向量。常用的工具和库包括Transformers、Sentence-Transformers等。
-
向量相关性算法
-
-
背景介绍:向量相关性算法用于计算两个向量之间的相似度,常用的算法包括余弦相似度、欧氏距离等。
-
实现方式:
-
-
-
向量检索工具
-
- 背景介绍:为了在大规模向量库中快速找到相似向量,使用专门的向量检索工具可以显著提高效率。
- 实现方式:常用的向量检索工具包括FAISS、Annoy等,它们支持高效的最近邻搜索和相似性计算。
面试题 1.4
基于LLM+向量库的文档对话 prompt 模板 如何构建?
回答
构建基于LLM+向量库的文档对话的 prompt 模板需要确保提供足够的上下文信息,并明确要求LLM生成简洁且专业的回答。以下是详细的模板构建思路及示例:
Prompt 模板构建思路:
- 提供上下文信息:确保 prompt 包含从向量库中匹配到的相关文本片段,作为上下文信息。
- 明确回答要求:指明LLM需要根据提供的上下文信息回答问题,若信息不足,则提示无法回答。
- 语言和风格要求:指定回答应使用中文,且不能添加编造成分,保证回答的准确性和专业性。
具体步骤:
- 准备上下文信息(context):从向量库中匹配到的最相似文本片段。
- 准备用户问题(question):用户提出的具体问题。
- 构建 prompt 模板:整合上下文信息和问题,并加入明确的回答指示。
Prompt 模板示例:
已知信息:{context}
根据上述已知信息,简洁和专业地回答用户的问题。如果无法从中得到答案,请说“根据已知信息无法回答该问题”或“没有提供足够的相关信息”,不允许在答案中添加编造成分。答案请使用中文。
问题是:{question}
基于LLM+向量库的文档对话优化面
痛点1:文档切分粒度不好把控,既担心噪声太多又担心语义信息丢失
问题描述
问题1:如何让LLM简要、准确回答细粒度知识?
-
举例及标答:用户:2023年我国上半年的国内生产总值是多少?LLM:根据文档,2023年的国民生产总值是593034亿元。
-
需求分析:
-
- 简要,不要有其他废话。
- 准确,不要随意编造。
问题2:如何让LLM回答出全面的粗粒度(跨段落)知识?
-
举例及标答:用户:根据文档内容,征信中心有几点声明?LLM:根据文档内容,有三点声明,分别是:一、……;二……;三……。
-
需求分析:
-
- 语义级别的分割,而不是简单基于html或者pdf的换行符分割。
- 防止模型只回答部分内容而遗漏其他重要信息。
解决方案:
原则:基于LLM的文档对话架构分为两部分:先检索,后推理。重心在检索(推荐系统),推理交给LLM整合即可。检索部分要满足三点:①尽可能提高召回率,②尽可能减少无关信息,③速度快。
具体实现:
语义切分和关键信息抽取
- 语义切分方法1:利用NLP的篇章分析(discourse parsing)工具,提取段落之间的主要关系,并合并具有从属关系的段落,确保每段表达同一主题。
- 语义切分方法2:利用BERT等模型进行语义分割,通过判断相邻段落的语义衔接关系来进行切分。可以设置相似度阈值进行合并或断开,保证切分的段落语义连贯。
def is_nextsent(sent, next_sent):
encoding = tokenizer(sent, next_sent, return_tensors="pt", truncation=True, padding=False)
with torch.no_grad():
outputs = model(**encoding, labels=torch.LongTensor([1]))
logits = outputs.
logitsprobs = torch.softmax(logits/TEMPERATURE, dim=1)
next_sentence_prob = probs[:, 0].item()
return next_sentence_prob > MERGE_RATIO
_RATIO
段落和句子的关键信息抽取
- 方法1:利用成分句法分析(constituency parsing)和命名实体识别(NER)工具提取核心部分和重要实体。
- 方法2:使用语义角色标注(Semantic Role Labeling)提取“谁对谁做了什么”的信息。
- 方法3:使用关键词提取工具(如HanLP或KeyBERT)提取关键信息。
- 方法4:训练一个生成关键词的模型,如ChatLaw中的KeyLLM模型。
多级索引系统
- 组织所有文本成二级索引,第一级是关键信息,第二级是原始文本,二者一一映射。
- 检索部分只对关键信息做embedding,参与相似度计算,把召回结果映射的原始文本交给LLM。
文档切片和检索
- 基于语义切片,防止大粒度的切片带来噪声。
- 使用高效的向量检索工具(如FAISS)和高质量的文本向量化工具,并对文本向量化工具进行微调。
痛点2:在基于垂直领域表现不佳
解决方案:
-
模型微调
-
- 对embedding模型进行垂直领域数据微调。
- 对LLM进行垂直领域数据微调。
痛点3:langchain 内置问答分句效果不佳
解决方案:
- 使用更好的文档拆分方式(如达摩院的语义识别模型)。
- 改进填充方式,仅添加相关度高的句子。
- 文本分段后,对每段分别总结,基于总结内容进行匹配。
痛点4:如何尽可能召回与query相关的Document
解决方案:
- 切分Document时,考虑Document的长度、Document embedding质量和被召回Document数量之间的相互影响。
- 使用高质量的文本向量化工具(如经过微调的工具)提高检索效果。
- 结合ES搜索结果与FAISS结果。
痛点5:如何让LLM基于query和context得到高质量的response
解决方案:
- 尝试多个prompt模板,选择最合适的。
- 用与本地知识问答相关的语料,对LLM进行微调。
痛点6:embedding模型在表示text chunks时偏差太大
解决方案:
- 用更小的text chunk配合更大的topk来提升表现。
- 使用适合多语言的embedding模型。
痛点7:不同的 prompt 可能产生完全不同的效果
解决方案:
- 构造合适的prompt,进行大量尝试。
- 训练和微调时,使用包含指令数据的instruction data。
痛点8:llm生成效果问题
解决方案:
- 选择适合的开源模型并进行微调,如llama2和baichuan2。
- 构造domain dataset进行微调,让LLM更符合特定需求。
痛点9:如何更高质量地召回context喂给LLM
解决方案:
- 更细颗粒度地做recall,提高召回质量。
- 使用学术相关的embedding模型和指令数据,优化pdf解析。
如何学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?
”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人」
,毕竟AI时代,谁先尝试,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
全套AGI大模型学习大纲+路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。