大模型面试知识点整理(三)

RAG和Agent部分

RAG的定义:Retrieval Augmented Generation检索增强生成

RAG的过程:

RAG即 Retrieval Augmented Generation 的简称,是现阶段增强使用 LLM 的常见方式之一,其一般步骤为:

1. 文档划分(Document Split)

2. 向量嵌入(Embedding)

3. 文档获取(Retrieve)

4. Prompt 工程(Prompt Engineering)

5. 大模型问答(LLM)

通常来说,可将RAG划分为召回(Retrieve)阶段和答案生成(Answer Generate)阶段

通过在外部知识库里检索匹配的知识并将信息融入prompt里。

index: 我们这里用了faiss index (原来是chromadb)因为faiss index可以支持更大规模的数据集。

加载向量数据库用的embedding:我们用了bce embedding,网易的开源项目QAnything.

compressor: bcereranker:二阶段精排,把更符合用户提问的文档排在前面,过滤不相干的文档。

retriever: db_retriever 和 bm25_retriever

使用了distance_strategy=DistanceStrategy.MAX_INNER_PRODUCT

因为这里的查找是按照内积排序寻找最近似样本,所以要使得不同样本之间的距离也就是内积最大。(? 为什么不用cosine距离)

retriever的技巧:使用HyQE技术,也就是将问题——文档检索变成问题——问题检索。因为文档字数太长,问题检索的相似度较低,召回结果的准确性不够。

其他retriever:bm25retriever? 似乎和tf-idf有相似之处,体现在词的重要性和词在所有文档里的出现频率。

chain:RAG chain

chain也就是一个prompt template,将用户提问和检索到的上下文内容一起填入模版内,然后送给大模型。

You are a helpful assistant that generates multiple search queries based on a single input query.

Generate multiple search queries related to: {USER_INPUT}
OUTPUT (4 queries):
 

关于RAG,还有什么其他要说的?

RAG的评测:

这里采用f1指标进行评测,计算TP,FP,FN得到P和R,然后F1=2PR/(P+R)

这里采用单字重合的频率来计算P和R。是不够准确的。

在测试集为向量数据库子集的情况下,F1指标为90%以上。

可以将菜谱名提纯,将菜谱名嵌入不同的提问模板里,例如**怎么做?我想做**怎么办?检查模型对于提问的鲁棒性。

前面是测试集为向量数据库的子集时的检测指标,如果测试集非向量数据库的子集,也就是说会出现检索没有命中的情况,这时的F1指标约为45%。

我们在测试后分析发现,仅仅使用F1-score进行测试评估模型和检索器效果的局限性在于,在本项目的设计中F1-score仅关注单个字符的匹配,忽略了词汇和句子的语义相似性,从而导致较好的答案得到较低的F1-score。一个可行的替代解决方案是采用第三方LLM服务(如ChatGPT)采用其他评估标准(如faithfulness, answer relevance, context precision, context recall等)进行评估。

重复数据问题:需要做数据清洗。

使用达摩院的开源数据清洗工具data-juicer,测试多种算子:window size,tokenization,是否在sub-sentence level去重。

清洗后的150w条菜谱剩余54w条左右。

因为langchain里的检索使用暴力检索的方式,性能下降较大,每次响应时长达1分钟。使用llama-index+faiss里的HNSW64方法检索:

八、HNSWx (最重要的放在最后说)
优点:该方法为基于图检索的改进方法,检索速度极快,10亿级别秒出检索结果,而且召回率几乎可以媲美Flat,最高能达到惊人的97%。检索的时间复杂度为loglogn,几乎可以无视候选向量的量级了。并且支持分批导入,极其适合线上任务,毫秒级别体验。
缺点:构建索引极慢,占用内存极大(是Faiss中最大的,大于原向量占用的内存大小)
参数:HNSWx中的x为构建图时每个点最多连接多少个节点,x越大,构图越复杂,查询越精确,当然构建index时间也就越慢,x取4~64中的任何一个整数。
使用情况:不在乎内存,并且有充裕的时间来构建index

如下有更详细介绍

大规模向量检索库Faiss学习总结记录_faiss数据库教程-CSDN博客

Agent部分:

Agent能力也是大模型涌现能力的一种?基础模型经过指令微调以后,即可配合插件具有agent能力。

先列出几个概念:

系统提示词:internlm2里是这样的:“当开启工具以及代码时,根据需求选择合适的工具进行调用”

插件提示词:你可以使用以下插件(****)(目前看到的agent似乎只能支持1个插件在使用,可以同时支持多个插件吗?或者多个agent?)

具体怎么组合这些提示词?在formatted里,把这些都作为system prompt前置传入大模型。

{“role": "system”, "content":"*****"}

在agent执行过程中,用户输入prompt,然后大模型解析prompt提取参数传入插件,插件嵌入参数后执行对应的action,返回结果(或错误代码)给大模型,大模型再加工结果返回给用户。

Agent本身并不神秘,像画图的Agent,也只需要在基础模型上增加一些画图指令到调用插件的微调数据集而已。大模型的能力是很强的,要相信这一点。因此食神项目的文生图功能 一样可以转交给agent模块来做。

例如教程里提供的例子,就是把prompt传入magicmaker,而后者是一个文生图的网站接口。

大模型评价:

目前用到的是OpenCompass。包含学科、语言、知识、理解、推理五大维度。

其他基本的评价指标:

MMLU:多语言理解能力。(中文的测试集是教育网上爬取的试卷,按acc方式计算指标)

GLUE:glue有9个指标,分别是CoLA、SST-2、MRPC、STS-B、QQP、MNLI、QNLI、RTE、WNLI。

C-Eval:

MT-bench:BLEU(机器翻译的指标,机器翻译和人工翻译比较n-gram相似度)

perplexity:给出上下文时,生成下一个词的概率的乘积。(N-gram模型)

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
"Java高级架构面试知识点整理.pdf"是一份关于Java高级架构的面试知识点的文档。该文档主要包括以下几个方面的内容: 1. Java多线程和并发:讲解Java中的多线程概念、线程安全性、线程的生命周期和状态转换、线程同步与锁、并发工具类(如CountDownLatch、Semaphore等)、线程池等相关知识点。 2. JVM与GC算法:了解Java虚拟机(JVM)的基本原理、内存结构和内存模型,理解垃圾回收(GC)算法的原理和常见的垃圾回收器(如Serial、Parallel、CMS、G1等),掌握GC调优的一般方法。 3. 分布式架构和并发编程模型:认识分布式系统的基本概念、CAP定理、分布式存储和分布式计算的方案,了解常见的并发编程模型(如Actor模型、异步编程等)和实现方式。 4. 高性能网络编程:熟悉Java NIO的基本原理、底层实现和使用方式,了解Java网络编程的相关API和概念(如Socket、ServerSocket、Selector等),了解基于Netty框架的高性能网络编程。 5. 分布式消息队列和中间件:了解消息队列的基本概念、常见的消息中间件(如RabbitMQ、Kafka等)的特点和使用场景,理解消息队列的高可用、持久化、消息顺序等特性。 6. 微服务和服务治理:理解微服务的概念、优劣势和架构特点,了解微服务的拆分和组织原则,熟悉常见的服务治理框架(如Spring Cloud、Dubbo等)和相关的技术组件。 7. 高可用和容灾设计:掌握高可用架构的设计原则和常见的高可用技术方案(如集群、负载均衡、故障切换等),了解容灾方案的设计和实现方法,学习如何保证系统的可靠性和稳定性。 8. 性能优化与调优:了解性能优化的基本思路和方法,熟悉性能调优的一般流程和工具,掌握常见的性能调优技术(如缓存、异步、批处理等)和优化手段。 以上就是对于"Java高级架构面试知识点整理.pdf"文档的简要回答,希望对您有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值