论文阅读-《Attention is All You Need》

news2024/11/11 5:17:09

注意力就是一切

【要点】:论文提出了一种全新的网络架构——Transformer,完全基于注意力机制,无需使用循环和卷积,实现了在机器翻译任务上的性能提升和训练效率的显著提高。

【方法】:通过构建一个仅使用注意力机制的Transformer模型,该模型采用自注意力机制和多头注意力来处理序列数据,摒弃了传统的循环和卷积网络。

【实验】:作者在WMT 2014 English-to-German和English-to-French翻译任务上进行了实验,使用的数据集分别为WMT 2014,模型在两个任务上分别达到了28.4 BLEU和41.8 BLEU的成绩,优于现有最佳结果。此外,还成功将Transformer应用于英语句子结构解析任务。

【代码】https://github.com/tensorflow/tensor2tensor

摘要

研究提出了一种全新的神经网络架构——Transformer,它完全依赖于注意力机制,摒弃了传统的循环和卷积方法。通过在两个机器翻译任务上的实验,发现Transformer模型不仅在翻译质量上优于现有模型,而且在训练过程中更加高效,能够实现更好的并行化,显著减少了训练时间。在WMT 2014英德翻译任务中,Transformer模型取得了28.4的BLEU分数,超越了之前所有模型的最佳成绩。在英法翻译任务中,该模型在仅使用八个GPU训练3.5天后,就创造了41.8的BLEU分数新纪录,这一成绩远低于文献中其他最佳模型的训练成本。此外,还证明了Transformer模型在其他任务上也具有良好的泛化能力,例如在英语成分句法分析任务中,无论是在大量还是有限训练数据的情况下,都能取得成功。 

1 引言

本文介绍了一种名为Transformer的新型神经网络架构,它不使用传统的循环神经网络结构,而是完全依赖于注意力机制来处理序列数据。这种架构允许在训练过程中进行更多的并行计算,从而提高了计算效率。Transformer模型在机器翻译任务中表现出色,能够在相对较短的时间内达到高质量的翻译效果。这种模型的提出,为序列建模和转换问题提供了新的解决方案,可能会对自然语言处理领域的研究和应用产生重要影响。

2 背景

本节介绍了减少序列计算的目标,这是扩展神经GPU、ByteNet和ConvS2S等模型的基础。这些模型使用卷积神经网络并行计算所有输入和输出位置的隐藏表示。然而,这些模型在处理远距离依赖关系时存在困难,因为所需的操作数量随着位置间距离的增加而增加。Transformer通过自注意力机制解决了这个问题,将操作数量减少到恒定数量,并通过多头注意力机制提高了有效分辨率。

自注意力是一种关联单个序列中不同位置的注意力机制,已在多种任务中成功应用。端到端记忆网络基于循环注意力机制,而非序列对齐的递归,已在简单语言问答和语言建模任务上表现良好。

Transformer是第一个完全依赖自注意力来计算输入和输出表示的转换模型,不使用序列对齐的RNN或卷积。接下来的章节将详细描述Transformer的结构,并讨论自注意力相对于其他模型的优势。

3 模型架构

本节介绍了Transformer模型的架构,它采用了编码器-解码器结构,这是神经序列转换模型中常见的设计。编码器负责将输入序列的符号表示映射到连续的表示序列,而解码器则基于这些连续表示生成输出序列。Transformer模型的特点是使用了堆叠的自注意力机制和逐点全连接层,这些结构分别应用于编码器和解码器。自注意力机制允许模型在处理序列时考虑全局依赖关系,而逐点全连接层则用于进一步处理和转换这些表示。这种架构设计使得Transformer能够有效地处理序列数据,并在各种序列转换任务中表现出色。

3.1 编码器和解码器堆栈

编码器由6个相同的层组成,每层包含两个子层:多头自注意力机制和逐位置全连接前馈网络。每个子层都采用了残差连接和层归一化,以增强模型的学习能力和稳定性。解码器也有6个相同的层,除了编码器中的两个子层外,还额外增加了一个子层,用于处理编码器的输出。解码器的自注意力子层被修改以防止位置关注未来的位置,这是通过掩蔽和输出嵌入的偏移实现的,确保了解码器在生成每个位置的输出时只能依赖于之前的位置。这种设计使得Transformer能够有效地处理序列数据,同时保持对长距离依赖的敏感性。

3.2 注意力

注意力函数可以被描述为将一个查询和一组键-值对映射到一个输出,其中查询、键、值和输出都是向量。输出是值的加权和,其中分配给每个值的权重是通过查询与相应键的兼容性函数计算的。

图2:(左)缩放点积注意力。(右)多头注意力由多个并行运行的注意力层组成。

3.2.1 缩放点积注意力

本节详细介绍了缩放点积注意力的工作原理。这种注意力机制通过计算查询与键的点积,然后除以键的维度的平方根来缩放,最后应用softmax函数来获取每个值的权重。

计算输出矩阵如下:Attention(Q, K, V) = softmax \left ( \frac{QK^T }{\sqrt{d_{k}}} \right )V(1)

这种缩放是为了防止在键的维度较大时,点积结果过大,导致softmax函数的梯度过小,影响模型的学习效率。

缩放点积注意力与加性注意力和普通的点积注意力相比,具有更快的计算速度和更高的空间效率,因为它可以利用优化的矩阵乘法代码实现。此外,通过缩放点积,Transformer模型能够更有效地处理高维数据,避免在softmax函数中出现梯度消失的问题。这种注意力机制是Transformer模型高性能的关键因素之一。

3.2.2 多头注意力

多头注意力机制通过将查询、键和值分别投影到不同的子空间,并在这些子空间上并行执行注意力函数,从而允许模型同时从多个表示子空间中获取信息。这种机制提高了模型对信息的捕捉能力,因为它可以从不同的视角学习数据的表示。

在Transformer模型中,通常使用8个并行的注意力层,每个层(或头)处理不同的信息。每个头的维度被设置为模型维度除以头数,这样可以保证多头注意力的总计算成本与单头注意力相当,同时增加了模型的表达能力。这种设计使得Transformer能够有效地处理复杂的序列转换任务,提高了模型的性能和灵活性。

MultiHead(Q,K,V)=Concat\left ( head_{1},...,head_{h} \right )W^{O}其中\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) 这里的投影是参数矩阵 W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}

W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v}W^O \in \mathbb{R}^{hd_{v}\times d_{model}}。 在这项工作中,使用h = 8个并行注意力层或头。对于每个头,我们使用 d_k = d_v = d_{\text{model}} / h = 64。由于每个头的维度减少,总的计算成本与具有完整维度的单头注意力相似。

3.2.3 我们模型中注意力的应用

Transformer模型通过三种不同的方式应用多头注意力机制:

  1. 编码器-解码器注意力层:在这些层中,查询向量来自解码器的前一层,而键和值向量来自编码器的输出。这种机制使得解码器的每个位置都能够关注输入序列中的所有位置,与典型的序列到序列模型中的编码器-解码器注意力机制相似。

  2. 编码器中的自注意力层:在自注意力层中,键、值和查询向量都来自编码器中前一层的输出。这样,编码器的每个位置都能够关注前一层中的所有位置。

  3. 解码器中的自注意力层:解码器中的自注意力层允许每个位置关注解码器中直到并包括该位置的所有位置。为了保持自回归属性,需要防止解码器中的信息向左流动。这是通过在缩放点积注意力中掩蔽(将softmax输入中对应非法连接的值设置为负无穷大)来实现的。

这种灵活的注意力应用方式使得Transformer能够有效地处理序列数据,并在各种序列转换任务中表现出色。通过编码器-解码器注意力和自注意力的结合,模型能够捕捉输入和输出之间的复杂关系,同时保持解码过程的自回归特性。

3.3 逐位置前馈网络

Transformer模型中的每一层除了包含注意力子层外,还包含一个逐位置前馈网络。这个网络对序列中的每个位置分别应用相同的操作,包括两个线性变换和一个ReLU激活函数。

\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 \quad (2)

这种结构有时也被称为具有1x1卷积核的卷积操作。输入和输出的维度为 d_{\text{model}} = 512d,中间层的维度为 d_{ff} = 2048

这种设计使得模型能够在注意力机制的基础上,进一步对每个位置的表示进行非线性变换,增强了模型处理复杂特征的能力。输入和输出的维度保持一致,为512维,而中间层的维度则更大,为2048维,这为模型提供了更多的参数来学习数据的复杂表示。

逐位置前馈网络的引入,使得Transformer模型在处理序列数据时更加灵活和强大,有助于提升模型在各种自然语言处理任务中的表现。

3.4 嵌入和Softmax

Transformer模型使用嵌入层将输入和输出的令牌转换为固定维度的向量,这个维度与模型的其他部分保持一致。模型中,输入和输出嵌入层以及解码器的预softmax线性变换共享同一个权重矩阵,这样做可以减少模型的参数数量,并且使得模型在处理输入和输出时保持一致性。

在嵌入层中,权重被乘以 \sqrt{d_{\text{model}}}dmodel​​,这是一种常见的做法,用于调整嵌入层的缩放,以适应模型的维度。这种设计有助于模型更好地学习和处理词汇的表示,同时保持计算的稳定性。

表1提供了不同层类型在处理序列数据时的最大路径长度、每层复杂度和最小顺序操作数量的比较。这些参数对于理解和优化模型的计算效率至关重要,特别是在处理长序列或高维度表示时。通过这些设计,Transformer模型能够有效地处理各种序列转换任务,同时保持高效的计算性能。

3.5 位置编码 

Transformer模型通过位置编码来赋予模型对序列中元素位置的感知能力。由于模型中不使用递归和卷积,位置编码成为了让模型理解序列顺序的关键技术。位置编码通过将每个位置的正弦和余弦函数值添加到嵌入向量中实现,使得模型能够区分不同位置的嵌入。

使用不同频率的正弦和余弦函数:

PE(pos, 2i) = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)

PE(pos, 2i+1) = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) 其中 pos 是位置,i 是维度。也就是说,位置编码的每个维度对应一个正弦波。波长从 2π 到 10000⋅2π 形成一个几何级数。我们选择这个函数是因为我们假设它将允许模型容易地通过相对位置学习注意力,因为对于任何固定的偏移量 k,PE_{pos+k}可以表示为 PE_{pos} 的线性函数。

位置编码的设计允许模型通过相对位置轻松学习注意力,这对于处理序列数据至关重要。此外,使用正弦波函数的位置编码还可能使得模型能够处理比训练时遇到的更长的序列,增加了模型的泛化能力。这种设计是Transformer模型能够有效处理各种序列任务的一个重要因素。

4 为什么使用自注意力

本节讨论了自注意力层与循环和卷积层相比的优势。自注意力层在处理短序列时计算复杂度较低,并且能够并行处理所有位置,这使得它们在训练时更加高效。此外,自注意力层在网络中为长距离依赖提供了更短的路径,这有助于模型学习这些依赖关系。

自注意力层还可以通过限制考虑的邻域大小来适应非常长的序列,尽管这会增加最大路径长度。相比之下,卷积层需要多个层才能连接所有输入和输出位置,这增加了网络中最长路径的长度,并且计算成本更高。

自注意力层的另一个优点是它们可能产生更可解释的模型,因为注意力分布可以揭示模型在处理特定任务时关注的信息。这些特性使得自注意力成为Transformer模型中的关键组件,有助于提高模型的性能和解释性。

5 训练

本节描述了我们模型的训练方案。

5.1 训练数据和批处理

  1. 训练数据:使用了WMT 2014英德数据集和英法数据集,其中英德数据集包含约450万句对,英法数据集则包含3600万句子。

  2. 编码方式:句子使用字节对编码(BPE)和词片编码,以适应共享的源-目标词汇表。

  3. 批处理:根据大致的序列长度将句子对进行批处理,每个批次包含约25000个源令牌和25000个目标令牌。

5.2 硬件和计划

  1. 硬件配置:训练在一台配备8个NVIDIA P100 GPU的机器上进行。

  2. 训练计划:基础模型训练了100,000步,大约12小时;大型模型训练了300,000步,大约3.5天。

5.3 优化器 

使用了Adam优化器,具有特定的超参数设置,包括两个衰减率 \beta_1β1​ 和 \beta_2β2​,以及数值稳定性参数 \epsilonϵ。学习率根据一个特定的公式进行调整,该公式在训练初期线性增加学习率,并在之后按步数的逆平方根减少

5.4 正则化

  • 残差丢弃:在每个子层的输出上应用dropout,以及在编码器和解码器中对嵌入和位置编码的和应用dropout,以减少过拟合。
  • 标签平滑:使用标签平滑技术,使模型在训练时对标签的预测更加不确定,这有助于提高模型在实际应用中的泛化能力。

6 结果

6.1 机器翻译

在这部分,文档详细说明了Transformer模型在机器翻译任务上取得的显著成果:

  1. 英德翻译:大型Transformer模型在WMT 2014英德翻译任务上取得了28.4的BLEU分数,超越了之前所有模型,包括集成模型。

  2. 英法翻译:在WMT 2014英法翻译任务上,大型模型取得了41.0的BLEU分数,同样超越了所有之前发布的单一模型。

  3. 训练效率:基础模型和大型模型的训练成本远低于竞争模型,训练时间也更短。

  4. 模型平均:为了提高性能,模型在推理时采用了检查点平均技术,基础模型平均了最后5个检查点,而大型模型平均了最后20个检查点。

  5. 束搜索:在生成翻译时,使用了束搜索策略,束大小为4,长度惩罚为0.6。

  6. 成本估计:通过估算训练时间、使用的GPU数量和GPU的浮点运算能力,来估计训练模型的成本。

这些结果证明了Transformer模型在机器翻译领域的有效性和优越性,以及其在训练效率和成本效益方面的优势。

表2:Transformer在训练成本的一小部分情况下,在英德和英法的newstest2014测试中实现了比以往最先进的模型更好的BLEU分数。

6.2 模型变体

在这部分详细说明了对Transformer模型的不同变体进行的实验,以评估模型中各个组件的重要性:

  1. 注意力头数和维度:通过改变注意力头的数量和键值维度,但保持计算量不变,发现单头注意力的性能比最佳设置差,而头数过多也会导致性能下降。

  2. 注意力键大小:减少注意力键的大小 d_kdk​ 会降低模型质量,这表明点积可能不是最佳的兼容性函数,可能需要更复杂的函数。

  3. 模型大小和dropout:较大的模型通常表现更好,而dropout在防止过拟合方面非常有效。

  4. 位置编码:将正弦波位置编码替换为学习到的位置嵌入后,结果与基础模型几乎相同,表明两种位置编码方法在性能上是可比的。

表3 Transformer架构的变体。未列出的值与基础模型相同。所有指标均基于英德翻译开发集newstest2013。列出的困惑度是按词片计算的,根据我们的字节对编码,不应与按词困惑度进行比较。

6.3 英语成分句法分析

这部分描述了Transformer模型在英语成分句法分析任务上的应用和性能。尽管Transformer模型没有针对特定任务进行调整,但仍然取得了令人惊讶的好成绩,超过了除特定模型之外的所有先前模型。这表明Transformer模型具有很好的泛化能力,能够适应不同的自然语言处理任务。

  1. 数据集:使用了华尔街日报(WSJ)部分的宾夕法尼亚树库,以及高信心和BerkeleyParser语料库。
  2. 模型配置:4层Transformer模型,使用了不同的词汇表大小。
  3. 训练设置:包括仅使用WSJ训练集的设置和半监督设置。
  4. 超参数选择:在开发集上进行了少量实验,选择了dropout、学习率和束大小等超参数。
  5. 推理设置:在推理过程中,增加了最大输出长度,并使用了特定的束大小和长度惩罚。
  6. 性能:Transformer模型在该任务上的性能超过了大多数先前模型,证明了其强大的泛化能力。

表4 Transformer模型在英语成分句法分析上泛化得很好(结果基于WSJ的第23部分)

7 结论 

这部分总结了Transformer模型的主要贡献和未来的研究方向:

  1. 模型创新:Transformer是首个完全基于注意力机制的序列转换模型,它用多头自注意力取代了传统的循环层。

  2. 性能:在WMT 2014英德和英法翻译任务上,Transformer达到了新的最高水平,甚至超越了之前所有的集成模型。

  3. 训练效率:与基于循环或卷积层的架构相比,Transformer的训练速度显著更快。

  4. 未来工作:作者对基于注意力的模型的未来感到兴奋,并计划将这些模型应用于其他任务,如处理图像、音频和视频等非文本输入和输出模态的问题。同时,研究局部、受限的注意力机制,以及减少生成过程的序列化也是未来的研究方向。

  5. 代码开源:训练和评估模型的代码已经在GitHub上开源,方便其他研究者使用和参考。https://github.com/tensorflow/tensor2tensor

  6. 致谢:作者对Nal Kalchbrenner和Stephan Gouws提供的有益评论、更正和启发表示感谢。

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

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

相关文章

【高分系列卫星简介】

高分系列卫星是中国国家高分辨率对地观测系统(简称“高分工程”)的重要组成部分,旨在提供全球范围内的高分辨率遥感数据,广泛应用于环境监测、灾害应急、城市规划、农业估产等多个领域。以下是对高分系列卫星及其数据、相关参数和…

Java流程控制语句——条件控制语句详解(附有流程图)#Java条件控制语句有哪些?#if-else、switch

在 Java 编程中,条件控制语句用于控制程序的执行路径,决定根据某些条件来选择执行某段代码或跳过某段代码。它们是 Java 编程的重要组成部分,帮助开发者根据不同的输入、状态或数据流来编写更加灵活和动态的代码。在本文中,我们将…

利用git将项目上传到github

采用git而不是在pycharm中共享的原因:可能会出现上图报错 目录 1、创建github仓库2、在 git bash 中初始化Git仓库,添加文件,上传代码 1、创建github仓库 2、在 git bash 中初始化Git仓库,添加文件,上传代码

【C++】STL----list常见用法

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:C从小白到高手 🌹往期回顾🌹:[C]vector常见用法 🔖 流水不争,争的是滔滔不息。 文章目录 一、list的介绍li…

【C++】list容器的基本使用

一、list是什么 list的底层结构是带头双向循环链表。 相较于 vector 的连续线性空间,list 就显得复杂很多,它是由一个个结点构成,每个结点申请的空间并不是连续的,它的好处是每次插入或删除一个数据,就配置或释放一个…

WebServer:log

超时锁的编写 这个问题处于blockqueue.h文件中&#xff0c;内容如下&#xff1a; template<class T> bool BlockDeque<T>::pop(T& item, int timeout) {std::unique_lock<std::mutex> locker(mtx_);while(deq_.empty()) {if(condConsumer_.wait_for(lo…

内存泄漏

文章目录 内存泄漏发现问题topVisualVMArthas 原因分析代码层面并发请求 诊断问题MAT原理 –支配树获取运行时快照 内存泄漏 内存泄漏&#xff08;memory leak&#xff09;&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;…

12.第二阶段x86游戏实战2-CE找基地址

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

全网最全:企业微信用户授权登录对接完整流程

Hello&#xff01;欢迎各位新老朋友来看小弟博客&#xff0c;祝大家事业顺利&#xff0c;财源广进&#xff01;&#xff01; 主题&#xff1a;企业微信用户授权与校验完整对接流程 一&#xff1a;构造第三方应用授权链接 如果第三方应用需要在打开的网页里面携带用户的身份信息…

吸尘器制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

吸尘器制造行业&#xff0c;作为传统制造业的重要组成部分&#xff0c;也在积极探索如何通过先进技术实现生产模式的创新升级。5G智能工厂与物联数字孪生平台的融合应用&#xff0c;为吸尘器制造业的数字化转型铺设了一条高速通道&#xff0c;不仅极大地提升生产效率&#xff0…

华为---代理ARP简介及示例配置

目录 1. 概念 2. 前提条件 3. 使用环境 4. 工作过程 5. 优点 6. 缺点 7. 示例配置 7.1 示例场景 7.2基本配置 7.3 配置端口隔离 7.4 开启代理ARP 7.4.1 VLAN内代理ARP 7.4.2 VLAN间代理ARP 7.4.3路由式ARP代理 1. 概念 代理ARP&#xff08;Proxy ARP&#xff09;&…

GAMES202 作业1

参考&#xff1a;games202作业1 SM 首先是利用shadow map去生成尝试生成硬阴影。根据作业的要求 我们完成光源对物体的mvp矩阵 CalcLightMVP(translate, scale) {let lightMVP mat4.create();let modelMatrix mat4.create();let viewMatrix mat4.create();let projection…

Bigemap GIS Office 2024注册机 全能版地图下载软件

对于需要利用GIS信息进行编辑、设计的用户来说&#xff0c;Bigemap GIS Office占有重要地位。用户可以使用Bigemap GIS Office作为工具进行设计、分析、共享、管理和发布地理信息。Bigemap GIS Office能实现多种数据流转、嵌入、融合以及更多地为用户提供数据的增强处理及多种分…

文心一言 VS 讯飞星火 VS chatgpt (351)-- 算法导论24.1 2题

二、证明推论24.3。推论 24.3 的内容是设 G ( V , E ) G(V,E) G(V,E)是一带权重的源结点为 s s s的有向图&#xff0c;其权重函数为 ω : E → R ω:\boldsymbol{E→R} ω:E→R。假定图 G G G不包含从源结点 s s s可以到达的权重为负值的环路&#xff0c;则对于所有结点 v ∈ …

完美转发、C++11中与线程相关的std::ref

目录 模板中的万能引用 std::forward实现完美转发 C11中与线程相关的std::ref 线程函数参数 用函数指针作为线程函数 用lambda表达式作为线程函数 模板中的万能引用 void Func(int& x) {cout << "左值引用" << endl; } void Func(int&&am…

spark之不同序列化对比

一&#xff0c;spark的rdd的序列话不同介绍 下面是使用不同序列化后的占用资源和数据大小 2&#xff0c;sparksql中序列化的区别 sparksql中使用序列化和不使用差别不大&#xff0c;英文sparksql中默认使用了encode自己实现的序列化方法&#xff0c;加上与不加序列化差别不大…

基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网技术的飞速发展&#xff0c;企业与客户之间的沟通方式日益多样化&#xff0c;在线客服系统作为连接企业与客户的桥梁&#xff0c;其重要性不言而喻。然而&#xff0c;市场上现有的在线客服系统往往存在成本高、定制性差、维护复杂等问题。针对这些痛点&…

Zabbix 6.4添加中文语言

/usr/share/zabbix/include/locales .inc .phplocale -agrep “zh_CN" yum install langpacks-zh_CN.noarch y y y

【千帆AppBuilder】零代码+组件+代码节点方式实现AI应用《法定退休年龄计算器》

欢迎来到《小5讲堂》 这是《千帆》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景创建应用基本信息角色指令引导信息 组件整体界面开始节点代码节…

大腾智能3D协同平台通过华为云云软件认证

在数字化浪潮的推动下&#xff0c;工业软件不仅是研发和生产的核心工具&#xff0c;更是创新突破的基础&#xff0c;正成为推动工业领域数字化转型的关键力量。 近日&#xff0c;深圳市大腾信息技术有限公司凭借在技术创新与产品优化方面的卓越表现&#xff0c;再次迎来里程碑…