《微信图片翻译技术优化之路.docx》由会员分享,可在线阅读,更多相关《微信图片翻译技术优化之路.docx(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微信图片翻译技术优化之路poetniu腾讯WXG应用研究员微信WeChat作为12亿用户沟通的平台覆盖全球各个地区、不同语言的用户而微信翻译作为桥梁为用户间的跨语言信息沟通提供了便利。目前微信翻译每天为千万用户提供数亿次的翻译效劳且团队技术持续钻研累计发表数十篇顶会论文、夺得多项WMT冠军。随着翻译质量的提升微信翻译的应用形态从文本逐步扩展到图片、语音、网页、文档、视频等诸多场景。本文以微信图片翻译为例介绍近一年度的技术优化。文章术语ViTVisionTransformerNLP自然语言处理段落指图片中语义完好且位置独立的文本区域CNN卷积神经网络NMT神经网络机器翻译ImageInpaint
2、ing图片修复GANGenerativeAdversarialNetworks、生成式对抗网络1.微信图片翻译1.0首先扼要介绍微信图片翻译1.0版本的技术方案重点梳理其中的关键问题。1.0版本中微信图片翻译采用相对简单的方案主要分为两个模块后台Server负责图片的文字识别、段落合并、段落翻译等客户端根据文字识别以及翻译结果渲染生成翻译图片。整体pipeline如下列图所示首先通过一批图片例子来看1.0版本的效果这里我们比照竞品如有道、搜狗等图片翻译如下列图所示原图微信图片翻译1.0有道搜狗通过上述例子对于图片翻译中间的关键步骤进展简单比照得到如下结果因此整体上来看1.0版本的图片翻译效果体
3、验还有很大的提升空间其关键模块的效果都需要进展较大的优化十分是文本段落、图文渲染最直接影响用户体验的模块。2.微信图片翻译2.0基于上述1.0版本存在的主要问题在2.0版本我们重点优化了以下前、后处理模块增加图片语种识别模块判断图片的语种分布。增加图片段落框检测模块检测图片中的段落框用于根底段落拆分。增加文本段落矫正模块判断文本是否需要合并或拆分为新的段落。增加图文合成渲染模块在Server端直接进展图片以及译文的合成。于是整体微信图片翻译2.0版本的pipeline如下主要模块关系如下列图所示2.1图片语种识别图片语种识别是给定一张图片判断其中是否包含文字进一步判断图片中文字所属的语种即Im
4、ageScriptIdentification。传统的图片分类技术主要是基于CNN构造受益于其自身的inductivebiases模型先验假设如translationequivariance即转换等变性通过kernel参数分享实现locality即部分性、通过卷积操作实现在各个图片分类数据集获得领先的结果。而近年度来随着Transformer构造在NLP领域获得打破的进展诸如NMT、BERT、GPT等模型在机器翻译、文本分类、文本生成等任务得到广泛的应用。CV领域研究者也尝试将Transformer构造引入到图像任务中十分是今年度谷歌提出统一的VisionTransformerViT模型1在大
5、规模数据集的训练下尽管缺少相应的inductivebiases但是照旧超越CNN的效果。也由此引起一股ViT的研究热潮比方Facebook随即提出DeiT2、微软提出BEIT3、SwinTransformer4、清华提出DynamicViT5等这些工作根本都是在原始ViT的根底上优化预训练策略、模型构造层次化、动态化等来提升效果。因此这里图片语种识别的方案也是基于ViT并且在ViT根底之上做了模型构造层面的加速优化提出ShrinkViT。2.1.1ViT原始ViT构造如下列图源自1这里扼要介绍ViT的forward经过将原始图片切分为固定大小如16*16*3的patches。对于每一个patc
6、h进展Conv转换输出representation作为patchtokenembedding。之后的操作类似于NLP中Transformer对于QKV的操作线性映射positionembedding。Patches序列头部增加分类clstoken之后对clstokenpatchsequence进展多层Transformerblock操作Multi-Head-Self-Attention。拿到clstoken的finalrepresentation作为图片的表示经MLPsoftmax分类。我们基于开源的预训练ViT模型7在图片语种分类数据集进展finetune相比从0开场训练效果更好头部语种F1
7、-score可以到达90%以上并且训练可以快速收敛。2.1.2ShrinkViT可以看到ViT需要对原始图片每一层的patchtokensequence进展self-attention计算量是平方复杂度线上耗时压力较大。而对于图片语种识别任务来讲我们只需要关注图片中有文字的patch即可如下列图例子中红色圈对应区域。因此很自然的想法是在训练经过中动态控制patchtokens的长度将非文字的patch过滤掉不介入后续的计算。工作5也是基于此策略来优化提出了DynamicViT但是论文中的方法需要显式过滤的patch采用了离散的操作导致了训练梯度无法传递的问题同时论文中基于传统CNN大模型作为T
8、eacher模型来蒸馏学习ViTStudent模型较为复杂不易复现。这里借鉴CNN中Conv操作考虑图片部分特性以及参数分享带来的转换等变性我们考虑结合Conv操作到ViT中来提取highlevelpatchrepresentations同时在Conv经过中可以通过kernelsize控制生成patch的数量在保证信息不丧失的同时到达缩减patchtokens数量的目的我们命名为ShrinkViT。ShrinkViT比照ViT的模型构造如下列图所示这里我们在原始Transformerblock结果之后增加ShrinkBlock可以通过Conv1d实现可以以通过MLP实现如下列图所示实际当中考虑
9、模型的效果不一定每一层都需要加ShrinkBlock根底的ViTdepth12以下结果是我们在3、6、9层分别参加ShrinkBlock的离线实验结果注ViT采用base构造patch_size16,embed_dim768,depth12,num_heads12。从以上结果可以看到引入ShrinkBlock在保证模型效果的同时模型参数仅少量增加3MB但是计算量减小到原来的一半49GFLOPs-24GFLOPs耗时也相对减少14ms-8ms。优化之后的ShrinkViT目前已部署上线GPU效劳耗时减少30ms。2.2图片段落框检测目前OCR的结果是在行粒度进展文字检测以及识别假如直接利用行粒度
10、的识别结果做下游的翻译任务出现的问题是单个行的文本信息不完好导致翻译结果信息缺失、难以理解。假如全部文本整体调用翻译的话一方面文本内容过长可能导致翻译超时or翻译结果中错误累计等问题另一方面翻译之后的结果无法很好的拆分保持跟原文的一一对应关系最终展示排版结果较差。因此在OCR之后基于段落粒度来进展结果合并以及下游翻译、图文合成等任务。这里段落主要是定义为文本内容完好且位置独立的文本区域。如下列图绿色框表示两张图分别包含了4个以及3个文本段落2.2.1图片文档分析图片的段落框检测可以属于图片文档分析DocumentImageAnalysisDIA包括如图片文档分类、文档版面分析、表格检测等中的任
11、务之一近年度来业界相关的工作有LayoutParser11、LayoutLM13,15、LayoutLM212,13等。LayoutParser是基于FacebookMeta目的检测框架Detectron214搭建的图片文档版面分析工具基于开源数据集提供局部预训练模型。但是主要问题是开源的数据集以及模型基于单一场景数据如表格、学术论文、新闻报纸构造等而且多数框是基于4点坐标不能知足实际复杂业务场景。LayoutLM以及LayoutLM2等是Microsoft提出结合图片以及文本的图片文档版面分析预训练模型参考BERT以及Transformer如下列图图片分别来自15、12所示LayoutLM、
12、LayoutLM2等第一步需要提取tokenlevel的文本以及对应boundingbox信息数据预处理代价较大。2.2.2DBNet段落框检测综上这里我们借鉴LayoutParser11的方法来做段落level的文本框检测。考虑到段落框可能是任意形状多边形这里采用基于分割segmentation-based的DBNet9主体构造如下列图源自9所示直接利用DBNet训练段落框的检测模型相比文本行的检测实验中我们发现有以下的问题文本行一般是规那么四边形4点坐标即可表示而段落框更多是不规那么多边形、需要任意多点坐标才可以完好表示。在probabilitymap训练中文本行标注数据中框中的像素点作为
13、正例样本但是段落框中存在背景像素点如段落中文本行之间的空白区域、段落标注中的噪音区域等导致训练效果不佳。检测任务中一般对于文本框区域进展一定比例的向内收缩如DBNet中shrinkratio设置主要是解决相邻文本行比拟相近的问题收缩之后的预测结果可以更好的分割相邻行对于检测结果再进展反比例的扩展。而段落框本身以及段落框之间的间隔相对文本框大很多因此shrink的影响对于段落框较大。基于分割的检测模型通常都需要后处理逻辑选择最终的结果原始DBNet的后处理逻辑对于复杂多边形的情况在多边形近似以及候选打分处理经过存在误差导致生成的段落框不够准确。文本行基于单行数据不需要考虑行的图像属性比方字体风格
14、行的高度等。但是对于段落框不同风格的段落往往属于不同的段落如标题以及正文。因此这里在DBNet的根底之上我们在训练样本label、模型参数、模型构造Loss、后处理逻辑等方面进展了相应的优化段落框的训练标注数据label采用多点坐标并且标注坐标尽量贴合原始文本区域防止引入更多的背景像素。训练经过中段落框shrinkratio调高到0.9使得预测probabilitymap尽量贴合原有文本区域大小减少shrink的影响。在调大shrinkratio的同时需要加大thresholdmap即段落框边界loss的权重使得模型更好的分割段落。优化DBNet后处理逻辑参加图片腐蚀操作并且动态调节多边形近似
15、参数保证预测段落框的轮廓更加准确。在原有probablilitymap以及thresholdmap的根底之上预测段落中行间分割map用于后处理中别离不同风格行高的段落框。整体上在引入上述12345的优化实验中段落框的检测效果h-mean值效果提升显著到达预期可用的结果。优化前后的段落框检测结果比照样例如下列图原始DBNet优化后DBNet结果2.3文本段落矫正上述段落结果主要是基于视觉信息图像层面来做段落的检测但是在实际case存在一定的情况需要从文本的角度做进一步的段落检测。如下场景视觉上不属于同一段落但是从文本语义角度判断属于同一个段落如下列图中上半局部两块文字区域。视觉上属于同一个段落但
16、是从文本角度判断应该拆分为不同的段落更好如下列图中选择题局部对于序号1.2.3.或a.b.c.起始的段落需要保持原有的段落顺序因此拆分为不同的段落更加合理。另外在视觉模型效果存在误差的情况下基于文本的段落模型可以提供额外的参考。因此这里我们构建了基于文本语义层面的段落检测模型对段落结果进展一定程度的矫正。文本段落检测即判断给定的两个文本片段非完好句子是否应该拼接组成一个段落。相关的方法主要有以下LanguageModel计算两个文本的语言模型打分问题是需要人工设定阈值规那么不够通用。SentenceOrdering建模两个句子的顺序默认是完好的句子预测不同的连接词场景不合适。SentenceG
17、eneration重新生成新的文本段落seq2seq生成模型往往引入新的生成错误且速度较慢。上述相关的方法一定程度都不适应于文本段落任务因此我们直接通过文本分类任务来判断两个文本span是否属于一个段落。2.3.1BERT文本段落分类得益于开源大规模预训练模型如BERT9在各类NLP任务中获得SOTA的效果因此这里我们基于开源BERT10finetune搭建文本段落分类模型。对于两个任意文本spanw11w12w13w1n、w21w22w23w2m将其拼接为CLSw11w12w13w1nSEPw21w22w23w2mSEP作为原始输入。如下例子 CLSsectorfollowSEPtheind
18、ustrySEP CLSseveralmembersrepresenttheirishnationalSEPindia,aboardtheSEP之后进展BERTEncoder在输出层拿到CLStokenrepresentation与outputweights矩阵计算之后计算Softmax得到各个label的概率分布。整体构造如下列图训练数据方面我们基于开源大规模wiki单语语料数据构造大批量的伪数据作为BERT分类器初始训练数据之后在有限的标注数据进展finetune。整体分类Accuray在90%以上。有了基于BERT的文本段落模型之后在原始段落的根底上我们对其进展矫正,根底的矫正策略如下判
19、断同一个文本框相邻文本是否不属于同一个段落假设是那么进展段落拆分。判断不同相邻文本框相邻文本是否属于同一个段落假设是那么进展段落合并。整体上增加文本段落模型之后我们对于图片翻译整体效果进展了端到端的GSB评估相比没有文本段落模型的结果如下随机采样100张图片人工评估如下例子原图图片段落结果增加BERT段落矫正模型其中第一张图片中BERT段落矫正模型可以将原属于同一图片段落的文本“In-StorePickupSep24以及“iPhone13ProMax拆分为独立的两个段落。第二张图片中可以将原属于不同段落的相邻文本“theinformationcontainedinyourCAS以及“STATE
20、MENTbelowwhenmakingyourstudent合并为同一个段落因此整体上翻译效果以及排版更好。从GSB的结果看出文本段落模型对于图片文本段落框划分和最终的图片翻译质量有明显的提升。另外我们也尝试了其他模型构造如BERT双塔构造分别建模两个textspan、BERT建模text对应boundingbox信息相比基于textpairs拼接的BERT模型有一定的提升。不过因为模型构造的复杂带来额外的计算耗时上线还需优化。2.4段落翻译接下来需要对应每一个段落翻译为目的语言的文本这里段落之间是并行调用翻译效劳。但是在实际场景中可能某一些段落较长比方超过1024个tokens一方面可能导致
21、翻译超时、另一方面由于翻译模型采用NMTseq-to-seq构造文本越长错误累计越严重等问题。因此这里我们在恳求翻译效劳时对于过长的段落文本进展拆分为多个子句进展翻译翻译之后再将结果进展合并。2.5图文合成渲染图片翻译的最后一步那么是将翻译完成的文本段落贴回原图所在区域即图文合成经过。但是在合成经过中需要知足如下要求翻译文本与原文保持图片区域一致即位置关系对应。翻译文本与原文风格排版保持一致如字体大小、文字颜色、背风光等属性。合成图片排版明晰、翻译结果可读等。从文章最开场微信图片翻译1.0版本的badcase可以发现图文合成的结果对于最终的图片翻译体验尤为重要。与正常图文合成不同这里第一步需要
22、擦除原图文字内容、保存原图的背景之后将翻译文字贴回原图位置而且文字明晰可浏览。2.5.1ImageInpainting从图片中擦除文字内容且保存背景可以作为一种图片修复ImageInpainting16任务首先对于图片中的文字区域进展mask选定之后对于图片中的缺失内容mask区域进展重构恢复原有背景。常用的ImageInpainting方法主要是生成式模型如GAN、VAE、Flow-basedmodels、Diffusionmodels17,18。GAN的效果以及应用最广泛主要挑战是比拟难训练VAE以及Flows在特定领域效果不错但是质量以及广泛性不如GANDiffusionmodels最近
23、得到比拟多的关注在语音合成speechsynthesis方面接近人类的程度。另外在局部图片生成、超分辨率任务中超越GANs18。这几类生成模型比照如下列图源自17这里我们首先尝试主流基于GAN19,20的方法基于文本框以及文字轮廓分别标记文字mask区域之后根据Generator网络重构生成mask区域例子如下原图Mask图片重构图norm为512*512之后结果可以看到上表第一行基于boundingbox的mask图片对于大范围单一背景如蓝色背景区域GAN的重构效果可以承受但是对于复杂背景如红色背景白色字、底部混合背景颜色排列的重构效果比拟差多种背风光混合。第二行基于文字mask的结果生成式
24、的ImageInpainting方法重构的区域照旧存在原文字轮廓模糊噪音、不够平滑。在图片翻译场景十分是要求背景以及文字比照明晰的情况下目前的模型效果不太适用。以下简单列举通用生成式Imageinpainting方法不适用于本任务的原因图片翻译中待修复的背风光偏向单一色如上图蓝色、红色、白色与字体颜色比照鲜明。而传统imageinpainting背景目的复杂多样。图片翻译中待修复的背景偏向按行按列规那么分布。而传统imageinpainting任意形状分布。图片翻译的结果同样要求背风光保持单一与译文字体颜色比照鲜明。而传统imageinpainting无此要求。GAN等生成式模型在图片修复中C
25、onv操作会引入上下不同的行/列的信息因此导致按行按列分布的背景引入周边行列的噪音数据。而且end2end模型不方便动态调整另外假如考虑重新训练模型数据资源目前比拟缺失。2.5.2基于OpenCV的图文合成结合目前的实际情况对于图片合成文字经过考虑到基于OpenCV来实现第一版效果拆分为多个步骤可以灵敏调整结果。主要步骤如下表处理逻辑结果图片展示预处理1.原始图片norm擦除图片中文字2.裁剪文字区域子图3.聚类获取文字以及背景颜色4.根据周边颜色不同设置文字mask5.根据子图以及mask进展inpaint6.高斯模糊优化7.聚类获取主背风光占比8.假如是单一背风光那么修复为主背景颜色翻译文
26、字贴回原图9.获取段落文字颜色10.根据重构图聚类获取段落主背风光11.根据原图聚类获得跟背风光差异最大的颜色作为段落文字颜色12.创立段落子图13.创立透明背景或主背风光空图14.加载字体资源15.自适应字体大小16.按行Draw文字2.6结果评估体验微信图片翻译2.0版本主要优化目前已上线同样以文章开始图片为例展示2.0版本的效果比照如下表所示原图微信图片翻译2.0有道搜狗从以上结果可以看看到相比1.0版本微信图片翻译2.0版本在文本段落识别、翻译质量以及图文合成排版等多方面的体验得到了较大的提升。同时对于微信图片翻译2.0以及1.0版本人工评估GSB2.0版本提升显著结果如下图片翻译2.
27、0版本已上线到微信iOS客户端体验方式微信聊天框点击图片选择翻译、扫一扫图片翻译等入口如下列图另外对于新2.0版本图片翻译与旧1.0版本进展了线上真实用户的ABTest2.0版本相比1.0版本单个用户平均图片翻译文本句段增加21%。数据反响出随着新幅员片翻译各方面质量的提升用户的翻译行为也变的更加活泼。后续2.0版本将灰度到全量微信誉户。3.总结本文主要是整理了微信图片翻译2.0版本近一年度的各项优化从1.0版本的问题出发结合业务实际情况以及前沿研究方向诸如将ViT应用到图片语种识别加速优化、基于分割的DBNet应用到段落框检测优化、基于pretrainedBERT应用到文本段落分类优化基于O
28、penCV在后端实现图文合成渲染等。而且新版本上线之后用户的翻译行为得到明显提升。将来微信翻译将继续优化提供更好的翻译效劳。4.参考文献ViTANIMAGEISWORTH16X16WORDS:TRANSFORMERSFORIMAGERECOGNITIONATSCALEDEITTrainingdata-efficientimagetransformersdistillationthroughattentionBEIT:BERTPre-TrainingofImageTransformersSwinTransformer:HierarchicalVisionTransformerusingShift
29、edWindowsDynamicViT:EfficientVisionTransformerswithDynamicTokenSparsificationAttentionisallyouneeds:/github/facebookresearch/deitDBNetReal-timeSceneTextDetectionwithDifferentiableBinarizationBERT:Pre-trainingofDeepBidirectionalTransformersforLanguageUnderstanding开源BERTs:/github/google-research/bertL
30、ayoutParser:AUnifiedToolkitforDeepLearningBasedDocumentImageAnalysisLAYOUTLMV2:MULTI-MODALPRE-TRAININGFORVISUALLY-RICHDOCUMENTUNDERSTANDINGs:/github/microsoft/unilms:/github/facebookresearch/detectron2LayoutLM:Pre-trainingofTextandLayoutforDocumentImageUnderstandings:/paperswithcode/task/image-inpaintings:/lilianweng.github.io/lil-log/2021/07/11/diffusion-models.htmlPalette:Image-to-ImageDiffusionModelsGenerativeImageInpaintingwithContextualAttentions:/github/JiahuiYu/generative_inpainting最近热文C智能指针最正确理论源码分析