- LangChain文档的问题
文档的问题:LangChain的文档可能不够清晰,难以理解。这可能会导致开发人员在使用LangChain时遇到困难。
- LangChain太多概念容易混淆,过多的“辅助”函数问题
太多概念容易混淆,过多的“辅助”函数问题:这种问题的一个方面是存在大量的“helper’函数,仔细检查就会发现它们本质上是标准Python函数的包装器。开发人员可能更喜欢提供更清晰和直接访问核心功能的框架,而不需要复杂的中间功能。
- LangChain行为不一致并且隐藏细节问题
行为不一致并且隐藏细节问题:这可能导致生产系统出现意想不到的问题
- LangChain缺乏标准的可互操作数据类型问题
缺乏标准的可互操作数据类型问题:可能会阻碍与其他框架和工具的集成
- LangChain替代方案?
Semantic Kernel是基于传统编程语言的应用与OpenAl之间的中间件Llamalndex是一个数据框架,它可以很容易地将大型语言模型连接到自定义数据源。它可用于存储、查询和索引数据,还提供了各种数据可视化和分析工具。Deepset Haystack是另外一个开源框架,用于使用大型语言模型构建搜索和问答应用程序。它基于Hugging Face Transformers,提供了多种查询和理解文本数据的工具。
- 为什么大模型需要外挂(向量)知识库?
向量知识库是一种用于扩展大型语言模型的长期记忆的方法。它可以将外部知识注入到模型中,以便更好地处理复杂的自然语言处理任务。向量知识库提供了优化的存储和查询功能,可轻松比较值并查找彼此之间的相似性。这些数据库提供了易于搜索、高性能、可扩展性和数据检索。
- 基于LLM+向量库的文档对话思路是怎么样?
基于LLM+向量库的文档对话的思路是先检索,后推理。重心在检索(推荐系统),推理交给LLM整合即可。而检索部分要满足三点:尽可能提高召回率,尽可能减少无关信息;速度快。将所有的文本组织成二级索引,第一级索引是[关键信息],第二级是[原始文本],二者一一映射。检索部分只对关键信息做embedding,参与相似度计算把召回结果映射的原始文本交给LLM。
- 基于LLM+向量库的文档对话核心技术是什么?
基于LLM+向量库的文档对话的核心技术是向量检索和LLM.向量检索是指将所有文本组织成二级索引,第一级索引是[关键信息],第二级是[原始文本],二者一一映射。检索部分只对关键信息做embedding,参与相似度计算。LLM则是用于推理和生成回答。
- 基于LLM+向量库的文档对话prompt模板如何构建?
基于LLM+向量库的文档对话prompt模板可以通过以下步骤构建:首先从架构图可以看到,句子、段落、文章都要关键信息。如果为了效率考虑,可以不用对句子构建关键信息。文章的切分及关键信息抽取可以采用语义切分方法或者直接法
- 基于LLM+向量库的文档对话存在哪些痛点?
以上痛点主要集中在检索部分,其中第一个痛点是由于文档切分不够准确导致模型有可能只回答了部分问题,而实际上是因为向量相似度召回的结果是残缺的。文档切分粒度不好把控,既担心噪声太多又担心语义信息丢失第二个痛点是由于在基于垂直领域时表现不佳。第三个痛点是由于langchain内置问答分句效果不佳问题。第四个痛点是如何尽可能召回与query相关的Document问题。
- 为什么需要对pdf进行解析?
PDF解析是将PDF文件转换为可编辑格式或提取其中的数据的过程。
- pdf解析存在哪些问题?
PDF解析可能会遇到一些问题,例如无法正确解析图像、表格和非标准字体,以及无法正确提取数据。此外,某些PDF文件可能会受到密码保护或数字签名,这可能会使解析过程更加困难。
- 为什么要提取标题甚至是多级标题?
在PDF中提取标题甚至是多级标题的原因是,这些信息可以帮助用户快速定位所需信息并更快地了解文档内容。
- 基于A的文档解析有什么优缺点?
基于A!的文档解析可以提高解析速度和准确性,但可能会受到图像质量、字体和布局等因素的影响。
- 什么是PEFT?PEFT有什么优点?
PEFT(Parameter-Efficient Fine-Tuning)仅微调少量(额外的)模型参数,高效地将预训练语言模型(PLM)适应到各种下游应用,显著降低了计算和存储成本。最近的一些研究表明,PEFT方法可以实现与完全微调相当的性能。PEFT有以下优点:高效、低计算和存储成本、可以实现与完全微调相当的性能。
- 微调方法批处理大小模式与显存的关系?
通常情况下,较大的批处理大小可以提高训练速度,但需要更多的GPU显存。如果GPU显存不足,可能需要减小批处理大小以避免内存不足错误。此外,较大的批处理大小可能会导致模型过拟合,因此需要进行适当的调整。
- 当前PEFT存在的一些问题。
当前高效微调技术存在的一些问题包括:如何选择合适的微调方法、如何处理数据集中的噪声和不平衡性、如何避免过拟合等。
PEFT最佳实践一些常见的微调方法包括soft prompts、Adapters和Low-Rank Adaptation(LoRA)等。
- 为什么需要适配器微调(Adapter-tuning)?
适配器微调(Adapter-.tuning)是一种高效的参数训练方法,用于将语言模型的能力迁移到下游任务中。它的核心思想是在预训练模型每层中插入用于下游任务的参数,在微调时将模型主体冻结,仅训练特定于任务的参数,从而减少训练时算力开销。
- 适配器微调(Adapter-tuning)思路?
适配器微调(Adapter-tuning)的设计方法是在每个Transformer层中添加Adapter模块,每个Adapter模块由两个前馈子层组成。第一个前馈子层将Transformer块的输出作为输入,将原始输入维度d投影到m,通过控制m的大小来限制Adapter模块的参数量,通常情况下m<<d。在输出阶段,通过第二个前馈子层还原输入维度,将m重新投影到d,作为Adapter模块的输出。通过添加Adapter模块来产生一个易于扩展的下游模型,每当出现新的下游任务,通过添加Adapter模块来避免全模型微调与灾难性遗忘的问题。
- 适配器微调(Adapter-tuning)特点是什么?
适配器微调(Adapter-tuning)有以下特点:只需要在预训练模型中添加少量针对特定任务的参数,来存储有关该任务的知识。通过引入少量针对特定任务的参数,来减少对模型微调的算力要求。通过添加Adapter模块来产生一个易于扩展的下游模型,每当出现新的下游任务,通过添加Adapter模块来避免全模型微调与灾难性遗忘的问题。通过实验发现,只训练少量参数的Adapter方法的效果可以媲美全量微调。
- AdapterFusion思路是什么?
AdapterFusion是一种新的两阶段学习算法,可以利用来自多个任务的知识。第一阶段是在不同任务下引入各自的Adapter模块,用于学习特定任务的信息。第二阶段是将预训练模型参数与特定于任务的Adapter参数固定,引入新参数(AdapterFusion)来学习组合多个Adapter中的知识,以提高模型在目标任务中的表现。
- AdapterDrop思路是什么?
AdapterDrop是一种动态高效移除Adapter的方法,可以尽可能地减少模型的参数量,提高模型在反向传播(训练)和正向传播(推理)时的效率。它可以动态地减少推理时多个任务同时进行时的计算开销,而且对任务性能影响很小。
- AdapterDrop的特点是什么?
AdapterDrop的特点是可以动态地减少推理时多个任务同时进行时的计算开销,而且对任务性能影响很小。
- MAM Adapter思路是什么?
MAM Adapter是一种在Adapter、Prefix Tuning和LoRA之间建立联系的统一方法。具体来说,将它们重新构建为对预训练模型中特定隐藏状态的修改,并定义一组设计维度,不同的方法沿着这些维度变化。
- MAM Adapter特点是什么?
MAM Adapter的特点是可以在不牺牲性能的情况下减少计算和存储成本,同时提高模型在目标任务中的表现。
- 为什么需要提示学习(Prompting)?
提示学习(Prompting)是一种新的学习范式,它通过在输入中添加一个提示词(Prompt),使得预训练模型的性能大幅提高。提示学习的核心思想是,通过改造下游任务、增加专家知识,使任务输入和输出适合原始语言模型,从而在零样本或少样本的场景中获得良好的任务效果。提示学习可以通过对推理方式的改动,将文本分类任务转换为完形填空题,从而更好地利用预训练语言模型的优势。
- 什么是提示学习(Prompting)?
具体来说,提示学习可以通过以下方式实现在输入文本中增加(拼接)任务提示语言。将分类标签(或预测目标)替换为与类别有一定语义对应关系的词句。
- 提示学习(Prompting)有什么优点?
提示学习的优点包括:可以在小样本(Few-shot)或零样本(Zero-shot)场景下达到理想的效果。可以避免引入额外的参数,从而减少过拟合。可以缩小预训练和微调两个阶段目标差距过大的问题。
- QLoRA,AdaLoRA和LoRA的区别?
- LoRA:LoRA是一种低秩自适应方法,通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练。在训练时,固定预训练语言模型(PLM)的参数,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将BA与PLM的参数叠加。这种思想有点类似于残差连接,同时使用这个旁路的更新来模似full fine-tuning的过程。
- AdaLoRA:AdaLoRA改进了LoRA可微调参数的分配方式,根据每个参数的重要程度自动为其分配可微调参数的预算。具体地,AdaLoRA采用奇异值分解(SVD)的形式参数化增量更新。这种参数化方式在规避大量SVD运算的同时,允许我们高效裁剪不重要更新中的奇异值,降低增量过程中的资源消耗。
- QLORA:QLORA包含一种低精度存储数据类型(4-bit NormalFloat,简写为NF4)和一种计算数据类型(16-bit BrainFloat)。在实践中,QLORA权重张量使用时,需要将张量去量化为BFloat16,然后在16位计算精度下进行矩阵乘法运算,在计算梯度时只对LoRA的参数计算梯度。
- 微调大模型的一些建议
- 使用适当的数据增强技术:数据增强技术可以提高模型的泛化能力,并减少过拟合的风险。一些常见的数据增强技术包括随机裁剪、旋转和翻转等。
- 使用正则化技术来避免过拟合:正则侧化技术可以帮助减少模型的复杂度,并避免过拟合。一些常见的正则化技术包括L1和L2正则化、Dropout和Batch Normalization等。
- 使用预训练模型进行初始化:预训练模型可以提供有用的先验知识,并帮助加速微调过程。因此,使用预训练模型进行初始化是一种很好的实践。、
- 进行超参数搜索:超参数搜索可以帮助找到最佳的超参数组合,从而提高模型性能。
一些常见的超参数搜索方法包括网格搜索、随机搜索和贝叶斯优化等。
- LoRA的优缺点
- 优点在于轻量化,低资源。参与训练的模型参数是百万到千万级别。
- 缺点在于它需要的训练时间比全参微调多,可训练参数量少,在同样大量数据训练下,效果精度都是不如全参数微调的。
- 如何在已有LoRA模型上继续训练?(已有的Ioa模型只训练了一部分数据,要训练另一部分数据的话,是在这个lora上继续训练呢,还是跟base模型合并后再套一层lora,或者从头开始训练一个lora?)
把之前的LoRA跟base model合并后,继续训练就可以,为了保留之前的知识和能力,训练新的LoRA时,加入一些之前的训练数据是需要的。另外,每次都重头来成本高。
- 为什么大模型推理时显存涨的那么多还一直占着?
- 存储模型的参数和中间结果:在推理过程中,模型会一直占用显存,直到推理完成
- 高精度的计算,这也会增加显存的使用量
- 显存不足可能会导致程序崩溃或者性能下降,为了减少显存的使用量,有哪些方法?
- 使用低精度计算(如NT8或FP16)
- 减少batch size
- 减少模型参数量
- 使用分布式推理
- 大模型生成时的参数怎么设置?
建议去调整下top_p,num_beams,repetition_renalty,temperature,do_sample=True;数据生成有重复,调高repetition_renalty;生成任务表达单一的,样本也不多的,可适当调低temperature,生成的样子跟训练集的比较像;如果要复现训练集的效果,temperature=0.01即可。
- Topp:动态设置tokens候选列表的大小。将可能性之和不超过特定值的top tokens列入候选名单。
- Topp通常设置为较高的值(如0.75),目的是限制可能被采样的低概率token的长度。
- Topk:允许其他高分tokens有机会被选中。这种采样引入的随机性有助于在很多情况下生成的质量。top-k参数设置为3意味着选择前三个tokens。将如果k和p都启用则口在k之后起作用。