基于术语词典干预的机器翻译挑战赛笔记 Task3 #Datawhale AI 夏令营
书接上回,上回在这捏:
基于术语词典干预的机器翻译挑战赛笔记Task2 #Datawhale AI 夏令营-CSDN博客文章浏览阅读223次,点赞10次,收藏5次。基于术语词典干预的机器翻译挑战赛笔记Task2https://blog.csdn.net/qq_23311271/article/details/140502626
Task3:基于 Transformer 解决机器翻译任务
Transformer
Transformer是一种用于深度学习的神经网络架构,常用于自然语言处理和机器看图等任务。
Transformer架构最早由Google在2017年提出,并广泛应用于机器翻译任务。与传统的循环神经网络(RNN)不同,Transformer使用了自注意力机制(self-attention)来捕捉输入序列中不同位置之间的依赖关系,从而提升了模型的并行计算能力。它通过多层的自注意力和前馈神经网络构成,使得Transformer具备了对长序列的处理能力,且训练速度较快。在自然语言处理领域,Transformer的一种重要应用是BERT(Bidirectional Encoder Representations from Transformers),是一种预训练的语言表示模型,也成为了自然语言处理任务的基石之一。
Transformer 出现
Transformer 在原论文中第一次提出就是将其应用到机器翻译领域,它的出现使得机器翻译的性能和效率迈向了一个新的阶段。它摒弃了循环结构,并完全通过注意力机制完成对源语言序列和目标语言序列全局依赖的建模。在抽取每个单词的上下文特征时,Transformer 通过自注意力机制(self-attention)衡量上下文中每一个单词对当前单词的重要程度。
在这个过程当中没有任何的循环单元参与计算。这种高度可并行化的编码过程使得模型的运行变得十分高效。当前几乎大部分的大语言模型都是基于 Transformer 结构,本节以应用于机器翻译的基于Transformer 的编码器和解码器介绍该模型。
Transformer的主要组件包括编码器(Encoder)、解码器(Decoder)和注意力层。其核心是利用多头自注意力机制(Multi-Head Self-Attention),使每个位置的表示不仅依赖于当前位置,还能够直接获取其他位置的表示。自从提出以来,Transformer模型在机器翻译、文本生成等自然语言处理任务中均取得了突破性进展,成为NLP领域新的主流模型。
Transformer 模型的基本架构:
Transformer模型由编码器(Encoder)和解码器(Decoder)组成。编码器接收输入序列并将其转换为一系列的隐藏表示,解码器则根据编码器的输出和之前的输出来生成目标序列。
每个编码器和解码器均包含若干个相同的层,每个层由两个子层组成,即多头自注意力机制(Multi-head Self-Attention)和前馈神经网络(Feed-Forward Neural Network)。
在自注意力机制中,每个输入位置都可以与其他位置进行交互,通过计算注意力权重来捕捉不同位置之间的依赖关系。这使得模型能够同时考虑到输入序列中的所有位置,从而提高了模型的表达能力。
多头自注意力机制是通过将自注意力机制应用于多个子空间中的不同表示而实现的,每个子空间都通过独立的投影进行线性变换。
前馈神经网络通过两个线性变换和一个激活函数来实现,对每个位置的隐藏表示进行非线性变换。
Transformer模型通过多层的编码器和解码器以及适当的模型参数来实现对输入序列的建模和生成目标序列的能力。
宏观角度
从宏观角度来看,Transformer的编码器是由多个相同的层叠加而成的,每个层都有两个子层(子层表示为sublayer)。第⼀个子层是多头自注意力(multi-head self-attention)汇聚;第二个子层是基于位置的前馈网络(positionwise feed-forward network)。主要涉及到如下几个模块:
1. 嵌入表示层
对于输入文本序列,先通过一个输入嵌入层(Input Embedding)将每个单词转换为其相对应的向量表示。通常直接对每个单词创建一个向量表示。由于 Transfomer 模型不再使用基于循环的方式建模文本输入,序列中不再有任何信息能够提示模型单词之间的相对位置关系。在送入编码器端建模其上下文语义之前,一个非常重要的操作是在词嵌入中加入位置编码(Positional Encoding)这一特征。具体来说,序列中每一个单词所在的位置都对应一个向量。这一向量会与单词表示对应相加并送入到后续模块中做进一步处理。在训练的过程当中,模型会自动地学习到如何利用这部分位置信息。为了得到不同位置对应的编码,Transformer 模型使用不同频率的正余弦函数如下所示:
其中,pos 表示单词所在的位置,2i 和 2i+1 表示位置编码向量中的对应维度,d则对应位置编码的总维度。
通过上面这种方式计算位置编码有这样几个好处:
-
首先,正余弦函数的范围是在 [-1,+1],导出的位置编码与原词嵌入相加不会使得结果偏离过远而破坏原有单词的语义信息。
-
其次,依据三角函数的基本性质,可以得知第pos+k 个位置的编码是第 pos 个位置的编码的线性组合,这就意味着位置编码中蕴含着单词之间的距离信息。
位置编码的维度和词嵌入向量的维度相同( 均为 d_model),模型通过将二者相加作为模型输入
2. 注意力层
自注意力(Self-Attention)操作是基于 Transformer 的机器翻译模型的基本操作,在源语言的编码和目标语言的生成中频繁地被使用以建模源语言、目标语言任意两个单词之间的依赖关系。给定由单词语义嵌入及其位置编码叠加得到的输入表示,为了实现对上下文语义依赖的建模,进一步引入在自注意力机制中涉及到的三个元素::查询
,键
,值
。在编码输入序列中每一个单词的表示的过程中,这三个元素用于计算上下文单词所对应的权重得分。直观地说,这些权重反映了在编码当前单词的表示时,对于上下文不同部分所需要的关注程度。
为了得到编码单词 时所需要关注的上下文信息,通过位置 i查询向量与其他位置的键向量做点积得到匹配分数
。为了防止过大的匹配分数在后续 Softmax 计算过程中导致的梯度爆炸以及收敛效率差的问题,这些得分会除放缩因子
以稳定优化。放缩后的得分经过 Softmax 归一化为概率之后,与其他位置的值向量相乘来聚合希望关注的上下文信息,并最小化不相关信息的干扰。上述计算过程可以被形式化地表述如下:
其中 分别表示输入序列中的不同单词的 q,k,v 向量拼接组成的矩阵,L 表示序列长度,
表示自注意力操作的输出。
3. 前馈层
前馈层接受自注意力子层的输出作为输入,并通过一个带有 Relu 激活函数的两层全连接网络对输入进行更加复杂的非线性变换。实验证明,这一非线性变换会对模型最终的性能产生十分重要的影响。
其中 表示前馈子层的参数。另外,以往的训练发现,增大前馈子层隐状态的维度有利于提升最终翻译结果的质量,因此,前馈子层隐状态的维度一般比自注意力子层要大。
4. 残差连接与层归一化
由 Transformer 结构组成的网络结构通常都是非常庞大。编码器和解码器均由很多层基本的Transformer 块组成,每一层当中都包含复杂的非线性映射,这就导致模型的训练比较困难。因此,研究者们在 Transformer 块中进一步引入了残差连接与层归一化技术以进一步提升训练的稳定性。具体来说,残差连接主要是指使用一条直连通道直接将对应子层的输入连接到输出上去,从而避免由于网络过深在优化过程中潜在的梯度消失问题:
其中 表示第
层的输入,
表示一个映射函数。此外,为了进一步使得每一层的输入输出范围稳定在一个合理的范围内,层归一化技术被进一步引入每个 Transformer 块的当中:
其中 和
分别表示均值和方差,用于将数据平移缩放到均值为 0,方差为 1 的标准分布, a 和 b 是可学习的参数。层归一化技术可以有效地缓解优化过程中潜在的不稳定、收敛速度慢等问题。
5. 编码器和解码器结构
根据给出的网络架构,编码器端可以较为容易实现。但相比于编码器端,解码器端要更复杂一些。具体来说,解码器的每个 Transformer 块的第一个自注意力子层额外增加了注意力掩码,对应图中的掩码多头注意力(Masked Multi-Head Attention)部分。这主要是因为在翻译的过程中,编码器端主要用于编码源语言序列的信息,而这个序列是完全已知的,因而编码器仅需要考虑如何融合上下文语义信息即可。而解码端则负责生成目标语言序列,这一生成过程是自回归的,即对于每一个单词的生成过程,仅有当前单词之前的目标语言序列是可以被观测的,因此这一额外增加的掩码是用来掩盖后续的文本信息,以防模型在训练阶段直接看到后续的文本序列进而无法得到有效地训练。
此外,解码器端还额外增加了一个多头注意力(Multi-Head Attention)模块,使用交叉注意力(Cross-attention)方法,同时接收来自编码器端的输出以及当前 Transformer 块的前一个掩码注意力层的输出。查询是通过解码器前一层的输出进行投影的,而键和值是使用编码器的输出进行投影的。它的作用是在翻译的过程当中,为了生成合理的目标语言序列需要观测待翻译的源语言序列是什么。基于上述的编码器和解码器结构,待翻译的源语言文本,先经过编码器端的每个Transformer 块对其上下文语义的层层抽象,然后输出每一个源语言单词上下文相关的表示。解码器端以自回归的方式生成目标语言文本,即在每个时间步 t ,根据编码器端输出的源语言文本表示,以及前 t-1 个时刻生成的目标语言文本,生成当前时刻的目标语言单词。
多头注意力(Multi-Head Attention)模块是一种注意力机制的变种,用于在序列中获取不同位置的相关信息。
在多头注意力模块中,输入包括三个部分:查询(query)、键(key)和值(value)。通过计算查询和键之间的相似度来得到注意力权重,然后使用注意力权重加权求和得到值的表示。
与传统的注意力机制不同的是,多头注意力模块引入了多个注意力头,每个头都有自己的查询、键和值。每个头计算出的注意力表示可以捕捉不同位置的相关信息,从而增加了模型的表达能力。
交叉注意力(Cross-attention)方法是多头注意力模块的一种应用方式,它将不同输入序列之间的注意力计算整合到一个模块中。
例如,在机器翻译任务中,源语言和目标语言之间可以使用交叉注意力模块来获取源语言和目标语言之间的相关信息。
多头注意力模块通过引入多个注意力头和交叉注意力方法,提供了一种强大的机制来捕捉不同位置的相关信息。
代码实现
PositionalEncoding
类
这个类用于为输入序列添加位置编码,以保留序列中单词的位置信息。
TransformerModel
类
这个类定义了一个完整的Transformer模型,包括编码器、解码器、嵌入层和输出层。
# 位置编码
class PositionalEncoding(nn.Module):def __init__(self, d_model, dropout=0.1, max_len=5000):super(PositionalEncoding, self).__init__()self.dropout = nn.Dropout(p=dropout)pe = torch.zeros(max_len, d_model)position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))pe[:, 0::2] = torch.sin(position * div_term)pe[:, 1::2] = torch.cos(position * div_term)pe = pe.unsqueeze(0).transpose(0, 1)self.register_buffer('pe', pe)def forward(self, x):x = x + self.pe[:x.size(0), :]return self.dropout(x)# Transformer
class TransformerModel(nn.Module):def __init__(self, src_vocab, tgt_vocab, d_model, nhead, num_encoder_layers, num_decoder_layers, dim_feedforward, dropout):super(TransformerModel, self).__init__()self.transformer = nn.Transformer(d_model, nhead, num_encoder_layers, num_decoder_layers, dim_feedforward, dropout)self.src_embedding = nn.Embedding(len(src_vocab), d_model)self.tgt_embedding = nn.Embedding(len(tgt_vocab), d_model)self.positional_encoding = PositionalEncoding(d_model, dropout)self.fc_out = nn.Linear(d_model, len(tgt_vocab))self.src_vocab = src_vocabself.tgt_vocab = tgt_vocabself.d_model = d_modeldef forward(self, src, tgt):# 调整src和tgt的维度src = src.transpose(0, 1) # (seq_len, batch_size)tgt = tgt.transpose(0, 1) # (seq_len, batch_size)src_mask = self.transformer.generate_square_subsequent_mask(src.size(0)).to(src.device)tgt_mask = self.transformer.generate_square_subsequent_mask(tgt.size(0)).to(tgt.device)src_padding_mask = (src == self.src_vocab['<pad>']).transpose(0, 1)tgt_padding_mask = (tgt == self.tgt_vocab['<pad>']).transpose(0, 1)src_embedded = self.positional_encoding(self.src_embedding(src) * math.sqrt(self.d_model))tgt_embedded = self.positional_encoding(self.tgt_embedding(tgt) * math.sqrt(self.d_model))output = self.transformer(src_embedded, tgt_embedded,src_mask, tgt_mask, None, src_padding_mask, tgt_padding_mask, src_padding_mask)return self.fc_out(output).transpose(0, 1)
其他上分技巧
增加训练轮次(epochs):
增加训练轮次可以使模型更充分地学习数据,提高翻译质量。但需要注意避免过拟合。
使用全部训练集:
使用全部训练集可以提供更多的训练样本,帮助模型更好地学习数据的特征。
调整模型参数:
调整模型的参数可以影响模型的表达能力和学习能力。可以尝试调整模型的头部(head)和层数(layers)等参数,以提高模型的性能。
增加模型的深度或宽度:
增加模型的深度或宽度可以增加模型的表达能力,提高翻译质量。可以尝试增加模型的隐藏层的大小或深度。
术语词典:
建立一个术语词典,可以通过在模型生成的翻译中替换术语,或在数据预处理流程中整合术语词典,甚至在模型内部动态调整术语的嵌入,以确保专业术语翻译的准确性。
数据清洗:
清洗训练集中的脏数据,可以避免对模型训练的负面影响。可以去除重复数据、错误标注的数据等。
数据扩增:
可以通过回译、同义词替换、句法分析和语义解析技术重新表述句子,以及将文本翻译成多种语言后再翻译回原语言等方法,增加训练数据的多样性和数量。
学习率调度策略:
采用更精细的学习率调度策略,如Noam Scheduler、Step Decay或Cosine Annealing,可以优化训练过程,提高模型的性能。
Noam Scheduler是根据模型的当前训练步数来动态地调整学习率的学习率调度器。
Noam Scheduler在训练开始时,学习率会先以一个较小的值增加,然后逐渐线性增加到一个较大的值。之后,在训练过程中,学习率会按照公式进行衰减。Noam Scheduler的优点是在训练初期能够有较小的学习率以及良好的收敛性能。
Step Decay是一种根据预先定义的步数来调整学习率的调整方法。
Step Decay通过将学习率按照预定的间隔进行衰减,使得学习率在训练过程中逐渐减小。Step Decay的优点是简单易用,但需要手动设置学习率衰减的间隔。
Cosine Annealing是一种根据余弦函数的曲线来调整学习率的调整方法。
Cosine Annealing在训练过程中按照余弦函数的曲线周期性地调整学习率,使得学习率在每个周期内先减小然后再增加。Cosine Annealing的优点是能够在训练过程中有更好的学习率变化特性,有助于模型在局部最优点附近进行更充分的搜索。
预训练模型:
可以训练一个小的预训练模型,以适应特定的翻译任务。预训练模型可以提供更好的初始参数,帮助模型更快地收敛。
Finetune:
在开发集上对训练好的模型进行微调,可以进一步提高模型在测试集上的表现。
Finetuning
是一种迁移学习的技术,用于在一个预训练过的模型上进行微调,以适应新的任务或数据集。通过微调预训练模型来适应新任务或数据集,提高模型的性能和泛化能力。
迁移学习是指将从一个任务中学习到的知识应用到另一个任务上的过程。在实际应用中,往往缺乏足够的数据来直接训练一个复杂的模型。这时,可以使用已经在大规模数据上预训练的模型作为初始模型,并在新的任务或数据集上进行微调。
Finetuning的过程通常分为两个步骤。
首先,将预训练的模型加载到内存中,然后在新的任务或数据集上进行微调。微调的过程包括两个阶段:冻结和解冻。
在冻结阶段,通常将预训练模型的大部分参数固定住,只训练模型的最后几层或分类器层来适应新任务。这样做的目的是保留预训练模型在大规模数据上学到的通用特征,避免过拟合。
在解冻阶段,逐渐解除参数的固定,允许更多的参数参与训练。这样可以在新任务上进一步微调模型的参数,以更好地适应新的数据。
Finetuning的优点是可以利用预训练模型的知识,在少量数据上实现较好的性能。它可以减少训练时间和计算资源的消耗,并且可以有效地应对数据集变化、迭代更新的需求。
语言模型打分:
可以在开发集和测试集上训练语言模型,用于给训练集中的句子打分,筛选出高质量的数据,提高训练数据的质量。
集成学习:
训练多个不同初始化或架构的模型,并使用集成方法来产生最终翻译,可以提高翻译的稳定性和减少过拟合风险。可以尝试使用投票、平均等集成方法。
相关文章:
基于术语词典干预的机器翻译挑战赛笔记 Task3 #Datawhale AI 夏令营
书接上回,上回在这捏: 基于术语词典干预的机器翻译挑战赛笔记Task2 #Datawhale AI 夏令营-CSDN博客文章浏览阅读223次,点赞10次,收藏5次。基于术语词典干预的机器翻译挑战赛笔记Task2https://blog.csdn.net/qq_23311271/article/…...

定制QCustomPlot 带有ListView的QCustomPlot 全网唯一份
定制QCustomPlot 带有ListView的QCustomPlot 文章目录 定制QCustomPlot 带有ListView的QCustomPlot摘要需求描述实现关键字: Qt、 QCustomPlot、 魔改、 定制、 控件 摘要 先上效果,是你想要的,再看下面的分解,顺便点赞搜藏一下;不是直接右上角。 QCustomPlot是一款…...

Fast Planner规划算法(一)—— Fast Planner前端
本系列文章用于回顾学习记录Fast-Planner规划算法的相关内容,【本系列博客写于2023年9月,共包含四篇文章,现在进行补发第一篇,其余几篇文章将在近期补发】 一、Fast Planner前端 Fast Planner的轨迹规划部分一共分为三个模块&…...

问题记录-SpringBoot 2.7.2 整合 Swagger 报错
详细报错如下 报错背景,我将springboot从2.3.3升级到了2.7.2,报了下面的错误: org.springframework.context.ApplicationContextException: Failed to start bean documentationPluginsBootstrapper; nested exception is java.lang.NullPo…...

【视觉SLAM】 十四讲ch5习题
1.*寻找一个相机(你手机或笔记本的摄像头即可),标定它的内参。你可能会用到标定板,或者自己打印一张标定用的棋盘格。 参考我之前写过的这篇博客:【OpenCV】 相机标定 calibrateCamera Code来源是《学习OpenCV3》18.…...
Webpack基础学习-Day01
Webpack基础学习-Day01 1.1 webpack 是什么 webpack 是一种前端资源构建工具,一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理。 它将根据模块的依赖关系进行静态分析,打包生成…...

如何防止热插拔烧坏单片机
大家都知道一般USB接口属于热插拔,实际任意带电进行连接的操作都可以属于热插拔。我们前面讲过芯片烧坏的原理,那么热插拔就是导致芯片烧坏的一个主要原因之一。 在电子产品的整个装配过程、以及产品使用过程经常会面临接口热插拔或者类似热插拔的过程。…...

JQuery+HTML+JavaScript:实现地图位置选取和地址模糊查询
本文详细讲解了如何使用 JQueryHTMLJavaScript 实现移动端页面中的地图位置选取功能。本文逐步展示了如何构建基本的地图页面,如何通过点击地图获取经纬度和地理信息,以及如何实现模糊查询地址并在地图上标注。最后,提供了完整的代码示例&…...
ArcGIS Pro SDK (九)几何 13 多部件
ArcGIS Pro SDK (九)几何 13 多部件 文章目录 ArcGIS Pro SDK (九)几何 13 多部件1 获取多部分要素的各个部分2 获取多边形的最外层环 环境:Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 获取多部分要素的各个部分…...

【Node】npm i --legacy-peer-deps,解决依赖冲突问题
文章目录 🍖 前言🎶 一、问题描述✨二、代码展示🏀三、运行结果🏆四、知识点提示 🍖 前言 npm i --legacy-peer-deps,解决依赖冲突问题 🎶 一、问题描述 node执行安装指令时出现报错ÿ…...

h5点击电话号跳转手机拨号
需要使用到h5的 <a>标签 我们首先在<head>标签中添加代码 <meta name"format-detection" content"telephoneyes"/>然后再想要的位置添加代码 <a href"tel:10086"> 点击拨打:10086 </a> 这样功能就实现…...

从数据湖到湖仓一体:统一数据架构演进之路
文章目录 一、前言二、什么是湖仓一体?起源概述 三、为什么要构建湖仓一体?1. 成本角度2. 技术角度 四、湖仓一体实践过程阶段一:摸索阶段(仓、湖并行建设)阶段二:发展阶段方式一、湖上建仓(湖在下、仓在上)方式二:仓外…...
Electron 渲染进程直接调用主进程的API库@electron/remote引用讲解
背景 remote是个老库,早期Electron版本中有个remote对象,这个对象可以横跨所有进程,随意通信,后来官方认为不安全,被干掉了,之后有人利用Electron的IPC通信,底层通过Promise的await能力&#x…...
在python中使用正则表达式
正则表达式是什么?就是要寻找的数据的规律,使用正则表达式的步骤有三 第一,寻找规律,第二使用正则符号表示规律,第三,提取信息 看下面的代码 import re wenzhang (小草偷偷地从土里钻出来,嫩…...

华清数据结构day4 24-7-19
链表的相关操作 linklist.h #ifndef LINKLIST_H #define LINKLIST_H #include <myhead.h> typedef int datatype; typedef struct Node {union{int len;datatype data;};struct Node *next; } Node, *NodePtr;NodePtr list_create(); NodePtr apply_node(datatype e); …...
【深度学习图像】拼接图的切分
用户常常将多张图拼成一张图。 如果将这张图拆为多个子图,下面是一种opencv的办法,后面要训练一个模型来识别边缘更为准确。 import osimport cv2 import numpy as npdef detect_lines(image_path):# 读取图片image cv2.imread(image_path)if image i…...

Covalent(CXT)运营商网络规模扩大 42%,以满足激增的需求
Covalent Network(CXT)是领先的人工智能模块化数据基础设施,网络集成了超过 230 条链并积累了数千名客户,目前 Covalent Network(CXT)网络迎来了五位新运营商的加入,包括 Graphyte Labs、PierTw…...

Java 集合框架:HashMap 的介绍、使用、原理与源码解析
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 020 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...

单周期CPU(三)译码模块(minisys)(verilog)(vivado)
timescale 1ns / 1ps //module Idecode32 (input reset,input clock,output [31:0] read_data_1, // 输出的第一操作数output [31:0] read_data_2, // 输出的第二操作数input [31:0] Instruction, // 取指单元来的指令input [31:0] …...
理想化相机模型的相机内参
文章目录 理想化相机模型的相机内参计算1. 相机内参定义2. 根据视角和图像分辨率计算相机内参2.1 计算焦距 fx 和 fy2.2 计算主点 cx 和 cy3. 示例计算3.1 计算 fx3.2 假设 fy = fx(因为没有垂直视场角的信息)3.3 计算主点4. 相机内参矩阵理想化相机模型的相机内参计算 在理…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...

ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...

VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...

华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手
华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...