大模型面试:LLM+向量库的文档对话系统

news2024/11/15 7:55:30

面试题 1.1

为什么大模型需要外挂(向量)知识库?如何将外部知识注入大模型,最直接的方法:利用外部知识对大模型进行微调

回答

大模型需要外挂(向量)知识库的原因:

  1. 知识更新频率:大模型在训练时使用的知识是静态的,而实际应用中知识不断更新,外挂知识库可以确保模型使用最新的信息。
  2. 知识覆盖范围:单纯依靠模型训练时的数据可能无法覆盖所有领域的知识,通过外挂知识库可以扩展模型的知识覆盖范围。
  3. 效率问题:在大模型中直接嵌入所有知识不仅训练成本高,而且在推理过程中也会导致效率低下,使用外挂知识库可以提高响应速度和效率。

将外部知识注入大模型的最直接方法:利用外部知识对大模型进行微调

思路:构建几十万量级的数据,然后利用这些数据对大模型进行微调,以将额外知识注入大模型。

优点:简单粗暴,能够直接将额外知识嵌入模型。

缺点:

  1. 效果有限:几十万量级的数据可能无法很好地将额外知识注入大模型,导致知识融合效果不理想。
  2. 训练成本高:需要多卡并行训练,且需要训练很多天,成本昂贵。

既然大模型微调不是将外部知识注入大模型的最优方案,那是否有其它可行方案?

可行方案:

  1. 使用外挂(向量)知识库:

    • 背景介绍:外挂知识库可以通过向量化的方式存储大量的知识点,并在模型推理过程中动态调用这些知识。知识库可以不断更新,确保模型使用最新的信息。
    • 实现方式:在模型推理时,通过检索和匹配机制,调用外挂知识库中的相关知识,以补充模型的回答。
  2. 知识蒸馏(Knowledge Distillation):

    • 背景介绍:知识蒸馏是一种从大模型向小模型传递知识的方法,可以将大模型中的知识提取并注入到小模型中,从而降低计算成本。
    • 实现方式:训练一个辅助模型,利用大模型的输出作为标签,指导小模型学习,从而将知识注入小模型。
  3. 检索增强模型(Retrieval-Augmented Generation, RAG):

    • 背景介绍:RAG模型结合了检索和生成的能力,通过检索模块找到相关的知识,再由生成模块生成回答。
    • 实现方式:在生成回答之前,首先通过检索模块找到相关知识,然后将检索到的信息与模型输入结合,通过生成模块生成最终回答。
  4. 动态适应机制(Dynamic Adaptation Mechanism):

    • 背景介绍:动态适应机制允许模型在推理过程中根据上下文动态调整和调用外部知识。
    • 实现方式:设计模型架构,使其能够在推理过程中动态调用外部知识库,并根据上下文信息进行调整和生成答案。

面试题 1.2

基于LLM+向量库的文档对话思路是怎么样?

回答

基于LLM+向量库的文档对话的基本思路包括以下步骤:

  1. 加载文件

    • 背景介绍:首先,需要加载包含要对话的文档文件。这可以是各种格式的文档,如PDF、Word、TXT等。
    • 实现方式:使用适当的库(如PyMuPDF、docx等)将文件加载到系统中。
  2. 读取文本

    • 背景介绍:将加载的文件内容读取成纯文本格式,便于后续处理。
    • 实现方式:利用文件处理库读取文本内容,并进行必要的预处理,如去除多余的空格和特殊字符。
  3. 文本分割

    • 背景介绍:为了便于向量化处理和提高检索效率,需要将长文本分割成较小的段落或句子。
    • 实现方式:可以使用自然语言处理技术进行段落或句子的分割,常用的方法包括按段落、句子或固定长度进行分割。
  4. 文本向量化

    • 背景介绍:将分割后的文本转换为向量表示,以便进行相似性计算。
    • 实现方式:利用预训练的语言模型(如BERT、GPT等)将文本段落转换为向量表示。可以使用开源库(如Sentence-BERT、Transformers等)实现向量化。
  5. 问句向量化

    • 背景介绍:将用户输入的问题转换为向量表示,以便与文档向量进行匹配。
    • 实现方式:同样使用预训练的语言模型将问题转换为向量表示。
  6. 在文本向量中匹配出与问句向量最相似的Top K个

    • 背景介绍:利用相似性度量(如余弦相似度)在文本向量库中找到与问句向量最相似的Top K个向量。
    • 实现方式:计算问句向量与所有文本向量的相似度,选择相似度最高的Top K个文本向量。可以使用快速检索算法(如FAISS)提高匹配效率。
  7. 匹配出的文本作为上下文和问题一起添加到Prompt中

    • 背景介绍:将找到的最相似的文本段落作为上下文信息,与用户的问题一起形成新的Prompt,提供给LLM生成回答。
    • 实现方式:将选中的Top K个文本段落拼接成一个上下文字符串,并将其与用户的问题一起构造新的输入Prompt。
  8. 提交给LLM生成回答

    • 背景介绍:将构造好的Prompt提交给预训练的大语言模型(LLM),生成最终的回答。
    • 实现方式:调用大语言模型的API或框架(如GPT-3、ChatGPT等),将Prompt输入模型,获取生成的回答。

图片

图片

面试题 1.3

基于LLM+向量库的文档对话核心技术是什么?

回答

基于LLM+向量库的文档对话核心技术:embedding

思路:

将用户知识库内容经过 embedding 存入向量知识库,然后用户每一次提问也会经过 embedding,利用向量相关性算法(例如余弦算法)找到最匹配的几个知识库片段,将这些知识库片段作为上下文,与用户问题一起作为 prompt 提交给 LLM 回答。

  1. Embedding(嵌入)技术

    • 背景介绍:Embedding 是将文本数据转换为固定长度的向量表示的技术,这些向量捕捉了文本的语义信息,便于后续的相似度计算和检索。
    • 实现方式:使用预训练的语言模型(如BERT、GPT)将文本转换为高维向量。常用的工具和库包括Transformers、Sentence-Transformers等。
  2. 向量相关性算法

    1. 背景介绍:向量相关性算法用于计算两个向量之间的相似度,常用的算法包括余弦相似度、欧氏距离等。

    2. 实现方式:

  3. 图片

  4. 向量检索工具

    1. 背景介绍:为了在大规模向量库中快速找到相似向量,使用专门的向量检索工具可以显著提高效率。
    2. 实现方式:常用的向量检索工具包括FAISS、Annoy等,它们支持高效的最近邻搜索和相似性计算。

面试题 1.4

基于LLM+向量库的文档对话 prompt 模板 如何构建?

回答

构建基于LLM+向量库的文档对话的 prompt 模板需要确保提供足够的上下文信息,并明确要求LLM生成简洁且专业的回答。以下是详细的模板构建思路及示例:

Prompt 模板构建思路:

  1. 提供上下文信息:确保 prompt 包含从向量库中匹配到的相关文本片段,作为上下文信息。
  2. 明确回答要求:指明LLM需要根据提供的上下文信息回答问题,若信息不足,则提示无法回答。
  3. 语言和风格要求:指定回答应使用中文,且不能添加编造成分,保证回答的准确性和专业性。

具体步骤:

  1. 准备上下文信息(context):从向量库中匹配到的最相似文本片段。
  2. 准备用户问题(question):用户提出的具体问题。
  3. 构建 prompt 模板:整合上下文信息和问题,并加入明确的回答指示。

Prompt 模板示例:

已知信息:{context}

根据上述已知信息,简洁和专业地回答用户的问题。如果无法从中得到答案,请说“根据已知信息无法回答该问题”或“没有提供足够的相关信息”,不允许在答案中添加编造成分。答案请使用中文。

问题是:{question}

基于LLM+向量库的文档对话优化面

痛点1:文档切分粒度不好把控,既担心噪声太多又担心语义信息丢失

问题描述

问题1:如何让LLM简要、准确回答细粒度知识?

  • 举例及标答:用户:2023年我国上半年的国内生产总值是多少?LLM:根据文档,2023年的国民生产总值是593034亿元。

  • 需求分析:

    1. 简要,不要有其他废话。
    2. 准确,不要随意编造。

问题2:如何让LLM回答出全面的粗粒度(跨段落)知识?

  • 举例及标答:用户:根据文档内容,征信中心有几点声明?LLM:根据文档内容,有三点声明,分别是:一、……;二……;三……。

  • 需求分析:

    1. 语义级别的分割,而不是简单基于html或者pdf的换行符分割。
    2. 防止模型只回答部分内容而遗漏其他重要信息。

解决方案:

原则:基于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:在基于垂直领域表现不佳

解决方案:

  1. 模型微调

    • 对embedding模型进行垂直领域数据微调。
    • 对LLM进行垂直领域数据微调。
痛点3:langchain 内置问答分句效果不佳

解决方案:

  1. 使用更好的文档拆分方式(如达摩院的语义识别模型)。
  2. 改进填充方式,仅添加相关度高的句子。
  3. 文本分段后,对每段分别总结,基于总结内容进行匹配。
痛点4:如何尽可能召回与query相关的Document

解决方案:

  1. 切分Document时,考虑Document的长度、Document embedding质量和被召回Document数量之间的相互影响。
  2. 使用高质量的文本向量化工具(如经过微调的工具)提高检索效果。
  3. 结合ES搜索结果与FAISS结果。
痛点5:如何让LLM基于query和context得到高质量的response

解决方案:

  1. 尝试多个prompt模板,选择最合适的。
  2. 用与本地知识问答相关的语料,对LLM进行微调。
痛点6:embedding模型在表示text chunks时偏差太大

解决方案:

  1. 用更小的text chunk配合更大的topk来提升表现。
  2. 使用适合多语言的embedding模型。
痛点7:不同的 prompt 可能产生完全不同的效果

解决方案:

  1. 构造合适的prompt,进行大量尝试。
  2. 训练和微调时,使用包含指令数据的instruction data。
痛点8:llm生成效果问题

解决方案:

  1. 选择适合的开源模型并进行微调,如llama2和baichuan2。
  2. 构造domain dataset进行微调,让LLM更符合特定需求。
痛点9:如何更高质量地召回context喂给LLM

解决方案:

  1. 更细颗粒度地做recall,提高召回质量。
  2. 使用学术相关的embedding模型和指令数据,优化pdf解析。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于喷墨打印:液滴喷射及基材影响的那些事儿

大家好,今天我们来探讨一篇关于液滴喷射在生物应用中相关知识的文章——《Understanding droplet jetting on varying substrate for biological applications》是发表于《International Journal of Bioprinting》。在生物打印领域,了解液滴在不同基材上…

做每日计划记录,有什么好的软件推荐2channel茅盾先生《春蚕》苏四嫂的过劳死茅盾的《秋收》主题和象征文学风格

目录 做每日计划记录,有什么好的软件推荐 2channel 茅盾先生《春蚕》 苏四嫂的过劳死 茅盾的《秋收》 主题和象征 文学风格 做每日计划记录,有什么好的软件推荐 做每日计划记录的软件有很多,下面是几款非常实用的推荐,适合…

基于yolov8的人员溺水检测告警监控系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的人员溺水检测告警监控系统是一种高效、智能的安全监控解决方案。该系统利用YOLOv8目标检测算法的先进性能,实现了对水域中人员溺水行为的精准识别与快速响应。 YOLOv8继承了YOLO系列算法的优点,如单次预测、速度快、精度高&a…

牛客周赛 Round 57(A,B,C,D,E,F,G)

比赛链接 官方题解 这场的题还不错,D是一个计算几何,考察到了一些线性代数里叉积的知识,E是爆搜打表,不太常规,所以做起来感觉还不错?FG偏简单,F是multiset线段树,G是很简单的构造…

C语言 | Leetcode C语言题解之第376题摆动序列

题目&#xff1a; 题解&#xff1a; int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int prevdiff nums[1] - nums[0];int ret prevdiff ! 0 ? 2 : 1;for (int i 2; i < numsSize; i) {int diff nums[i] - nums[i - 1];if ((…

maxwell读取mysql binlog到kafka

下载地址 https://maxwells-daemon.io/解压压缩包 tar -zxvf maxwell-1.29.0.tar.gz -C /opt/module/初始化maxwell元数据库 在mysql中为maxwell创建一个数据库 复制 config.properties.example 文件 cp config.properties.example config.properties修改config.propertie…

分享一个基于node.js的宠物医院预约挂号系统vue宠物医院管理系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

JS基础之【各种运算符与运算符的优先级】

&#x1f680; 个人简介&#xff1a;某大型国企高级前端开发工程师&#xff0c;7年研发经验&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码…

Nvidia财报前夕:市场预期股价波动创纪录,AI芯片巨头引领市场热潮

引言&#xff1a;Nvidia财报前市场躁动&#xff0c;股价波动预期创新高 随着Nvidia&#xff08;英伟达&#xff09;即将发布其最新财报&#xff0c;全球投资者和交易员们正屏息以待。作为全球人工智能芯片市场的领军者&#xff0c;Nvidia的每一次财报都牵动着市场的神经。据分析…

基于SpringBoot的校园二手交易平台

1.项目介绍 基于SpringBoot实现的校园二手交易平台。 技术框架&#xff1a;SpringBoot2.0.0 MyBatis1.3.2 Mysql5.7 Bootstrap 运行环境&#xff1a;jdk8 IntelliJ IDEA maven3 后台首页、菜单管理、角色管理、用户管理、日志管理、数据备份、分类管理、物品管理、 求…

BMC解决方案丨服务器故障诊断与预测平台方案设计与实现

近日&#xff0c;OurBMC社区理事成员单位浪潮计算机科技有限公司基于开放原子开源大赛的成果梳理了一份成熟的可落地方案——《基于BMC技术的服务器故障诊断与预测平台方案设计与实现》。该方案为开放原子开源大赛的冠军之作&#xff0c;极大推动了社区产业化落地的发展和工作。…

怎么用AI做赚钱的表情包?我来教你!真能轻松变现?我们试了试。

最近看到一则新闻&#xff0c;一个小哥靠做微信表情包赚了几十万&#xff0c;这引起了我的兴趣。 这让我想到&#xff0c;无论是传统的利他思维&#xff0c;还是投资自己的头脑&#xff0c;或者是表情包这样的新兴赚钱方式&#xff0c;成功的路径从未改变。 利他思维&#xff…

SystemTap(stap)脚本举例 包括系统调用监控,函数执行时间 函数出参信息和信号捕捉脚本等

SystemTap 脚本举例 运行环境检查 要想使用SystemTap&#xff0c;需要依赖环境支持。可以执行如下命令查看stap是否已经安装。 stap -ve probe begin { log("hello world") exit () }对内核函数增加探针&#xff0c;需要debuginfo信息&#xff0c;可以通过如下步检…

PyTorch构建神经网络

【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客 《PyTorch深度学习与企业级项目实战&#xff08;人工智能技术丛书&#xff09;》(宋立桓&#xff0c;宋立林)【摘要 书评 试读】- 京东图书 (jd.com) 训练一个神经网络通常需要提供大量的数据&#xff0c;我们称之…

特殊类设计(5个)与类型转换

引子&#xff1a;在生活中我们经常有不同类的需求&#xff0c;因此我们有了特殊类的设计&#xff08;有很多种模式等&#xff09;。由于类型需求不同我们有了类型转换。今天我们就来略讲略讲一下这方面的知识。 特殊类设计&#xff08;5个&#xff09; 注意&#xff1a;关键字…

uniapp发布包app.json文件配置及发包上传注意事项

一、分包&#xff08;提示主包大小不小于1.5M&#xff09; 我的分包代码 二、未开启js压缩 操作:【必须】在工具「详情」-「本地设置」中开启「上传代码时自动压缩脚本文件」的设置 三、未开启组件懒注入&#xff08;按需注入&#xff09; 只需将代码"lazyCodeLoading&qu…

深度剖析:黑神化悟空的防御机制,为何成为破解难题?

深度剖析&#xff1a;黑神化悟空的防御机制&#xff0c;为何成为破解难题&#xff1f; 黑神话悟空还没发售就被破解&#xff1f; #国产游戏 #悟空 #西游记 推荐阅读&#xff1a; 全红婵抖音魅力无限&#xff0c;粉丝数量历史性突破1000万大关&#xff01; 奥运激情日&#…

【日记】今天实在太累了(436 字)

正文 今天的工作强度跟之前完全不是一个级别。能不能不要给我找这么多事做&#xff0c;我只想摸鱼摆烂。以后到下一个单位就说自己啥都不会好了&#xff0c;省得一天天全来找我。 忙碌程度上升了一个数量级&#xff0c;一天结束之后完全不想说话。 好想睡觉。 昨晚尝试完成年度…

利用ADB命令截屏,并发送至指定邮箱

需求分析: 为满足对Android设备远程监控、故障排查或自动化报告生成等应用场景需求,本指南将指导你如何利用ADB(Android Debug Bridge)工具实现Android设备的截屏功能,并介绍如何将截屏结果通过远程通知的形式发送至指定邮箱。 关键词:ADB、截屏、远程通知、发送邮箱 准备…

程序设计—气象数据共享平台设计与实现 项目源码30172

摘 要 当前&#xff0c;气象数据的及时获取和共享对于许多行业和个人具有重要意义。然而&#xff0c;存在着数据获取不便、共享不畅、数据可视化展示不足等问题。为了解决这些问题&#xff0c;本研究旨在设计和开发一个基于C语言的气象数据共享平台&#xff0c;结合React框架实…