解读DeepseekV3
本年度还剩几天,Deepseek就发布了这么值得惊喜的产品,我觉得是真正做AI,也喜欢AI同学,对这个魔幻的2024年12月,一定是未来多少年想起都能回忆起这波澜壮阔的岁月。
我见过的最省的GPT4o,Claude,Gemini2级别的模型,而且是国内唯一有机会上桌的,其实海外目前和这三家有资格掰手腕的也只有它自己,可以负责任的说其他的模型不配上桌吃菜(Gemini上个月都没资格)
其实性能好就不说了,DeepseekR1就还不错,国内讲道理是第一家做inference timing scaling law的模型,阿里是第二家,其他的就不太值得谈论了,其实国外也只有Gpt和google有资格,没想到年底还能出个DeepseekV3,在传统scaling law这边还能玩出花活儿,实属不易。
废话不多说,挑干货唠
FP8混合精度训练框架,并首次验证其在超大规模模型上的有效性
它模型下载下来看起来还能行啊,也就不到700G,那正常671B的参数,根本不可能这么点显存占用,因该1.4T左右,这是因为它原生就FP8出的,这大概是我知道的第一个原生之直接出FP8的模型,Meta说很早就用FP8训练了,那Llama3啥的也默认都BF16的,有些特定的模型FP8 GPTQ/AWQ过,像它这么激进的应该是第一个。
省钱
只有2.664M GPU小时的经济成本,完成了对14.8万亿tokens的DeepSeek-V3预训练,预训练后的进一步阶段仅需要0.1M GPU小时,因为FP8吗,自然就省算力,也省显存,还省通信,要不也不能就这么2048张卡就打发了,预训练阶段,DeepSeek-V3在每万亿tokens上的训练仅需180K H800 GPU小时,即以2048 H800 GPUs集群仅需3.7天的时间。就能训1万亿的token。因此。预训练在不到两个月内完成,总体使用GPU时间为2664K小时。加上上下文扩展需要的119K GPU小时以及后续训练需要的5K GPU小时,总计2788K GPU小时,约合$5.576M。如果算上其他精细调整部分,总成本尚不足$5.576M,看到这心里真的在滴血啊,比起动辄几百亿人民币都听不出来个响的公司,它简直是白莲花了。(当然它家本身不缺钱,做成现在这种各种优化能力,也是之前多少钱砸出来的经验)省钱因为FP8这是主要理由,但是光靠FP8是不够的,我们一会接着讲。
code math很不错
这个肯定是蒸馏别的高级模型的数据了,这个没什么可避讳的,Google的gemni2还蒸馏了Athropic的Claude3.5, 现在这也正常,蒸馏出来只是一方面,关键得训到Parameter里才是硬道理,而且为了增加V3的性能,Deepseek团队,还蒸馏了自己的R1的reason能力作为语料和隐式COT给V3灌进去。(主要是后训练阶段)
MLA (多头潜注意力,Multi-HeadLatentAttention)
这个也是老活儿了,DeepseekV2里就有,但是真的好用,啥叫多头潜注意力呢?
现规定几个变量啊
- d: 嵌入维度(Embedding dimension),表示词向量的维度。
- nh: 注意力头的数量(Number of attention heads)。
- dh: 每个注意力头的维度(Dimension per head)。
- ht: 第t个token在某个注意力层的输入(Attention input for the t-th token)。
MLA 的核心思路就是:
- 先对 token 的特征进行一个“低秩”或“小维度”的压缩(称为 latent vector),再通过少量的变换将它还原/扩展到各头所需要的 Key、Value 空间。
- 一部分必要的信息(如旋转位置编码 RoPE)的矩阵则保持单独处理,让网络依然能保留时序、位置信息。
我们看看它怎么搞的啊。首先定义一个矩阵潜注意力W^{DKV}
你就理解成一个下投影的矩阵,维度是 d x d_c,d_c是非常小的。
原始是啥呢?原始肯定是dh*nh啊,也就是每个头的hidden_size,也可以说embedding size,这俩玩意等价的然后*多少个头,也就是等于d(这块看不懂的,看我以前transformer的课程还有怎么计算显存和算力的课程 https://mp.weixin.qq.com/s/TJJcSRP9ppxua-n9lkmu2w?token=2126311288&lang=en_US)
dh*nh其实可以理解近似为hidden_size,也就是d,因为你多个头就直接对接了模型的宽度么,那你这俩至少得4096吧(咱哪怕以llama来计算)
然后我们搞下面这么个式子,也就是把你的第t个token在某个hidden_layer的输出你经过我刚才说的下投影矩阵给一压缩,那就变得非常小了
c_t^{KV} = W^{DKV} h_t
h_t原始维度是啥?是d啊,比如4096,我经过一个d*dc的下投影矩阵
d矩阵乘于d*d_c, 一出来就变d_c维的向量c_t^{KV} 了,比如d_c是400,那就小10倍,就是这么个压缩
c_t^{KV} 是一个低维度的向量,是压缩后的 keys 和 values 的 latent 向量。d_c 表示压缩后的维度,远小于 d_h * n_h,所以你kv对就小了呗,因为小了,所以占显存也少了,推理的时候kv_cache也少,推的也快,这下看懂了吧
当然你肯定还得逆向把你压缩的回复到原来的维度,那就乘一个上矩阵,要不也推不了么,可以简单认为存的时候存这玩意c_t^{KV} (不占空间),用的时候还得矩阵乘一个上矩阵来还原,这块就不解释了,
rope也一样,要被算出来一个key,最后rope的key和压缩的key,一起合成一个key,因为要带着位置编码,这快我也不细讲了,看明白我刚才讲的,可以自己去看论文,逻辑是一样的,微信公众号写数学公式太遭罪了,好累,能少写就少写点。
刚才讲的是对于推理的时候优化,训练的时候把Q也顺便给优化了,道理和刚才的kv一样,就并不赘述了。
路由专家和共享专家结合的MOE
路由专家 (Routed Experts) 和共享专家 (Shared Experts) 在 DeepSeekMoE 架构中扮演着不同的角色,它们的主要区别在于如何被激活和利用。
路由专家 (Routed Experts):
- 选择性激活: 路由专家是按需激活的。对于每个输入的 token,只有一部分路由专家会被选中并参与计算。这个选择过程由一个门控机制 (gating mechanism) 决定,例如 DeepSeekMoE 中使用的基于亲和度分数的 Top-K 选择。
- 专精化: 每个路由专家都被设计为擅长处理特定类型的输入或学习特定的特征。通过选择性激活,模型能够将不同的输入路由到最合适的专家进行处理,从而实现专精化处理。
- 稀疏性: 由于只有一部分路由专家被激活,所以计算是稀疏的,可以提高模型的效率。
- 负载均衡: 门控机制的目标之一是实现专家之间的负载均衡,确保不同的专家在不同的输入上被激活,避免某些专家过载。
DeepSeekMoE 使用 稀疏门控 (sparse gating) 的机制来选择激活哪些路由专家。只有与当前 token 最匹配(亲和度分数最高)的
Kr 个路由专家才会被激活并产生非零的门控值。其他路由专家的门控值为 0,意味着它们不参与当前 token 的处理。
共享专家 (Shared Experts):
- 全局参与: 共享专家始终参与所有输入的处理。无论输入是什么,所有共享专家都会贡献它们的力量。
- 通用知识: 共享专家旨在学习对所有输入都有用的通用知识或基础特征。它们可以捕捉到数据中普遍存在的模式。
- 促进泛化: 由于共享专家对所有输入都有贡献,它们有助于模型学习更鲁棒和泛化的表示,减少过拟合的风险。
- 提高稳定性: 共享专家可以为模型的预测提供一个更稳定的基础,尤其是在路由机制不够完美或者某些输入不适合任何特定的路由专家时。
那你拿到的最终的outputs是啥呢?
就是路由专家和共享专家的值乘以他们的权重,然后加权,所以输入也相当是一个有重点,有泛化的输出。
Auxiliary-Loss-Free Load Balancing(辅助损失无关的负载均衡)
这个设计很巧妙,MOE专家就多对把,那多服务节点系统无论是什么都跑不出要做负载均衡,MOE也一样,纯轮训肯定是开玩笑。
传统怎么做的呢?
依赖于辅助损失 以避免不平衡的负载。然而,过大的辅助损失会损害模型性能,辅助损失是什么呢?
训练机器学习模型时,除了主要的损失函数(用于衡量模型在主要任务上的性能)之外,额外引入的损失函数。 你可以把它理解为一个次要的、额外的优化目标。
在MOE领域辅助损失主要干这些事:
- 衡量负载不均衡程度: 辅助损失通常会定义一个指标来衡量当前专家负载的均衡程度。常见的指标包括:
- 专家被选择的频率差异: 计算每个专家被路由到的输入数量,并衡量这些数量之间的差异。差异越大,不均衡程度越高。
- 每个专家的平均负载: 衡量每个专家处理的输入的复杂度或计算量,并确保这些平均负载相对均匀。
- 作为惩罚项添加到总损失中: 将衡量到的负载不均衡程度转化为一个损失值,并将其添加到模型的主要任务损失中。这样,在训练过程中,模型不仅要努力完成主要任务,还要努力减少负载不均衡带来的额外损失。
- 鼓励更均匀的路由决策: 通过反向传播,负载均衡辅助损失会影响模型中门控网络的参数。门控网络负责决定将哪些输入路由到哪些专家。辅助损失会促使门控网络学习更均匀的路由策略,避免过度集中到某些专家。
传统都是这么做的,但是如上文我们提到的,你怎么定义辅助损失?如果定义的有问题,会影响模型
Deepseek就不用辅助损失了,那则呢么实现的呢?
偏差项: 为每个路由专家引入一个偏差项,将其添加到相应的亲缘度得分中,以确定最终选择的专家。
动态调整偏差项: 在训练过程中,模型会持续监控每个专家的负载情况。如果某个专家过载,则降低其偏差项;如果某个专家负载不足,则增加其偏差项。
消除辅助损失: 通过这种动态调整偏差项的方法,DeepSeek-V3 能够在不使用辅助损失函数的情况下保持专家负载均衡,从而最大程度地减少了对模型性能的负面影响。
在无辅助损失的前提下呢,它又扩展了一下Complementary Sequence-Wise Auxiliary Loss(补充性的序列级辅助损失)
尽管 DeepSeek-V3 主要依靠无辅助损失策略来实现负载均衡,但为了防止任何单个序列中出现极端不平衡的情况,它还使用了一种补充性的序列级平衡损失。该损失函数鼓励每个序列上的专家负载均衡,并使用一个极小的平衡因子来确保其对模型性能的影响最小化。
节点受限路由:
为了进一步降低训练成本,DeepSeek-V3 还采用了节点受限路由机制,限制每个令牌最多只能发送到四个节点进行处理。这种机制有效地减少了跨节点通信的开销,并使模型能够实现更高的训练效率。
更高的训练效率: 通过采用更细粒度的专家和节点受限路由,DeepSeek-V3 能够更高效地利用计算资源,并降低训练成本。
你们以前玩过hadoop,不有就近计算么,和那玩意差不多,就是降低通信导致的计算代偿,也没啥好解释的。
另外就是MTP了,也是今天讲的最后一个吧

这张图展示了 DeepSeek-V3 中使用的 Multi-Token Prediction (MTP) 的实现方式。我们可以把它分解开来理解:
核心思想:
MTP 的核心思想是在训练过程中,模型不仅预测下一个 token (像传统的语言模型一样),还同时预测序列中后续的几个 token。这可以为模型提供更丰富的训练信号,帮助它更好地理解上下文和长距离依赖关系。
图中的组成部分:
Input Tokens (输入 Tokens): 图的底部显示了输入到模型中的 token 序列,例如 t₁, t₂, t₃, t₄。
Target Tokens (目标 Tokens): 图的顶部显示了模型需要预测的目标 token 序列。注意,不同的模块对应的目标 token 是不同的。
Main Model (主模型): 这部分代表了模型的核心结构,通常是一个 Transformer 模型的堆叠。
(Next Token Prediction) (下一个 Token 预测): 说明主模型的任务是预测序列中的下一个 token。
Embedding Layer (嵌入层): 将输入的 token 转化为向量表示。
Transformer Block × L (Transformer 模块 × L): L 代表 Transformer 模块的层数,是模型进行上下文理解和特征提取的核心部分。
Output Head (输出头): 将 Transformer 模块的输出转化为预测下一个 token 的概率分布。
Cross-Entropy Loss (交叉熵损失): 计算主模型预测结果与实际下一个 token 之间的损失,这是训练主模型的标准损失函数。
MTP Module 1 (MTP 模块 1): 这是第一个 MTP 模块。
(Next² Token Prediction) (下第二个 Token 预测): 说明这个模块的任务是预测输入序列中下第二个 token。例如,当输入为 t₂, t₃, t₄, t₅ 时,它预测 t₆。
Embedding Layer (嵌入层): 与主模型共享 (Shared) 嵌入层,这可以节省参数并学习通用的 token 表示。
Transformer Block (Transformer 模块): 与主模型类似,用于处理输入并提取特征。
Linear Projection (线性投影) 和 RMSNorm (RMS 归一化): 这些是 Transformer 模块内部的常见组件,用于调整维度和稳定训练。这没啥可讲的。
Concatenation (拼接): 这里将 Embedding Layer 的输出与 Transformer Block 的输出拼接起来,为预测提供更丰富的上下文信息。
Output Head (输出头): 将 Transformer 模块的输出转化为预测下第二个 token 的概率分布。
它输出那肯定也是交叉熵损失,计算 MTP 模块 1 预测结果与实际下第二个 token 之间的损失。
MTP Module 2 (MTP 模块 2): 这是第二个 MTP 模块。(Next³ Token Prediction) (下第三个 Token 预测): 说明这个模块的任务是预测输入序列中下第三个 token。例如,当输入为 t₃, t₄, t₅, t₆ 时,它预测 t₇。
结构与 MTP Module 1 类似: 它也共享嵌入层,并包含 Transformer Block、线性投影、RMS 归一化和输出头,不讲了和前面一样。
以此类推可以有更多的 MTP 模块,每个模块预测序列中更远的后续 token。
Shared (共享): 虚线箭头标明了不同模块之间共享的组件,例如嵌入层。
工作流程和意义:
输入: 一个 token 序列被输入到模型中。
主模型预测: 主模型基于输入预测下一个 token。
MTP 模块预测: 同时,不同的 MTP 模块基于稍微偏移的输入分别预测下第二个、下第三个以及更远的 token。
损失计算: 每个模块都计算其预测结果与实际目标 token 之间的交叉熵损失。
联合训练: 所有模块(主模型和 MTP 模块)的损失会被联合起来进行反向传播,更新模型的参数。
MTP 的优势:
更丰富的训练信号: 模型不仅学习预测下一个 token,还学习预测更远的未来 token,这有助于模型理解更长期的依赖关系和上下文信息。(上下文感知能力的提升)
潜在的加速收敛: 通过提供额外的预测任务,模型可能更快地学习到有效的表征。
提高生成质量: 学习预测多个未来 token 可能有助于生成更连贯和有意义的文本,这个对续写任务是很有用的,当然有人测试,它文科任务一般,估计是语料的问题。对code也同样有用,尤其是多行代码(它的code不错)
剩下什么强化PP流水线降低Bubble时间啥的我就不讲了,大家自己下去看看论文吧
最后补一下训练方式,准确说是4阶段:
2阶段预训练,第一阶段32k
第二阶段补到128k,扩展上下文
SFT和RLHF的后训练
训练方式中规中矩,传统scaling law打法
(本文完)
确实最近挺粉deepseek,所以写了这老长的文章
一般模型没让我使这么大劲过。。。
其实你们看下他用的技术,都不是多颠覆或者猎奇,都是非常实用的,它也一直在探索,然后工程化合理的,所以能用不到600万美金就训这么个东西出来,还开源了
第一 有钱真好
第二 还是有做正确且困难的事情
(本文这才真的完)
相关文章:
解读DeepseekV3
本年度还剩几天,Deepseek就发布了这么值得惊喜的产品,我觉得是真正做AI,也喜欢AI同学,对这个魔幻的2024年12月,一定是未来多少年想起都能回忆起这波澜壮阔的岁月。 我见过的最省的GPT4o,Claude,…...
【网络安全 | 漏洞挖掘】如何通过竞态条件发现账户接管漏洞
未经许可,不得转载。 文章目录 背景正文设置竞态条件实现漏洞背景 目标应用允许用户创建项目。这些项目中包含多个用户角色,每个角色权限不同(如所有者、管理员、成员管理者等)。用户可通过接受邀请来加入项目,而只有项目所有者才能通过输入邮箱将项目所有权转移给其他用…...
串口通信标准RS232、RS422、RS485有什么区别和不同
目录 第一个区别:硬件管脚接口定义不同: 第二个区别、工作方式不同 第三个区别、通信方式不同 第四个区别,逻辑特性不同 第五个区别、抗干扰性、传输距离和传输速率也不同 RS-232与RS-485对比 RS-422与RS-485对比 今天给大家分享的是&…...
win版ffmpeg的安装和操作
一、ffmpeg软件安装: ffmpeg是一个通过命令行将视频转化为图片的软件。 在浏览器搜索ffmpeg在官网里找到软件并下载(不过官网很慢),建议用这个下载。 下载的文件是一个zip压缩包,将压缩包解压,有如下文件…...
力扣56. 合并区间
此题在技巧上需要掌握Lambda表达式,在 C 的 Lambda 表达式 中,[] 是 捕获列表(capture list),用于指定 Lambda 表达式如何访问其外部作用域的变量。 [捕获列表](参数列表) -> 返回类型 {函数体 };• 捕获列表&…...
2024基于大模型的智能运维(附实践资料合集)
基于大模型的智能运维是指利用人工智能技术,特别是大模型技术,来提升IT运维的效率和质量。以下是一些关键点和实践案例: AIOps的发展:AIOps(人工智能在IT运维领域的应用)通过大数据分析和机器学习技术&…...
Android Java 版本的 MSAA OpenGL ES 多重采样
最近多次被小伙伴问到 OpenGL 多重采样,其实前面文章里多次讲过了,就是构建2个缓冲区,多重采样缓冲区和目标解析缓冲区。 代码流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…...
YOLO11改进-注意力-引入自调制特征聚合模块SMFA
本篇文章将介绍一个新的改进机制——SMFA(自调制特征聚合模块),并阐述如何将其应用于YOLOv11中,显著提升模型性能。随着深度学习在计算机视觉中的不断进展,目标检测任务也在快速发展。YOLO系列模型(You Onl…...
VMware虚拟机安装银河麒麟操作系统KylinOS教程(超详细)
目录 引言1. 下载2. 安装 VMware2. 安装银河麒麟操作系统2.1 新建虚拟机2.2 安装操作系统2.3 网络配置 3. 安装VMTools 创作不易,禁止转载抄袭!!!违者必究!!! 创作不易,禁止转载抄袭…...
Elasticsearch-索引的批量操作
索引的批量操作 批量查询和批量增删改 批量查询 #批量查询 GET product/_search GET /_mget {"docs": [{"_index": "product","_id": 2},{"_index": "product","_id": 3}] }GET product/_mget {"…...
【Android】application@label 属性属性冲突报错
错误记录 What went wrong: Execution failed for task :app:processDebugMainManifest. > Manifest merger failed : Attribute applicationlabel value(string/app_name) from AndroidManifest.xml:8:9-41is also present at [:abslibrary] AndroidManifest.xml:25:9-47 v…...
手机发烫怎么解决?
在当今这个智能手机不离手的时代,手机发烫成了不少人头疼的问题。手机发烫不仅影响使用手感,长期过热还可能损害手机硬件、缩短电池寿命,甚至引发安全隐患。不过别担心,下面这些方法能帮你有效给手机 “降温”。 一、使用习惯方面…...
【Artificial Intelligence篇】AI 携手人类:共铸未来创作新纪元
引言: 随着科技的飞速发展,人工智能已逐渐渗透到各个领域,尤其是在创作领域,其与人类的合作展现出了前所未有的可能性和潜力。从艺术作品的生成到文学作品的创作,从复杂软件的开发到创新设计的构思,AI 正在…...
小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面
文章目录 前言一、开启SSH二、配置阿里云ddns1.准备工作2.创建ddns脚本3.添加定时任务 三、开启外网访问SSH和WEB管理界面1、解除WEB管理页面访问限制2.手动添加防火墙端口转发规则,开启外网访问WEB管理和SSH 前言 例如:随着人工智能的不断发展…...
Go快速开发框架2.6.0版本更新内容快速了解
GoFly企业版框架2.6.0版本更新内容较多,为了大家能够快速了解,本文将把更新内容列出详细讲解。本次更新一段时间以来大伙反馈的问题,并且升级后台安全认证机制,增加了RBAC权限管理及系统操作日志等提升后台数据安全性。 更新明细…...
条件语句 - if, else, switch-case
引言 条件语句是编程中用于根据不同的条件执行不同代码块的重要工具。C 提供了 if、else 和 switch-case 等条件语句,帮助程序员实现逻辑分支。本文将详细介绍这些条件语句的用法,并通过实例帮助读者更好地理解和掌握这些概念。 一、if 语句 if 语句是…...
Flink CDC MySQL 同步数据到 Kafka实践中可能遇到的问题
Flink CDC MySQL 同步数据到 Kafka实践中可能遇到的问题 一、问题场景 [ERROR] Could not execute SQL statement. Reason: org.apache.flink.table.api.ValidationException: The primary key is necessary when enable Key: scan.incremental.snapshot.enabled , default: …...
代码随想录Day51 99. 岛屿数量,99. 岛屿数量,100. 岛屿的最大面积。
1.岛屿数量深搜 卡码网题目链接(ACM模式)(opens new window) 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接…...
说说 DinoGrid Open Edition 算法生成艺术背后的故事
大约三年前,我开始创作我的第一个算法生成艺术作品。这种算法被我命名为 Montage Mosaic,通过对图片和像素的放大与缩小,尝试在作品中探索宏观与微观视界的关系。这次创作让我首次生成了一张超越 JPEG 规格限制的图片。尽管其基本实现逻辑可以…...
FFmpeg推拉流命令
命令简介 它可以将本地的视频/音频流推送到服务器,也可以将服务器上的音视频流拉到本地。 推流命令的命令格式 ffmpeg -re -i [输入文件] -c:v [视频编码器] -c:a [音频编码器] -f [输出格式] [推流地址] 参数解析 -re 表示采用实时模式,以原始速度…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
