使用全套开源工具构建 LLM 应用实战:在 Dify 调用 Baichuan 开源模型能力
在当前开源大语言模型的热潮中,许多开发者希望本地部署开源LLM(大型语言模型),用于研究LLM或构建基于开源LLM的应用。笔者也尝试通过开源社区的项目,本地部署服务构建自己的webcruiser源码分析LLM应用。那么,本地部署开源LLM构建聊天应用需要哪些准备呢?本文将详细介绍步骤与工具,包括本地环境准备、大型语言模型、推理服务以及使用开源平台Dify.AI快速构建应用。 本地环境的准备: 为了部署高性能的开源大模型,需要一台配备高性能大显存NVIDIA显卡、大容量高速内存和大容量固态硬盘的本地机器。以Baichuan-chat-B模型为例,建议配置为:i9-K CPU、GTX双卡、GB内存和2TB固态硬盘。 大型语言模型: 大型语言模型是构建应用的基础,不同模型根据预训练数据和任务目标的不同,其结构和知识学习也不同。在Hugging Face等热门AI社区,可以寻找感兴趣的开源LLMs进行尝试和能力对比。 本地部署推理服务: 推理服务将预训练模型加载至本地服务器,提供模型预测接口,支持本地化使用LLM进行NLP任务,无需依赖云服务。使用GitHub上的一流开源项目,如LocalAI、openLLM等,一键部署热门开源模型。 Dify.AI:“LLM操作系统”:使用开源平台Dify.AI,构建基于不同LLM能力的AI应用变得简单。Dify支持快速调用和切换开源模型,包括托管在HuggingFace和Replicate上的所有模型,支持本地部署,通过Xorbits inference推理服务构建AI应用。
以下为实操步骤,从零开始介绍环境配置、安装CUDA、WSL2准备、Docker部署等。 环境准备: 基本的conda和Python环境推荐使用conda管理。首先安装conda,初始化Python3.环境。安装CUDA,推荐从官网直接下载Windows 版本。WSL2环境准备,安装Ubuntu版本并配置代理脚本。安装Docker Desktop,选择使用WSL2,确保WLS和Docker正常运行。配置WSL,安装WSL的qq飞车跳舞辅助源码CUDA,安装PyTorch。 部署推理服务Xinference: 根据Dify部署文档,Xinference支持多种大型语言模型。选择Xinference部署Baichuan-chat-3B模型。在WSL中安装Xinference基础依赖,并配置模型。启动Xinference并下载部署模型。使用Xinference管理模型查看已部署模型的uid。 部署Dify.AI: 参考Dify官网部署文档,CloneDify源代码,启动Dify,检查容器运行状态。在浏览器访问部署结果。 接入Xinference配置模型供应商: 在Dify设置中填入Xinference模型信息,注意SeverUrl使用局域网IP,获取WSL的IP地址。配置Baichuan-chat模型,创建应用。 后记: 本地部署结合Dify.AI,快速构建基于开源LLM的AI应用成为可能。通过持续迭代和优化,提升应用性能。Dify提供了一个完整的LLM应用技术栈,简化了构建和管理过程,支持数据清洗、标注等服务。LLM应用的场景和能力将进一步丰富,门槛降低。序列化推荐中的GRU与Transformer源码解析之一
GRU4Rec源码(TF版本):github.com/Songweiping/...
Transformer源码:github.com/kang/SASR...
序列化推荐领域中,GRU4Rec成功地将循环神经网络(NLP和时序预测常用)应用至推荐领域,此模型取得了良好效果。紧随其后的是"SASR",基于注意力机制的自适应序列推荐模型,实验表明其性能超越了GRU4Rec。
两篇论文的作者均在源码公开阶段,为研究者提供参考。我们深入剖析源码,后续系列文章将比较GRU4Rec与SASR的差异、联系与优缺点。
GRU4Rec模型结构简洁,采用门限循环神经网络,Embedding层处理item_id的one_hot编码,降低维度,便于优化。
并行化训练数据集优化了模型训练速度,构建了training_batch,便于使用GPU加速矩阵运算。
负采样技术提高了训练频率,利用同一时刻不同session中的item作为负样本。
模型设计了贝叶斯排序和TOP1等pairwise方法计算排序损失,认为pairwise结果优于pointwise。
实验数据集包括RSC和私有VIDEO集,结果表明GRU4Rec模型性能优秀,45度角源码测试集评价指标包括召回率(recall)和倒序排名得分(mrr)。
深入分析模型的Tensorflow版本代码,主要从main.py和model.py文件开始,重点解析模型定义、损失函数、GRU4Rec核心代码、数据集初始化、模型训练与预测以及评估函数。
GRU4Rec的代码分析暂告一段落,后续将详细梳理SASR代码,目标是通过三篇文章全面探讨两个模型的细节。感谢关注。
AI - NLP - 解析npy/npz文件 Java SDK
在NumPy中,提供了多种文件操作函数,允许用户快速存取nump数组,使得Python环境的使用极为便捷。然而,如何在Java环境中读取这些文件?此Java SDK旨在演示如何读取保存在npz和npy文件中的Python NumPy数组。
SDK提供了名为NpyNpzExample的功能示例。运行此示例后,命令行应显示以下信息,表示操作成功完成。
NumPy提供了多种文件操作函数,用于对nump数组进行存取,操作简便高效。本节将介绍如何生成和读取npz、npy文件。
使用**np.save()**函数,可以将一个np.array()数组存储为npy文件。
若需存储多个数组,**np.savez()**函数则更为适用。此函数的第一个参数是文件名,随后的参数为待保存的数组。若使用关键字参数为数组命名,非关键字参数传递的数组将自动命名为arr_0, arr_1, 等。
欲了解更多详情,请访问官网获取更多资源。
对于开源爱好者,Git仓库提供了项目源代码,欢迎访问以下链接进行探索:Git链接
预训练模型与种常见NLP预训练模型
探索NLP预训练模型的奥秘:十种关键模型解析 在人工智能的领域中,预训练模型如璀璨的星辰,照亮了自然语言处理(NLP)的广阔天空。本文将带你深入理解种常见的NLP预训练模型,从自回归与自编码的起点,到Transformer的革新,领略它们的特性和优势。自回归与自编码的较量:GPT与BERT
GPT,OpenAI的自回归语言模型,以其生成能力见长,单向处理使得信息流动受限,适用于文本生成任务。
BERT,Google的spark源码分析pdf 下载杰作,双向处理技术使得它能捕捉上下文,但Mask标记的使用影响了预训练和Fine-tuning的效率。
BERT的创新与深度剖析
BERT基于Transformer的Encoder,通过无监督训练,包含Masked LM和Next Sentence Prediction任务,展示了强大的语义理解。
尽管参数众多,它关注word embedding、position embedding和segment embedding,展现了复杂结构下的性能提升。
预训练任务的艺术:MLM与NSP
Masked Language Model挑战模型预测被隐藏的词,促使模型依赖上下文而非孤立词语。
Next Sentence Prediction任务,通过[CLS]和[SEP]标记,将理解任务转化为二分类,增强了模型的序列理解能力。
ALBERT的轻量化革命
ALBERT继承BERT的框架,创新在于参数分解、共享和移除NSP,采用SOP,虽未详述实验结果,但稳定性和效率提升显著。
RoBERTa的优化与超越
RoBERTa通过增大训练数据、调整batch size和动态掩码,进一步提高了性能,摒弃了NSP任务。
预训练策略的多样性
BERT的mask策略包括静态和动态,以及不同组合方式的NSP训练,为模型适应性提供了多样性。
从ELMO和XLNet的自回归视角,ELMO解决了多义词难题,XLNet通过双流注意力机制扩展了可能性。T5模型则将NLP理解与生成结合,展示了预训练方法的创新。 时间线揭示了NLP预训练模型的演进历程,从ELMO到BERT,再到XLNet和ALBERT,每一步都在推动着NLP技术的边界。这些模型各具特色,有的专攻文本生成,有的聚焦语义理解,共同推动着NLP领域的进步。 总结来说:Token的角色分化:query和content,分别承载位置和内容信息,为模型决策提供关键支撑。
从GPT到GPT-2的迭代,展现了Transformer技术的不断优化与规模的扩张。
T5的统一框架,展示了NLP预训练在语言理解和生成任务中的融合创新。
每个模型都是NLP之旅中的重要里程碑,它们的结合与竞争,共同推动着NLP技术的不断进化。深入理解这些模型,vibe算法源码自带数据无疑将为你的NLP项目提供强大的工具和灵感。想要了解更多细节,不妨参考原著论文和源代码,那里有无尽的智慧与洞见。分享篇最新NLP顶级论文,有研究竟提出:给大型语言模型(LLM)增加水印
新整理的最新论文又又来了,今天继续分享十篇今年最新NLP顶级论文,其中主要包括模型水印添加、状态空间模型在语言建模中的应用、指令元学习、大型模型训练效率提升、大模型到小模型推理能力转移、大模型简化、对话模型合规检测等。
模型添加水印:
大型语言模型 (LLM) 如 ChatGPT 可以编写文档、创建可执行代码和回答问题,通常具有类似人类的能力。然而,这些系统被用于恶意目的的风险也越来越大,因此检测和审核机器生成文本的使用能力变得关键。本文提出了「一个为专有语言模型加水印的框架」,以减轻潜在的危害。该水印对于人类是不可见,但可以通过算法检测的方式嵌入到生成的文本中,对文本质量的影响可以忽略不计,并且可以在不访问模型 API 或参数的情况下使用开源算法进行检测。
状态空间模型:
本文研究了「状态空间模型(SSM)在语言建模中的应用」,并将其性能与基于Attention的模型进行比较。作者发现,SSM在回调序列较早的Token以及在整个序列中做Token对比的时候存在困难。为解决这两个问题,他们提出了一种新的SSM层,称为H3,其在语言合成上与Attention模型相匹配,并接近于Transformer在OpenWebText上的性能。他们还提出了一种名为FlashConv的方法,提高了SSM在当前硬件上的训练效率,同时也让它们可以扩展到更长的序列。
指令元学习:
本文提出了一个「应用于指令元学习(instruction meta-learning)的大型基准」,该基准将8个现有基准的任务类别合并,总计包含了个自然语言处理(NLP)任务。作者评估了不同决策对性能的影响,例如:指令调整基准的规模和多样性、不同任务采样策略、有无示范的微调、使用特定数据集对推理和对话进行训练以及微调目标等。他们使用该基准来训练两个经过指令调指OPT的版本(为OPT-IML B和OPT-IML B),结果显示,这两个版本在四个不同的评估基准上表现出更好的泛化能力,优于普通的OPT模型。
训练效率提升:
本文提出了「一种名为 Cuation in Training (CiT) 的方法,旨在提高大型视觉语言模型的训练效率」,以方便更多机构的进行使用。CiT 自动选择高质量的训练数据来加速对比图文训练,并且不需要离线数据过滤管道,从而允许更广泛的数据源。该算法由两个循环组成:一个管理训练数据的外循环和一个使用管理的训练数据的内循环,这两个循环由文本编码器进行连接。 CiT 将元数据用于感兴趣的任务,例如类名和大量图像文本对,通过测量文本嵌入和元数据嵌入的相似性来选择相关的训练数据。实验表明,「CiT 可以显着加快训练速度,尤其是当原始数据量很大时」。
从大模型到小模型:
本文探索了「一种通过知识蒸馏将推理能力从大型语言模型转移到小型模型的方法」。作者指出,利用较大的“教师”模型的输出微调较小的“学生”模型可以提高一系列推理任务的性能,例如算术、常识和符号推理。论文中的实验表明,这种方法可以显着提高任务性能,例如,当在 PaLM-B 生成的思维链上进行微调时,将名为 GSM8K 的数据集上的较小模型的准确性从 8.% 提高到 .%。本文探索了「一种通过微调将推理能力从大型语言模型转移到较小模型的方法」并提出了“Fine-tune-CoT”,这是一种利用超大型语言模型(例如 GPT-3)的能力来生成推理样本并教授较小模型的方法。
大模型简化:
本文提出了「一种名为 SparseGPT 的新型模型简化方法」,它能够将大型生成预训练 Transformer (GPT) 模型中的权重数量至少减少%,并且无需进行任何再训练,并且精度损失最小。作者通过将 SparseGPT 应用于最大的开源模型 OPT-B 和 BLOOM-B ,在几乎没有增加复杂度的情况下,模型权重数量减少了 % 。该方法不仅还与权重量化方法兼容,并且可以推广到其他模式。
模型压缩对并行性的影响:
针对大规模Transformer 模型,本文「研究了不同模型压缩方法对模型并行性的有效性」。作者在当前主要流行的 Transformer 训练框架上使用三种类型的压缩算法进行了实证研究:基于修剪的、基于学习的和基于量化的。在 多个设置和 8 个流行数据集上评估这些方法,同时考虑了不同的超参数、硬件以及微调和预训练阶段。该论文提供了模型并行性和数据并行性之间差异的见解,并为模型并行性压缩算法的未来发展提供了建议。
对话模型合规发布判定:
本文工作「为从业者提供了一个框架,来判定end-to-end神经对话Agent的发布是否合规」。作者出发点是:对话式 AI 领域的最新进展以及从互联网上发布的基于大型数据集训练的模型可能产生的潜在危害。他们调查了最近的相关研究,强调了价值观、潜在的积极影响和潜在的危害之间的紧张关系。他们提出了一个基于价值敏感设计原则的框架,以帮助从业者权衡利弊,并就这些模型的发布做出符合规范的决策。
推荐阅读:
- [1] NLP自然语言处理:生成式人工智能(Generative AI)是 “未来” 还是 “现在” ?
- [2] 「自然语言处理(NLP)」 你必须要知道的 “ 十二个国际顶级会议 ” !
- [3] 年!自然语言处理 大预训练模型
- [4] NLP自然语言处理:分享 8 篇NLP论文,有研究惊奇发现:大语言模型除了学习语言还学到了... ...
- [5] 超详细!一文看懂从逻辑回归(Logistic)到神经网络(NN)
- [6] 北大 |一种细粒度的两阶段训练框架(FiTs)(开放源码)
- [7] NLP自然语言处理:NLP不断突破界限, 十篇必读的顶级NLP论文!
- [8] 颠覆传统神经网络!个神经元驾驶一辆车!
基于PaddleNLP搭建评论观点抽取和属性级情感分析系统
基于PaddleNLP搭建评论观点抽取和属性级情感分析系统旨在实现对带有情感色彩的主观性文本进行深入分析与处理,广泛应用于消费决策、舆情分析、个性化推荐等领域。百度工程师将带来直播讲解,深入解读情感分析等系统方案,并带来手把手项目实战,详情请点击课程直通车。本项目源代码全部开源在PaddleNLP中。
情感分析任务包括语句级情感分析、评论对象抽取和观点抽取。其中,语句级别的情感分析在宏观上分析整句话的感情色彩,粒度较粗。而属性级别的情感分析则针对某一产品或服务的多个属性进行评论,能提供更具体、细致的分析结果。例如,关于薯片的评论“这个薯片味道真的太好了,口感很脆,只是包装很一般。”可以看出,顾客在味道和口感两个方面给出了好评,但在包装上给出了负面评价。这种细粒度的分析,对于商家改进产品或服务具有重要意义。
项目提出细粒度的情感分析能力,首先进行评论观点抽取,然后分析不同观点的情感极性。评论观点抽取采用序列标注方式,利用BIO的序列标注体系拓展标签,包括B-Aspect、I-Aspect、B-Opinion、I-Opinion和O。在抽取评论观点后,对评论属性和观点进行拼接,并与原文拼接作为独立训练语句,最终传入SKEP模型进行细粒度情感倾向分析。
评论观点抽取模型通过序列标注完成,训练、评估和测试数据集包含标签词典,数据集格式包含文本串和序列标签。数据加载、转换成特征形式,构造DataLoader后,基于SKEP模型实现评论观点抽取功能,进行文本数据输入和向量序列产生,基于CLS位置的输出向量进行情感分析。训练配置包括环境配置、模型参数定义等。
属性级情感分类模型同样基于SKEP模型实现,将处理好的文本数据输入SKEP模型进行编码,使用CLS位置对应的输出向量进行情感分类。训练配置、训练与测试定义完成后,模型训练与测试进行评估,模型效果最好的模型将被保存。在完成模型训练与测试后,可以使用全量数据训练好的评论观点抽取模型和属性级情感分类模型进行全流程情感分析预测。
基于PaddleNLP开源的PP-MiniLM实现属性级情感分类模型,利用模型蒸馏技术蒸馏出6层小模型,效果好、运行速度快。PP-MiniLM数据集在7项CLUE任务上的平均值表现良好。模型量化操作后,与SKEP-Large、PP-MiniLM进行性能和效果对比,展现出显著的性能提升。
加入PaddleNLP的QQ技术交流群,一起学习NLP技术,获得更多关于情感分析的信息。
基于梯度的NLP对抗攻击方法
Facebook的研究团队在EMNLP上发布了一项名为“Gradient-based Adversarial Attacks against Text Transformers”的NLP通用攻击策略,源代码可在facebookresearch/text-adversarial-attack获取。
首先,研究者定义了模型,其中输入集[公式]和输出集[公式]。对于测试样本[公式],如果预测标签为[公式],则目标是找到与[公式]相近的对抗样本[公式],使其预测结果变为[公式]。通过定义函数[公式]来量化两者的接近程度,如果对抗样本[公式]满足[公式],则认为两者非常接近。
寻找对抗样本的过程转化为优化问题,如在分类问题中,使用margin loss作为对抗损失,公式为[公式]。当损失为0时,模型在超参数[公式]的影响下会预测错误。margin loss在年的研究中证明了对抗图像的有效性。
优化目标是通过梯度方法实现,给定对抗损失[公式],对抗样本生成的优化问题可以表述为[公式],通过引入可微的约束函数,如[公式],进行优化。
论文解决了文本数据中应用[公式]的困难,通过概率分布[公式],每个token独立采样。目标是优化参数矩阵[公式],使得[公式]成为对抗样本,优化目标函数[公式],可以包含对抗损失如margin loss。
文章还探讨了如何将概率向量输入模型,通过Gumbel-softmax进行平滑估计,引入梯度。同时,加入了流畅性和语义相似性约束,如因果语言模型和BERTScore,以生成更自然和语义连贯的对抗样本。
实验结果显示,作者的方法可以有效降低模型准确率至%以下,同时保持高语义相似度。消融实验揭示了流畅性约束对结果的影响。
尽管我最初误以为是关于Adversarial训练的内容,但实际研究的是Attack技术,这与我的研究领域不直接相关。
信息抽取UIE——基于prompt的信息抽取模型(附源码)
信息抽取是NLP任务中的一个常见模块,旨在从自然文本中提取关键信息结构。通过例子理解,例如从"新东方烹饪学校在成都"中提取"新东方烹饪学校"与"成都"作为实体。
命名实体识别(NER)是提取词语级别的实体任务,而关系抽取(RE)则更进一步,关注实体之间的关系。序列标注(Sequence Labeling)方法通过为文本中的每个词分配类别标签,来实现信息抽取。
序列标注面临实体重叠问题,指针网络(Pointer Network)通过为每个实体单独预测解决此问题。它设计多头网络,为每个实体分别预测起始和结束位置,确保实体重叠问题得到解决。
UIE(基于prompt的指针网络)旨在提供更灵活的信息抽取方式。它通过引入prompt参数,允许模型在输入时激活与特定实体类型相关的参数,从而实现不同实体的抽取任务。此方法解决了模型结构随实体类型变化而变化的问题,同时可以高效处理实体关系抽取任务。
UIE的实现相对简洁,主要包含构建起始层和结束层,以及计算损失函数(BCE Loss)以优化模型。通过这种机制,UIE不仅简化了模型结构的调整,还提高了任务处理的灵活性和效率。
完整源码可供查阅,实现了一个高效且灵活的信息抽取解决方案,UIE展示了在信息抽取领域的创新与进步。
NLP修炼系列之Bert(二)Bert多分类&多标签文本分类实战(附源码)
在NLP修炼系列之Bert(二)的上一篇文章中,我们对Bert的背景和预训练模型进行了深入讲解。现在,我们将步入实战环节,通过Bert解决文本的多分类和多标签分类任务。本文将介绍两个实际项目,一个是基于THUCNews数据集的类新闻标题分类,另一个是我们公司业务中的意图识别任务,采用多标签分类方式。 1.1 数据集详解多分类项目使用THUCNews数据集,包含万个新闻标题,长度控制在-个字符,共分为财经、房产等个类别,每个类别有2万个样本。训练集包含万个样本,验证集和测试集各1万个,每个类别条。
多标签任务数据集来自公司业务,以对话形式的json格式存在,用于意图识别。由于隐私原因,我们无法提供,但网上有很多公开的多标签数据集,稍加调整即可适用。
1.2 项目结构概览项目包含Bert预训练模型文件、配置文件和词典等,可以从Huggingface官网下载。
datas 目录下存放数据集、日志和模型。
models 包含模型定义和超参数配置,还包括混合模型如Bert+CNN等。
run.py 是项目入口,负责运行训练。
train_eval.py 负责模型训练、验证和测试。
utils 提供数据预处理和加载工具。
2. 项目流程和环境要求 通过run.py调用argparse工具配置参数。安装环境要求Python 3.8,项目中已准备好requirements.txt文件。 3. 项目实战步骤 从构建数据集到模型定义,包括数据预处理、数据迭代器的创建、配置定义以及训练、验证和测试模块的实现。 4. 实验与总结 我们尝试了以下实验参数:num_epochs、batch_size、pad_size和learning_rate。在fine-tune模式下,Bert表现最佳,否则效果不佳。项目代码和数据集可通过关注布尔NLPer公众号获取,回复相应关键词获取多分类和多标签分类项目源码。2024-12-24 00:49
2024-12-24 00:42
2024-12-24 00:12
2024-12-23 23:57
2024-12-23 23:25