-
1. 它能解决哪些问题1.1 为你直接输出标准的文本翻译API接口它以华为云DeepSeek作为基础支撑,通过 translate.service 作为中间调度。你完全不需要去了解 DeepSeek 是什么以及怎么使用。1.2 是你原有的网站及后台支持数十个语种切换能力让你原有的网站或后台能出现个语言切换按钮,支持几十个语种随意切换,而且还是专业级翻译水准。而做到这个,仅需要十分钟,有 华为云 DeepSeek 大模型 帮你完成。2. 当前行业的痛点文本翻译API,国内比较好的厂家,比如某牛翻译50元/100万字符、某度翻译是49元/百万字符网站或者后台管理系统,用传统i18n的方式做多语言适配,工作量相当大,而且维护及后续开发对接的人工成本巨高,极其造成某次升级功能,多语种的i18n的某个地方忘记配了!前端开发工程师是技术人员,成本浪费在这种完全没技术含量的逐个定位复制粘贴上严重损耗技术的热情。3. 你需要具备的知识需要懂的linux命令行: wget 、 vi 两个基本命令的使用如果要对你原有网站植入语种切换能力,你还有稍微懂一点点 JavaScript 知道吧我们提供的两行JS放到什么位置。4. 去华为开通DeepSeek服务并拿到调用的Api Key4.1 第一步,开通一个Api Key开通网址: https://console.huaweicloud.com/modelarts/?locale=zh-cn®ion=cn-southwest-2#/model-studio/authmanage把开通的这个 API Key 单独记好,下面将使用4.2 第二步,领取华为云DeepSeek的200万tokens领取网址: https://console.huaweicloud.com/modelarts/?locale=zh-cn®ion=cn-southwest-2#/model-studio/deployment按照上图箭头的步骤, 通过左侧菜单 “模型工具” -> “模型推理” ,点开后,点击箭头中的 “旧版服务”, 然后去领取即可。注意领取的服务名字是 “DeepSeek-V3-671B-32K” 千万别领错了领成 R 系列就没法用了。5. 部署 translate.service 服务,开放文本翻译API接口5.1 第一步,买个服务器服务器规格:CPU:1核架构:x86_64 (也就是 Intel 的CPU )内存:1G操作系统:CentOS 7.4 (这个版本没有可选 7.6 、7.2 等,7.x 系列的都可以。另外华为欧拉应该也是可以的)系统盘:默认的系统盘就行。无需数据盘弹性公网IP:按流量计费(带宽大小10MB。如果你只是你自己用,翻译的量不大,你完全可以选1MB带宽)其他的未注明的,都按照怎么省钱怎么来选即可。备注这里会有多个型号,比如什么s3、s6、t6的,你就选最便宜的就行。(一般t6是最便宜的,选它就行)安全组:要开放22、80这两个端口这里给出了个参考:购买链接: https://console.huaweicloud.com/ecm/?locale=zh-cn®ion=cn-north-4#/ecs/create/custom选t系列的1核1G,最便宜如果使用的人多,我也会考虑制作个一键部署的镜像上架到应用市场方便大家快速使用。5.2 第二步,一键部署执行以下shell命令进行一键部署。yum -y install wget && wget https://raw.githubusercontent.com/xnx3/translate/refs/heads/master/deploy/service.sh -O ~/install.sh && chmod -R 777 ~/install.sh && sh ~/install.sh5.3 配置华为云的API Key首先,找到配置文件 /mnt/service/config.properties 编辑它,找到translate.service.leimingyun.domain=http://api.translate.zvo.cn这个,将它注释掉,然后增加一下配置:translate.service.deepSeek.url=https://infer-modelarts-cn-southwest-2.modelarts-infer.com/v1/infers/fd53915b-8935-48fe-be70-449d76c0fc87/v1/chat/completions # 这里固定填写不需要改动 translate.service.deepSeek.model=DeepSeek-V3 # 上面步骤 4.1 创建的 Api Key translate.service.deepSeek.key=xxxxxxxxxxxxxxxxxxxxx # 单次请求对话的最大token数量,这个可以设置的 200 就可以 translate.service.deepSeek.max_tokens=200 其中 的 translate.service.deepSeek.url 是通过下图获得的:操作完毕后,重启 translate.service 服务,执行重启命令 :/mnt/service/start.sh5.4 第四步,访问测试直接访问你的服务器 ip ,即可看到效果:随便选个语种切换一下试试5.5 文本翻译API到这一步,你的文本翻译API已经完成了,这里有个文档,是针对这个文本翻译API接口的说明http://api.zvo.cn/translate/service/20230807/translate.json.html将里面的请求域名换成你的ip就可以了。 比如你的 服务器ip是 123.123.123.123 ,那么你的文本翻译API接口便是: http://123.123.123.123/translate.json另外 from 传入参数完全可以忽略,因为 华为云DeepSeek 是可以自己去识别是什么语种的。至于能翻译成哪些语种,这可就多了去了, DeepSeek 能支持的语种,它都支持。6. 结合 translate.js 使原有网页支持多个语言切换6.1 快速使用在网页最末尾, </html> 之前,加入以下代码,一般在页面的最底部就出现了选择语言的 select 切换标签,你可以点击切换语言试试切换效果<script src="https://res.zvo.cn/translate/translate.js"></script> <script> translate.language.setLocal('chinese_simplified'); //设置本地语种(当前网页的语种)。如果不设置,默认自动识别当前网页显示文字的语种。 可填写如 'english'、'chinese_simplified' 等,具体参见文档下方关于此的说明。 translate.service.use('translate.service'); //设置采用私有部署的翻译通道,相关说明参考 https://translate.zvo.cn/4081.html translate.request.api.host='http://121.121.121.121/'; //将这里面的ip地址换成你服务器的ip,注意开头,及结尾还有个 / 别拉下 translate.execute();//进行翻译 </script> 如此,翻译请求接口就会走您自己服务器了。有关这个手动指定翻译接口的详细说明,可参考: http://translate.zvo.cn/4068.html另外 https://res.zvo.cn/translate/translate.js 这个js文件你可以自己下载下来放到你自己项目里使用,它没有任何别的依赖,是标准的原生 JavaScript6.2 原理说明它是直接扫描你网页的dom元素进行自动分析识别,然后将文本集中化进行翻译。也就是你要讲这个 translate.execute(); 这行要放在最底部,就是因为上面的渲染完了在执行它,可以直接触发整个页面的翻译。另外它提供三四十个微调指令,比如切换语言select选择框的自定义及美化、自动识别并切换为用户所使用的语种、 图片翻译、自定义术语、只翻译哪些元素、哪些元素不被翻译、网页中有ajax请求时请求完毕自动触发翻译、网页中dom发生改动后自动触发翻译 …… 等等,只要你想的,它都能支持你做到!如果做不到,你可以反馈我,我给你扩展上让它能做到。 它支持所有浏览器内使用的场景。什么管理后台、网站、vue、react …… 都可以。 如果你有开源项目想接入它来提供语种切换能力,那华为云 DeepSeek 非常欢迎你的加入,我可全程跟随提供指导。商业许可商业方面,我完全允许你拿此项目进行商业化包装盈利,而无需给我支付任何费用!因为文档里的 translate.service 就是我们自己的。我的开源项目能帮你赚钱,我会很荣幸,我能造福社会。我们从互联网公司最基础的地方开始做起,全部国产化,在大众所接触的最普通的层面,进行革命。活动声明我正在参加【案例共创】基于华为云DeepSeek创建文本翻译开放API服务,并对现有网站或后台增加一键切换数十个语种的能力 https://bbs.huaweicloud.com/forum/thread-0258176625450187006-1-1.html
-
在谷歌Chrome浏览器的“沉浸式翻译”插件中,想调用华为云的自然语言处理NLP的机器翻译API,需要填写“自定义API接口地址”、“模型”、“System Prompt”、“Prompt”、“Multiple Prompt”、“Subtitle Prompt”这几项,请问这几项应该填什么?
-
文本翻译这一项目,有没有套餐包? 计费情况是啥样的? 能不能使用抵扣券
-
华为云 机器翻译服务,一次支持最多翻译多长(多少个字符 或 单词)
-
利用AI进行诗歌写作
-
技术云诗句编写与查看............
-
硬件环境:华为泰山2280服务器,cpu是鲲鹏920,内存64G操作系统:centos7.8(4.18.0-193.28.1.el7.aarch64)因系统默认的PAGE_SIZE为64K所以下载了内核进行重新编译,内核源码地址:https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.18.tar.gz按照官网指导:https://www.hikunpeng.com/document/detail/zh/kunpengdevps/ug-exagear/usermanual/kunpengexagear_06_0019.html下载工具地址:https://mirrors.huaweicloud.com/kunpeng/archive/ExaGear/ExaGear_2.0.0.1.tar.gz进行安装后,无异常!但执行exagear 命令后提示如下Segmentation fault问题,请各位大神帮忙指点,多谢![root@HAWEI-TAISHAN02 centos-7-x86_64]# exagear /bin/exagear: line 111: 14286 Segmentation fault ${EXAGEAR_WRAPPER} /bin/echo "Starting ${COMMAND} ${ARGS} in the guest image ${IMAGE_DIR}" Failed to start Exagear. Please check that file exists and has executable permission /bin/exagear: line 113: 14305 Segmentation fault /opt/exagear/bin/ubt-wrapper /bin/bash [root@HAWEI-TAISHAN02 centos-7-x86_64]# getconf PAGE_SIZE 4096
-
已完成啦,超棒的欸!
-
落日下,少女遥望远方
-
皮卡丘角色的艺术插图
-
Transformer机器翻译,是指使用计算机将一种自然语言转换为另一种自然语言的过程。这里,自然语言是指日常使用的人类语言(如中文、英语),区别于人工为特定目的创造的语言(如计算机编程语言)。 机器翻译是自然语言处理(NLP)的一个研究分支,是人工智能的终极目标之一,具有重要的科学研究价值。 2017年,谷歌在论文《Attention Is All You Need》中提出了Transformer模型。这种基于自注意力机制的模型能够很好地解决序列模型的问题,比如机器翻译。Transformer应用在机器翻译任务中,不仅提高了翻译的效果,由于其高度并行化的设计,还大幅提高了训练的效率。本案例是《Attention Is All You Need》论文复现的体验案例,数据集为WMT2014 英语-德语数据集 具体算法介绍:cid:link_0注意事项:1.本案例使用框架:PyTorch1.4.02.本案例使用硬件:GPU: 1*NVIDIA-V100NV32(32GB) | CPU: 8 核 64GB3.运行代码方法: 点击本页面顶部菜单栏的三角形运行按钮或按Ctrl+Enter键 运行每个方块中的代码4.JupyterLab的详细用法: 请参考《ModelAtrs JupyterLab使用指导》5.碰到问题的解决办法**:** 请参考《ModelAtrs JupyterLab常见问题解决办法》1.下载代码和数据import moxing as mox mox.file.copy_parallel('obs://obs-aigallery-zc/algorithm/Transformer_translate','./Transformer_translate')INFO:root:Using MoXing-v1.17.3-43fbf97f INFO:root:Using OBS-Python-SDK-3.20.72.模型训练2.1依赖库的加载与安装# -*- coding: utf-8 -*- from __future__ import print_function import os root_path = './Transformer_translate' os.chdir(root_path) os.system('pip install --upgrade numpy') os.system('pip install --ignore-installed PyYAML==5.4.1') os.system('pip install fairseq') os.system('pip install sacremoses') os.system('pip install nltk') os.system('pip install subword-nmt') os.system('pip install tqdm')02.2参数设置import tqdm import argparse parser = argparse.ArgumentParser(description='Training') parser.add_argument('--resume_net', default='no', type=str, help='resume net for retraining') parser.add_argument('--training_dataset', default='./data/data-bin', help='Training dataset directory') parser.add_argument('--save_folder', default='./outputs', help='Location to save checkpoint models') parser.add_argument('--max_tokens', default=4096, type=int) parser.add_argument('--optimizer', default='adam', type=str) parser.add_argument('--weight_decay', default=0.0, type=float) parser.add_argument('--lr', default=0.0007, type=float) parser.add_argument('--clip_norm', default=0, type=float) parser.add_argument('--load_weights', type=str, default='./model/model.pth', metavar='PATH') parser.add_argument('--eval', default='False', type=str, choices=['True', 'False']) parser.add_argument('--restore', default='True', type=str, choices=['True', 'False']) # For evaluation parser.add_argument('--eval_result_path', default='./outputs/eval') args, unknown = parser.parse_known_args() import shutil def get_files_tree(src="src_path"): req_files = [] for r, d, files in os.walk(src): for file in files: src_file = os.path.join(r, file) src_file = src_file.replace('\\', '/') if src_file.endswith('.db'): continue req_files.append(src_file) return req_files def copy_tree_force(src_path="",dest_path=""): """ make sure that all the paths has correct slash characters. """ for cf in get_files_tree(src=src_path): df= cf.replace(src_path, dest_path) if not os.path.exists(os.path.dirname(df)): os.makedirs(os.path.dirname(df)) shutil.copy2(cf, df) train_input_dir = args.training_dataset if not os.path.exists(train_input_dir): os.makedirs(train_input_dir) else: print(train_input_dir, 'already exists') if not os.path.exists(args.eval_result_path): os.makedirs(args.eval_result_path) model_path=args.load_weights # Train command=''' CUDA_VISIBLE_DEVICES=0 fairseq-train '''+ train_input_dir +''' \ --restore-file '''+ model_path +''' \ --save-dir '''+ args.save_folder +''' \ --optimizer '''+ args.optimizer +''' \ --adam-betas '(0.9, 0.98)' \ --clip-norm '''+ str(args.clip_norm) +''' \ --lr-scheduler inverse_sqrt \ --warmup-init-lr 1e-07 \ --warmup-updates 4000 \ --lr '''+ str(args.lr) +''' \ --min-lr 1e-09 \ --criterion label_smoothed_cross_entropy \ --label-smoothing 0.1 \ --weight-decay '''+ str(args.weight_decay) +''' \ --max-tokens '''+ str(args.max_tokens) +''' \ --save-interval-updates 50 \ --max-update 50 \ --keep-interval-updates 20 \ --decoder-attention-heads 16 \ --decoder-embed-dim 1024 \ --decoder-ffn-embed-dim 4096 \ --decoder-layerdrop 0 \ --decoder-layers 6 \ --decoder-output-dim 1024 \ --encoder-attention-heads 16 \ --encoder-embed-dim 1024 \ --encoder-ffn-embed-dim 4096 \ --encoder-layerdrop 0 \ --encoder-layers 6 \ --source-lang en \ --share-decoder-input-output-embed \ --target-lang de \ --optimizer adam \ --optimizer-overrides {} \ --reset-optimizer \ --save-interval 0 \ --keep-last-epochs 1 \ --max-epoch 31 \ --max-source-positions 1024 \ --max-target-positions 1024 \ --max-tokens 3584 \ --min-loss-scale 0.0001 \ --min-lr 1e-09 \ --stop-time-hours 0.1 \ --arch transformer_wmt_en_de '''./data/data-bin already exists2.3开始训练print(command) ret = os.system(command) copy_tree_force('./model', args.save_folder) print('training end')CUDA_VISIBLE_DEVICES=0 fairseq-train ./data/data-bin --restore-file ./model/model.pth --save-dir ./outputs --optimizer adam --adam-betas '(0.9, 0.98)' --clip-norm 0 --lr-scheduler inverse_sqrt --warmup-init-lr 1e-07 --warmup-updates 4000 --lr 0.0007 --min-lr 1e-09 --criterion label_smoothed_cross_entropy --label-smoothing 0.1 --weight-decay 0.0 --max-tokens 4096 --save-interval-updates 50 --max-update 50 --keep-interval-updates 20 --decoder-attention-heads 16 --decoder-embed-dim 1024 --decoder-ffn-embed-dim 4096 --decoder-layerdrop 0 --decoder-layers 6 --decoder-output-dim 1024 --encoder-attention-heads 16 --encoder-embed-dim 1024 --encoder-ffn-embed-dim 4096 --encoder-layerdrop 0 --encoder-layers 6 --source-lang en --share-decoder-input-output-embed --target-lang de --optimizer adam --optimizer-overrides {} --reset-optimizer --save-interval 0 --keep-last-epochs 1 --max-epoch 31 --max-source-positions 1024 --max-target-positions 1024 --max-tokens 3584 --min-loss-scale 0.0001 --min-lr 1e-09 --stop-time-hours 0.1 --arch transformer_wmt_en_de 0 [] training end3.模型测试# -*- coding: utf-8 -*- from tqdm import tqdm from fairseq.models.transformer import TransformerModel from nltk.translate.bleu_score import sentence_bleu import os import torch import numpy as np from PIL import Image from io import BytesIO from collections import OrderedDict import torch.backends.cudnn as cudnn cudnn.benchmark = True class ModelClass(): def __init__(self, model_path): self.model_path = model_path # 本行代码必须保留,且无需修改 self.device = torch.device("cpu") print(self.model_path) path=os.getcwd() self.model= TransformerModel.from_pretrained( model_name_or_path= './', checkpoint_file='outputs/model.pth', data_name_or_path='outputs/newstest2014', bpe='subword_nmt', bpe_codes='outputs/bpecodes' ) self.model.eval() self.model = self.model.to(self.device) print('load model success') def translate(self, data): pre_text = self.model.translate(data) return pre_text 需要翻译的自然语言需要是英语,输出为德语,可自行修改成想要翻译的话text_input = "I am lucky." Translator = ModelClass('./outputs/model.pth') result = Translator.translate(text_input) print(result)INFO:fairseq.file_utils:loading archive file ./ INFO:fairseq.file_utils:loading archive file outputs/newstest2014 ./outputs/model.pth INFO:fairseq.tasks.translation:[en] dictionary: 32768 types INFO:fairseq.tasks.translation:[de] dictionary: 32768 types INFO:fairseq.models.fairseq_model:Namespace(activation_dropout=0.0, activation_fn='relu', adam_betas='(0.9, 0.98)', adam_eps=1e-08, adaptive_input=False, adaptive_softmax_cutoff=None, adaptive_softmax_dropout=0, arch='transformer_wmt_en_de_big', attention_dropout=0.1, batch_size=None, bpe='subword_nmt', bpe_codes='outputs/bpecodes', bpe_separator='@@', clip_norm=0.0, criterion='label_smoothed_cross_entropy', cross_self_attention=False, data='outputs/newstest2014', decoder_attention_heads=16, decoder_embed_dim=1024, decoder_embed_path=None, decoder_ffn_embed_dim=4096, decoder_input_dim=1024, decoder_layerdrop=0, decoder_layers=6, decoder_layers_to_keep=None, decoder_learned_pos=False, decoder_normalize_before=False, decoder_output_dim=1024, device_id=0, distributed_backend='nccl', distributed_init_method='tcp://learnfair0487:59946', distributed_port=59946, distributed_rank=0, distributed_world_size=128, dropout=0.3, encoder_attention_heads=16, encoder_embed_dim=1024, encoder_embed_path=None, encoder_ffn_embed_dim=4096, encoder_layerdrop=0, encoder_layers=6, encoder_layers_to_keep=None, encoder_learned_pos=False, encoder_normalize_before=False, eval_bleu_detok='space', eval_bleu_remove_bpe=None, eval_tokenized_bleu=False, fp16=True, ignore_prefix_size=0, label_smoothing=0.1, layernorm_embedding=False, left_pad_source=True, left_pad_target=False, log_format='json', log_interval=10, lr=[0.001], lr_scheduler='inverse_sqrt', lr_shrink=0.1, max_epoch=0, max_sentences=None, max_sentences_valid=None, max_source_positions=1024, max_target_positions=1024, max_tokens=3584, max_update=300000, min_lr=1e-09, momentum=0.99, no_cross_attention=False, no_epoch_checkpoints=False, no_progress_bar=False, no_save=False, no_scale_embedding=False, no_token_positional_embeddings=False, num_batch_buckets=0, optimizer='adam', quant_noise_pq=0, quant_noise_pq_block_size=8, quant_noise_scalar=0, relu_dropout=0.0, restore_file='checkpoint_last.pt', sample_without_replacement=256000, save_dir='/checkpoint02/myleott/2018-05-18/paracrawl_en_de.fp16.maxupd300000.upsamplewmt31.samp_wo_repl256000.transformer_wmt_en_de_big.shareemb.adam.beta0.9,0.98.initlr1e-07.warmup4000.lr0.001.clip0.0.drop0.3.wd0.0.ls0.1.maxtok3584.seed2.ngpu128', save_interval=1, secondary_train_data='/private/home/myleott/data/paracrawl/en-de/paracrawl-release1.en-de.no_url.shuf_uniq_norm.scored.filtered.preprocessed', seed=2, sentence_avg=False, share_all_embeddings=True, share_decoder_input_output_embed=True, skip_invalid_size_inputs_valid_test=False, source_lang='en', target_lang='de', task='translation', tie_adaptive_weights=False, train_subset='train', truncate_source=False, update_freq=[1.0], upsample_primary=31, use_old_adam=False, valid_subset='valid', validate_interval=1, warmup_init_lr=1e-07, warmup_updates=4000, weight_decay=0.0) load model success Ich bin Glück .
-
机器翻译有没有术语定制或者术语库的功能?在api文档和控制台都没找到。
-
时空数据挖掘的目的是在大的空间和时空数据中发现有趣的、有用的但非平凡的模式。应用于公共安全、生态学、流行病学、地球科学等领域。这个问题是具有挑战性的,因为虚假模式的高社会成本和过高的计算成本。近年来的时空数据挖掘研究因其快速增长而需要更新。此外,他们没有充分研究时空数据挖掘的并行技术。本文介绍了时空数据挖掘方法的最新进展。其次,对时空数据挖掘的并行计算方法进行了详细的综述;时空数据挖掘是在大规模的时空数据中发现新的、非平凡的但潜在有用的模式的过程。时空(ST)数据包括地理参考的气候变量、流行病爆发、犯罪事件、社交媒体、交通、交通动态等。由于其跨学科性质,分析和挖掘这些数据对于推进许多科学问题和现实世界应用的最先进技术是非常重要的。因此ST数据在公共安全、生态学、流行病学等多个领域的应用尤为突出。图1展示了时空数据挖掘的整体过程。输入数据经过预处理去除噪声、误差等后进行时空分析,了解其时空分布。采用合适的时空数据挖掘算法产生输出模式,然后由领域专家进行研究和验证,发现新的见解,并相应地改进数据挖掘算法。图2显示了时空(ST)模式的一个示例。该图描述了一个城市犯罪数据集输出的级联时空模式[45],涉及几种事件类型(酒吧倒闭、醉驾、袭击)。图2(a) -2 (c)显示了每个事件类型的实例及其时间和位置,图2(e)显示了相同的事件实例。检测到的ST模式提出了一个有趣的假设,即酒吧在关闭时是附近地区醉酒驾驶和攻击犯罪的潜在发生期。这些信息可以帮助执法机构、公共安全组织和决策者确定适当的减轻犯罪行动。通过算法挖掘时空数据带来了独特的计算挑战。例如,由于数据量大,由于数据的多样性,用户可能会经历不可接受的运行时间或花费大量的精力进行预处理。除了数量和种类,相对于吸收容量的高数据速度是另一个计算挑战,用户经常体验到数据丢失。例如,数百万条推文的实时处理涉及到对某些信息的实时预处理和挖掘。COVID 19安全数据[1]通过全国各地的附近信息(如poi、企业类别)每分钟记录人类流动情况。这涉及到信息的实时更新,例如对不同POI的访问数量,导致大量的数据量(tb),这是不可能在本地机器上存储和处理的。此外,US Census[2]包括保存在不同表和模式中的数百万条记录,跨越TB级的数据空间.查询这样的数据可能非常耗时,而且在科学或地理计算平台上,进一步应用算法在大规模计算时的性能通常很差。这样的计算需要一个可扩展和可靠的软件生态系统来解决广泛的研究问题,并有效地帮助社会的决策者。因此,重要的是要让广大的科学家和用户了解高性能、可扩展和开源的软件工具,这些工具可以通过并行计算促进时空数据分析,从而显著推进领域研究。然而,这些工作在最近的空间和时空数据挖掘研究中却很少受到重视。在这里,我们提供了一个全面的时空数据挖掘技术,并简要描述了它们的统计基础和主要输出模式家族(例如,异常值,预测,热点等)。我们还提供了在顺序处理和并行处理环境中被广泛研究的最近方法的最新文献。与Shekhar等人[62]类似,本次调研首先回顾了以往的综述,然后陈述了我们对本次综述的贡献(第2节)。第3节提供了与空间和时空数据相关的关键术语,描述了它们的统计基础,并简要陈述了时空数据挖掘中并行处理的社会重要性。第4节描述了六个主要的输出模式家族(即时空异常值、遥耦、预测、划分和总结、热点和变化检测)以及它们各自在顺序和并行框架下的检测方法。第5节将讨论一些当前的研究工具,包括最先进的并行工具、框架和库,它们正在许多应用程序中使用。第六部分总结了本章的研究现状和未来的研究方向。
-
简介在上一篇【MindSpore易点通】Transformer的注意力机制帖子中,跟大家分享了注意力机制的结构和原理。基于上篇内容,本次再和大家一起解锁下Transformer中的Encoder和Decoder以及Softmax部分。Encoder结构图中红框内就是Transformer的Encoder block结构,从下到上是由Multi-Head Attention-->Add & Norm-->Feed Forward-->Add & Norm组成的。因为Multi-Head Attention部分比较复杂,所以单独有分享:【MindSpore易点通】Transformer的注意力机制,了解了Multi-Head Attention的结构和计算过程,现在重点解析下Add & Norm和Feed Forward部分。Add & Norm:Add & Norm层由有两个输入的路径,一个是经过了Multi-Head Attention处理,一个是直接输入。并且Add和Norm两部分组成,其结构和计算公式如下:Add的计算:X+MultiHeadAttention(X)。这是一种残差结构,对于网络层数较多的常用此结构,可以让网络只关注当前差异的部分,我们所熟悉的ResNet网络中就包含这种结构:Norm指Layer Normalization,通常用于RNN结构,Layer Normalization会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。Feed Forward层比较简单,是一个两层的全连接层,第一层的激活函数为Relu,第二层不使用激活函数,对应的公式如下通过以上几层计算就可以构造出一个Encoder block,Encoder block接收输入矩阵X(n*d),并输出一个矩阵O(n*d)。通过多个 Encoder block 叠加就可以组成 Encoder。第一个 Encoder block 的输入为句子单词的表示向量矩阵,后续 Encoder block 的输入是前一个Encoder block的输出,最后一个Encoder block输出的矩阵就是编码信息矩阵C,这一矩阵后续会用到Decoder中。Decoder结构图中蓝框部分为Transformer的Decoder block结构,包含两个Multi-Head Attention层。第一个Multi-Head Attention层采用了Masked操作。第二个Multi-Head Attention层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算。最后有一个 Softmax 层计算下一个翻译单词的概率。第一层Multi-Head Attention:Decoder block的第一个Multi-Head Attention采用了Masked操作,因为在翻译的过程中是顺序翻译的,即翻译完第i个单词,才可以翻译第i+1个单词。通过Masked操作可以防止第i个单词知道i+1个单词之后的信息。Masked计算:是Decoder的输入矩阵和Mask矩阵,输入矩阵包含词的表示向量,Mask是一个n×n的矩阵。下图就是计算过程首先得到输入X矩阵,通过输入矩阵X计算得到Q,K,V矩阵,计算得出Q矩阵与K转置矩阵的乘积。在得到乘积之后需要进行Softmax,计算注意力分数,因为在翻译的过程中是顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。通过 Masked 操作可以防止第 i 个单词知道 i+1 个单词之后的信息。所以在Softmax之前需要使用Mask矩阵遮挡住每一个单词之后的信息。然后与矩阵V相乘,得出输出Z,这样第m个单词的输出向量Zm只包含单词m的信息。根据上述的计算过程得到一个Mask Self-Attention的输出矩阵,然后通过Multi-Head Attention拼接多个输出,得到第一个Multi-Head Attention的输出Z,Z与输入X维度一样。第二层Multi-Head Attention与第一层的区别在于其中Self-Attention的K, V矩阵不是使用上一个Decoder block的输出计算的,而是使用Encoder的编码信息矩阵计算的。这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息。Softmax预测在图中的绿色框中是最终的预测输出,按照矩阵行的顺序进行预测,预测完成,输出最终的翻译结果。总结本篇分享中将Transformer分成了Encoder、Decoder和Softmax三个部分进行了分析。Transformer注意力机制和残差结构的设计,在NLP领域中是将任意两个单词的距离是1,对解决NLP中棘手的长期依赖问题是非常有效,从而也有效提高模型性能。
推荐直播
-
华为开发者空间玩转DeepSeek
2025/03/13 周四 19:00-20:30
马欣 山东商业职业技术学院云计算专业讲师,山东大学、山东建筑大学等多所本科学校学生校外指导老师
同学们,想知道如何利用华为开发者空间部署自己的DeepSeek模型吗?想了解如何用DeepSeek在云主机上探索好玩的应用吗?想探讨如何利用DeepSeek在自己的专有云主机上辅助编程吗?让我们来一场云和AI的盛宴。
即将直播 -
华为云Metastudio×DeepSeek与RAG检索优化分享
2025/03/14 周五 16:00-17:30
大海 华为云学堂技术讲师 Cocl 华为云学堂技术讲师
本次直播将带来DeepSeek数字人解决方案,以及如何使用Embedding与Rerank实现检索优化实践,为开发者与企业提供参考,助力场景落地。
去报名
热门标签