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

面试题 1.1

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

回答

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

  1. 知识更新频率:大模型在训练时使用的知识是静态的,而实际应用中知识不断更新,外挂知识库可以确保模型使用最新的信息。

  2. 知识覆盖范围:单纯依靠模型训练时的数据可能无法覆盖所有领域的知识,通过外挂知识库可以扩展模型的知识覆盖范围。

  3. 效率问题:在大模型中直接嵌入所有知识不仅训练成本高,而且在推理过程中也会导致效率低下,使用外挂知识库可以提高响应速度和效率。

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

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

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

缺点:

  1. 效果有限:几十万量级的数据可能无法很好地将额外知识注入大模型,导致知识融合效果不理想。

  2. 训练成本高:需要多卡并行训练,且需要训练很多天,成本昂贵。

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

可行方案:

  1. 使用外挂(向量)知识库:
  • 背景介绍:外挂知识库可以通过向量化的方式存储大量的知识点,并在模型推理过程中动态调用这些知识。知识库可以不断更新,确保模型使用最新的信息。

  • 实现方式:在模型推理时,通过检索和匹配机制,调用外挂知识库中的相关知识,以补充模型的回答。

  1. 知识蒸馏(Knowledge Distillation):
  • 背景介绍:知识蒸馏是一种从大模型向小模型传递知识的方法,可以将大模型中的知识提取并注入到小模型中,从而降低计算成本。

  • 实现方式:训练一个辅助模型,利用大模型的输出作为标签,指导小模型学习,从而将知识注入小模型。

  1. 检索增强模型(Retrieval-Augmented Generation, RAG):
  • 背景介绍:RAG模型结合了检索和生成的能力,通过检索模块找到相关的知识,再由生成模块生成回答。

  • 实现方式:在生成回答之前,首先通过检索模块找到相关知识,然后将检索到的信息与模型输入结合,通过生成模块生成最终回答。

  1. 动态适应机制(Dynamic Adaptation Mechanism):
  • 背景介绍:动态适应机制允许模型在推理过程中根据上下文动态调整和调用外部知识。

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

面试题 1.2

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

回答

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

  1. 加载文件
  • 背景介绍:首先,需要加载包含要对话的文档文件。这可以是各种格式的文档,如PDF、Word、TXT等。

  • 实现方式:使用适当的库(如PyMuPDF、docx等)将文件加载到系统中。

  1. 读取文本
  • 背景介绍:将加载的文件内容读取成纯文本格式,便于后续处理。

  • 实现方式:利用文件处理库读取文本内容,并进行必要的预处理,如去除多余的空格和特殊字符。

  1. 文本分割
  • 背景介绍:为了便于向量化处理和提高检索效率,需要将长文本分割成较小的段落或句子。

  • 实现方式:可以使用自然语言处理技术进行段落或句子的分割,常用的方法包括按段落、句子或固定长度进行分割。

  1. 文本向量化
  • 背景介绍:将分割后的文本转换为向量表示,以便进行相似性计算。

  • 实现方式:利用预训练的语言模型(如BERT、GPT等)将文本段落转换为向量表示。可以使用开源库(如Sentence-BERT、Transformers等)实现向量化。

  1. 问句向量化
  • 背景介绍:将用户输入的问题转换为向量表示,以便与文档向量进行匹配。

  • 实现方式:同样使用预训练的语言模型将问题转换为向量表示。

  1. 在文本向量中匹配出与问句向量最相似的Top K个
  • 背景介绍:利用相似性度量(如余弦相似度)在文本向量库中找到与问句向量最相似的Top K个向量。

  • 实现方式:计算问句向量与所有文本向量的相似度,选择相似度最高的Top K个文本向量。可以使用快速检索算法(如FAISS)提高匹配效率。

  1. 匹配出的文本作为上下文和问题一起添加到Prompt中
  • 背景介绍:将找到的最相似的文本段落作为上下文信息,与用户的问题一起形成新的Prompt,提供给LLM生成回答。

  • 实现方式:将选中的Top K个文本段落拼接成一个上下文字符串,并将其与用户的问题一起构造新的输入Prompt。

  1. 提交给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等。

  1. 向量相关性算法

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

  3. 实现方式:

在这里插入图片描述

  1. 向量检索工具

  2. 背景介绍:为了在大规模向量库中快速找到相似向量,使用专门的向量检索工具可以显著提高效率。

  3. 实现方式:常用的向量检索工具包括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. 语义切分和关键信息抽取
  • 语义切分方法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.logits``probs = torch.softmax(logits/TEMPERATURE, dim=1)``next_sentence_prob = probs[:, 0].item()`        `return next_sentence_prob > MERGE_RATIO

_RATIO

  1. 段落和句子的关键信息抽取
  • 方法1:利用成分句法分析(constituency parsing)和命名实体识别(NER)工具提取核心部分和重要实体。

  • 方法2:使用语义角色标注(Semantic Role Labeling)提取“谁对谁做了什么”的信息。

  • 方法3:使用关键词提取工具(如HanLP或KeyBERT)提取关键信息。

  • 方法4:训练一个生成关键词的模型,如ChatLaw中的KeyLLM模型。

  1. 多级索引系统
  • 组织所有文本成二级索引,第一级是关键信息,第二级是原始文本,二者一一映射。

  • 检索部分只对关键信息做embedding,参与相似度计算,把召回结果映射的原始文本交给LLM。

  1. 文档切片和检索
  • 基于语义切片,防止大粒度的切片带来噪声。

  • 使用高效的向量检索工具(如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解析。

参考:PDFTriage: Question Answering over Long, Structured Documents

参考链接:https://www.langchain.com/langchain

附上技术清单

在这里,我们想要强调的是:成功求职并不是一件难事,关键在于你是否做好了充分的准备。通过学习和掌握AI技术的相关知识和技能,了解面试中可能出现的问题和技巧,你就能够在面试中展现出自己的专业素养和实力,赢得面试官的青睐和认可。因此,让我们一起努力,用知识和技能武装自己,迎接AI时代的挑战和机遇吧!
有需要的朋友可以扫描下方二维码,免费获取更多相关资料!
请添加图片描述

最后,祝愿所有转行、求职的同学都能够在AI产品面试中取得优异的成绩,找到心仪的工作!加油!

大模型基础面

在这里插入图片描述

大模型进阶面

在这里插入图片描述

大模型微调面

在这里插入图片描述

大模型langchain面

在这里插入图片描述

大模型推理面

在这里插入图片描述

更多面试题分享

在这里插入图片描述

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

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

相关文章

免杀笔记 -->API的整理Shellcode加密(过DeFender)

最近更新频率明显下降我懒,那么今天就来记录一下我们的一些常用的API的整理以及ShellCode的加密。 1.WinAPI整理 问我为什么要整理? 就是用起来的时候要左翻右翻 :: 烦死了 1.VirtualAlloc VirtualAlloc(NULL,sizeof(buf),MEM_…

人工智能和计算机视觉领域国际学术会议submission

文章目录 1. AAAI 20252. CVPR 20253. ICCV 20254. IJCAI 20255. ICRA 20256. NeurIPS 20257. ACL 20258. ICLR 2025 1. AAAI 2025 人工智能促进协会(AAAI)是一个成立于1979年的非营利性科学组织,专注于深化对智能行为和思维机制的科学理解&…

通过 WSL 2 在Windows 上挂载 Linux 磁盘

原文查看 曾为了传输或者共享不同系统的文件频繁地在 Windows 和 Linux 系统之间切换,效率过低,所以尝试通过 WSL 2 在Windows 上挂载 Linux 磁盘。 先决条件 需要在Windows 10 2004 及更高版本(Build 19041 及更高版本)或 Win…

排查一次线程泄漏

背景:最近经常发生K8S健康检查到应用的心跳接口超时不通,然后发生了重启,第一时间进入pod内部使用任何jvm命令都会导致java进程重启(也包括arthas工具使用不了),dump不下来,事故现场没法保留&am…

SpringBoot集成Sharding-JDBC实现分库分表

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍拆分方式集成并测试1.引入依赖2.创建库和表3.pom文件配置3.编写测试类Entity层Mapper接口MapperXML文件测试类 4.运行结果 自定义分片规则定义分片类编写pom文件 总结提升 版本介绍 SpringBoot的版本是: 2.3.…

电子期刊制作攻略:从零开始,轻松入门

​随着互联网的快速发展,电子期刊已经逐渐成为人们获取信息和娱乐的重要途径。越来越多的人开始关注并投身于电子期刊的制作行业。那么,如何从零开始,轻松入门电子期刊制作呢? 1.首先点击FLBOOK在线制作制作电子杂志平台 2.点击开…

【odoo17】后端py方法触发右上角提示组件

概要 在前面文章中,有介绍过前端触发的通知服务。 【odoo】右上角的提示(通知服务) 此文章则介绍后端触发方法。 内容 直接上代码:但是前提一定是按钮触发!!!!! def bu…

无法解析插件 org.apache.maven.plugins:maven-war-plugin:3.2.3(已解决)

文章目录 1、问题出现的背景2、解决方法 1、问题出现的背景 最开始我想把springboot项目转为javaweb项目,然后我点击下面这个插件 就转为javaweb项目了,但是我后悔了,想要还原成springboot项目,点开项目结构关于web的都移除了&am…

HarmonyOS Next 省市区级联(三级联动)筛选框

效果图 完整代码 实例对象 export class ProvinceBean {id?: stringpid?: stringisSelect?: booleandeep?: objectextName?: stringchildren?: ProvinceBean[] }级联代码 import { MMKV } from tencent/mmkv/src/main/ets/utils/MMKV import { ProvinceBean } from ..…

【Git】merge合并分支

两个分支未修改同一个文件的同一处位置: Git自动合并 两个分支修改了同一个文件的同一处位置:产生冲突 例: 在master分支修改了main同时,feat分支也修改了相同的文件 合并的时候就会产生冲突 解决方法: Step1- 手工修改冲突文件,合并冲突内容…

【数据结构】单链表的增删改查

介绍 链表是有序的列表,但是它在内存中是如下存储的: ①链表以节点的方式进行存储,是链式存储的 ②每个节点包含 data 域、next 域:指向下一节点 ③链表的各个节点不一定是连续存放的 ④链表分为有头节点的链表和没有头节点的链表…

比肩 GPT-4o 的 Llama 3.1 本地部署快速体验的方法

比肩 GPT-4o 的 Llama 3.1 本地部署快速体验的方法 flyfish Llama 3.1模型简介 Llama 3.1是一系列大型语言模型,包含以下几种规模: 8B 参数:模型中有80亿个参数 70B 参数:模型中有700亿个参数 405B 参数:模型中有4…

深入理解MySQL锁机制与性能优化:详解记录锁、间隙锁、临键锁及慢SQL查询分析

1. 事务隔离和锁机制详解 记录锁 第一种情况,当我们对于唯一性的索引(包括唯一索引和主键索引)使用等值查询,精准匹配到一条记录的时候,这个时候使用的就是记录锁。 比如 where id = 1 4 7 10。 间隙锁 第二种情况,当我们查询的记录不存在,无论是用等值查询还是范围…

【vue教程】四. Vue 计算属性和侦听器

目录 本章涵盖知识点回顾计算属性(Computed)创建计算属性计算属性的多样性计算属性的数组过滤计算属性的复杂表达式 计算属性 vs 方法计算属性的实例演示 侦听器(Watchers)创建侦听器侦听器的高级用法侦听器的深度观察侦听器的立即…

无线遥控控制直流电机和无刷电机开关

一 目的 此文章记录了arduino与陶晶驰串口屏实现联动,点击屏幕双态开关远程控制arduino2560板载的直流电机和无刷电机开关。为手搓乒乓球发球机做准备。 二 接线 2.1串口屏接线 串口屏与Arduino UNO接线如下: ———————————————— RX …

pdf2image:将PDF文档转化为图像的Python魔法

标题:探索pdf2image:将PDF文档转化为图 像的Python魔法 背景 在数字时代,我们经常需要处理各种格式的文档,尤其是PDF文件。PDF以其跨平台的可读性和稳定性而广受欢迎。然而,有时我们需要将PDF文件转换成图像格式&am…

C++ - char*、const char*、char[]、string

const char* const char* 用来定义字符串常量。 char[ ] char型的字符数组是一种定长的数组,存储指定长度的字符序列,数组中的每个元素都是一个char类型的变量,如: char arr[] {h, a, l, l, o, \0}; char c arr[0]; // 访问…

CentOS怎么关闭自动锁屏?

禁止自动锁屏 有时候几分钟不用Centos,系统就自动锁屏了,这是一种安全措施,防止别人趁你不在时使用你的系统。但对于大部分人而言,这是没有必要的,尤其是Centos虚拟机,里面没啥重要的东西,每次…

光伏发电管理软件:光伏企业的核心驱动力

光伏产业面对日益增长的装机容量、复杂多变的运维需求以及激烈的市场竞争,光伏企业如何高效管理、优化运营、提升效益,成为了行业关注的焦点。在此背景下,鹧鸪云光伏发电管理软件应运而生,并逐渐成为光伏企业的核心驱动力。 一、提…

Transformer合集

资料 位置编码:https://zhuanlan.zhihu.com/p/454482273 自注意力:https://zhuanlan.zhihu.com/p/455399791 LN:https://zhuanlan.zhihu.com/p/456863215 ResNet:https://zhuanlan.zhihu.com/p/459065530 Subword Tokenizati…