【论文阅读】Paraformer工业级非自回归端到端语音识别模型

这篇具有很好参考价值的文章主要介绍了【论文阅读】Paraformer工业级非自回归端到端语音识别模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


论文下载

摘要

目前ASR常用的Transformer模型虽然效果比较好,但是因为引入了自回归的解码器,所以计算相对效率低一些。为了加速推理,设计了非自回归模型并行生成识别结果,比如单步自回归模型。然而由于输出标签之间的独立性假设,单步自回归模型的效果相比自回归模型会差一些。对于提升单步非自回归模型来讲一共有两个挑战:第一个挑战是准确地预测输出标签的个数并提取隐变量;第二个挑战是增强输出标签间的非独立性建模。 为了解决上述两个挑战,作者提出了一个快速准确的并行transformer模型,标记为Paraformer。该模型属于单步非自回归模型。
1. Paraformer使用基于CIF的predictor预测输出标签的个数并产生隐变量;(借鉴文献【18】)
2. GLM sampler用于产生语义向量增强非自回归模型对上下文的建模能力;(借鉴文献【19】)
3. 最后作者设计了一个策略产生负例,并用MWER损失训练使模型的识别能力进一步提升。(借鉴文献【20】)

在公开的AISHELL-1、AISHELL-2和工业级2w小时任务上的实验结果显示,Paraformer可以获得和当前最优自回归模型相当的识别效果,但是可以提速10倍+。

介绍

端到端语音识别效果已经超过了传统的层级系统。主要有三种流行的E2E架构:CTC、RNN-T、AED。其中AED在序列到序列建模中具有统治性地位,因为其识别准确率高,比如transformers和conformers。虽然语音识别效果好,但是自回归模型比如AED模型需要一个一个地生成识别标签。因此,解码器的计算比较低效,随着输出序列的长度增加解码耗时线性增加。为了提升效率加速推理,许多研究【文献6~8】提出了非自回归模型并行输出识别结果。

基于推理时需要的迭代次数,非自回归模型可以分为单步式非自回归模型和迭代式非自回归模型。A-FMLM【文献9】是单步自回归模型的最早尝试,根据未被遮蔽的标签去预测遮蔽的标签。识别性能受到需要预测目标序列长度的影响。为了解决这个问题,MASK-CTC和其变种提出使用CTC的解码结果增强解码的输入【文献10-12】。最近,出现了单步非自回归模型用来解决上述的限制【文献13-17】。这些模型通过去掉时间依赖同时生成输出序列。 虽然单步非自回归模型可以显著提升推理速度,但是他们的识别性能相比自回归模型差一些,尤其是在大规模数据集上。

前面提到的单步非自回归模型主要关注如何预测输出标签的个数和准确提取隐变量。和机器翻译通过predictor预测输出标签个数相比,ASR预测输出标签个数确实比较难,因为有很多的潜在影响因素,比如说话人的语速、静音、噪音。另一方面,经过作者的观察和分析,单步非自回归模型相比自回归模型具有更多的替换错误,如下图1。作者认为缺少上下文依赖信息导致预测标签个数准确率差不多,但替换错误上升明显(AR和vanilla NAR比较),尤其是单步自回归模型的条件独立假设。另外,所有的非自回归模型都是在学术基准阅读音频上实验的,并没有验证这些模型在工业基准数据上的效果。这篇论文的目标是提升单步非自回归模型的识别效果,使其达到和自回归模型相同的水准,并在大规模工业级数据上验证。

【论文阅读】Paraformer工业级非自回归端到端语音识别模型
文章提出了一个又快又准的并行transformer模型,可以克服上面提到的两个挑战。首先,不像前面的基于CTC的工作,作者提出了使用基于CIF的predictor网络评估目标长度并产生隐变量。对于第二个挑战,作者设计了基于GLM的sampler模块增强非自回归解码器对输出上下文的建模能力。这个工作受到了机器翻译工作的启发。作者另外设计了一个包含负例的策略,利用MWER损失指导模型学习提升模型性能。

实验结果
AISHELL1 178h 5.2%
AISHELL2 1000h 6.19%

超过其它的非自回归模型方法,接近自回归模型效果。没有使用语音模型/无监督预训练。
Paraformer是第一个在性能上可以和自回归模型媲美,并且在大规模数据集上相比自回归模型有10倍+的推理速度提升。

方法

整体框架

【论文阅读】Paraformer工业级非自回归端到端语音识别模型
如上图所示,整个框架包含五个模块:encoder、 predictor、sampler、decoder、loss function。其中Encoder和自回归模型的Encoder一样,本文使用SAN-M和FFN(【文献21】),也可以使用conformer等结构。Predictor用于生成声学特征指导解码。Sampler模块使用声学特征和标签特征生成语义特征。Decoder和自回归解码器相同,只不过这里是双向解码器。解码器包含多个SAN-M、FNN和cross MHA模块。除了CE loss,还会使用MAE loss训练predictor,MWER损失也一起参与模型训练。
整个流程阐述:
输入音频为X,长度为T;音频对应的文本标签为Y,长度为N。Encoder的输入为X,输出为H。Predictor的输入为H,输出为预测的输出标签长度N’并生成声学向量Ea。第一轮解码Decoder的输入为H和Ea,输出为Y’。图中红色虚线Pass1标记部分表示输入Ea,但是并不对这个输入进行反向传播学习。第二轮解码前会首先经过Sampler模块。Sampler模块在声学向量Ea和输出标签向量Ec之间进行采样得到语义向量Es。其中Char指的是标签Y。采样过程依赖Y和Y’之间的距离。第二轮解码Decoder的输入为H和Es,输出为Y’‘,这次进行反向传播学习。此次反向传播学习指导decoder学习上下文语音信息,同时也会指导predictor和encoder的学习。Sampler使用Y’进行距离计算不会进行反向传播学习。最后输出的Y’'会被采样为MWER训练生成负例候选。使用N和N’计算MAE。MWER、MAE和CE loss一起作为loss进行训练。
**推理时,sampler模块是不激活的,并且双向并行解码器只使用声学向量Ea和隐向量H通过一轮输出最终的预测结果。**尽管decoder在每次训练时会前向推理两次,但是因为在推理时只进行了一次所以并不会使计算复杂度变大。

Predictor

Predictor由两个卷基层组成,输出的float weight α \alpha α在0~1之间。作者通过累计此权重预测输出标签的长度。MAEloss定义为:
【论文阅读】Paraformer工业级非自回归端到端语音识别模型
其实就是将所有 α \alpha α进行了累加,加起来的长度就是预测的长度。LOSS就是真实长度和预测长度差的绝对值。作者引入了CIF机制产生声学向量。CIF是一个软的(非0/1,可以是小数)和单一对齐的,在AED模型中作为流式解决方案的实现【文献18】。声学向量的生成时,CIF对权重 α \alpha α进行累计,如果超过了设定的阈值 β \beta β,说明某一个声学向量的边界确定了。对边界之内的向量H根据权重 α \alpha α进行缩放累计即可得到某一个声学向量。此过程重复直到结尾,可得到所有的声学向量。如下图所示:
【论文阅读】Paraformer工业级非自回归端到端语音识别模型
在训练时权重 α \alpha α会根据N进行缩放(比如累计的 α \alpha α为N’,使用N/N’对所有的 α \alpha α进行缩放,使用缩放后的 α \alpha α计算声学向量Ea。缩放是为了让的Ea维度和Ec的维度保持一致),但是在推理时无法进行缩放,导致训练和推理之间存在不一致。为了弥补这个不一致,作者提出了使用动态阈值 β \beta β而不是固定阈值。计算公式如下:

【论文阅读】Paraformer工业级非自回归端到端语音识别模型
下面是一个向上取整,所以分子小于等于分母,阈值 β < = 1 \beta<=1 β<=1

Sampler

在普通的单步非自回归模型中,优化的目标为: L N A T = ∑ n = 1 N l o g P ( y n ∣ X ; θ ) \mathcal{L}_{NAT}=\sum_{n=1}^{N}logP(y_n|X;\theta) LNAT=n=1NlogP(ynX;θ)然而,正如上面所说的,单步非自回归模型中的输出标签独立性假设导致模型识别效果不如自回归模型。GLM模块的loss定义如下:
L G L M = ∑ y ′ ′ ∈ G L M ( Y , Y ′ ) ˉ l o g   p [ y n ′ ′ ∣ G L M ( Y , Y ′ ) , X ; θ ] \mathcal{L}_{GLM}=\sum_{y''\in \bar{\mathbb{GLM}(Y,Y')}}log~p[y_n''|\mathbb{GLM}(Y,Y'), X; \theta] LGLM=y′′GLM(Y,Y)ˉlog p[yn′′GLM(Y,Y),X;θ]

其中 G L M ( Y , Y ′ ) \mathbb{GLM}(Y,Y') GLM(Y,Y)表示Sampler模块在 E a E_a Ea E c E_c Ec中选中 E c E_c Ec替换 E a E_a Ea对应的 Y ′ ′ Y'' Y′′中token的集合; G L M ˉ ( Y , Y ′ ) \bar{\mathbb{GLM}}(Y,Y') GLMˉ(Y,Y)表示Sampler模块在 E a E_a Ea E c E_c Ec中未选中 E c E_c Ec替换 E a E_a Ea对应的 Y ′ ′ Y'' Y′′的token的集合; G L M ( Y , Y ′ ) \mathbb{GLM}(Y,Y') GLM(Y,Y)的定义如下:
G L M ( Y , Y ′ ) = S a m p l e r ( E s ∣ E a , E c , ⌈ α d ( Y , Y ′ ) ⌉ ) \mathbb{GLM}(Y,Y')=Sampler(E_s|E_a,E_c, \left \lceil \alpha d(Y,Y')\right \rceil) GLM(Y,Y)=Sampler(EsEa,Ec,αd(Y,Y)) 上面公式的含义是从 E c E_c Ec中采样 ⌈ α d ( Y , Y ′ ) ⌉ \left \lceil \alpha d(Y,Y')\right \rceil αd(Y,Y)个向量替换对应位置的 E a E_a Ea,生成新的向量为 E s E_s Es。其中 α \alpha α是控制采样率的采样因子,越大表示使用 E c E_c Ec替换 E a E_a Ea的概率越大。该采样概率应该在最初模型效果不好时设置的稍微大一些,然后随着整个的训练过程的进行逐渐减小。为了达到这个目的,作者简单实用汉明距离,其定义为:
d ( Y , Y ′ ) = ∑ n = 1 N ( y n ≠ y n ′ ) d(Y,Y')=\sum_{n=1}^{N}(y_n \neq y_n') d(Y,Y)=n=1N(yn=yn)
也就是,最开始的时候模型学习不好, d d d会比较大,当模型学习越来越好时, d d d也逐渐减小。表示最开始训练时,使用较多的 E c E_c Ec替换 E a E_a Ea,也就是上下文信息更多和准确,减小模型的学习难度;当模型学习的越来越好时,使用较少的标签信息迫使模型进一步学习。
总结,sampler模块结合了标注标签向量 E c E_c Ec,实现方法是随机替换 E a E_a Ea ⌈ α d ( Y , Y ′ ) ⌉ \left \lceil \alpha d(Y,Y')\right \rceil αd(Y,Y)个向量生成新的含有语义的向量 E s E_s Es。训练并行decoder使用语义上下文 G L M ( Y , Y ′ ) \mathbb{GLM}(Y,Y') GLM(Y,Y)预测目标标签 G L M ˉ ( Y , Y ′ ) \bar{\mathbb{GLM}}(Y,Y') GLMˉ(Y,Y),使模型学习输出标签之间的依赖关系。

Loss Function

一共定义了三个loss:CE、MAE、MWER。训练时进行联合训练:
L t o t a l = γ L C E + L M A T + L w e r r N ( x , y ∗ ) \mathcal{L}_{total}=\gamma\mathcal{L}_{CE} + \mathcal{L}_{MAT} + \mathcal{L}_{werr}^{N}(x,y^*) Ltotal=γLCE+LMAT+LwerrN(x,y)
对于MWER,具体的计算公式如下:
L w e r r N ( x , y ∗ ) = ∑ y i ∈ S a m p l e ( x , N ) P ^ ( y i ∣ x ) [ W ( y i , y ∗ ) − W ^ ] \mathcal{L}_{werr}^{N}(x, y^*)=\sum_{y_i\in Sample(x,N)}\hat{P}(y_i|x)[\mathcal{W}(y_i,y^*)-\hat{W}] LwerrN(x,y)=yiSample(x,N)P^(yix)[W(yi,y)W^]
非自回归模型使用贪婪搜索,所以只有一个输出路径。正如前面提到的,在使用MWER训练时作者使用负例采样策略通过随机遮蔽top1分值标签产生多个候选路径。

实验

实验设置

在AISHELL-1、AISHELL-2以及工业级2wh数据集上验证上述方法的效果。其中工业级的测试集有两个:普通30h、远场15h。具体的工业级语料介绍可以参考文献21和28。RTF的测试在NVIDIA tesla V100上完成。

AISHELL-1 & AISHELL-2 数据集

【论文阅读】Paraformer工业级非自回归端到端语音识别模型

结果如上表格。在上述两个测试集上的测试都是在ESPNET框架上实现的,不包含LM和预训练模型。
AISHELL-1 的AR baseline参考文献15,效果在所有AR模型中是最好的(排除使用更多数据知识的模型)。因为作者当前的目标是通过模型结构提升模型效果而不是通过数据。普通的NAR和Paraformer的结构相同,但是没有Sampler。

结论:
1. 普通NAR的表现超过了其它的NAR工作,比如文献15和文献12
2. 普通NAR模型的表现比AR模型稍微差一些,因为缺乏了输出标签之间的上下文信息。
3. Paraformer通过使用基于GLM的Sampler模块对普通NAR模型增强,得到了和AR模型相近的识别表现。
4. Paraformer模型在dev和test测试上的CER分别为:4.6%和5.2%,推理速度比AR基线模型快12倍。

AISHELL-2上的结论和AISHELL-1差不多。Paraformer在test_ios测试集上CER为6.19%,推理速度快12倍;

就目前所知,这是NAR模型在AISHELL-1和AISHELL-2上取得的最好识别结果。

工业级2wh数据集

【论文阅读】Paraformer工业级非自回归端到端语音识别模型

结果如上表格所示,进行了多个扩展实验。动态 β \beta β表示2.2节中的动态阈值,CTC表示带有LM的DFSMN-CTC-sMBR系统,参考文献32。RTF在OpenNMT上进行评估。
实验有两个模型,一个41M的一个63M的。AR基线模型中attention的维度为256,和文献21一致。这里的结论和前面有所不同。

结论

  1. 可以看到在大型数据集上,普通NAR模型和AR模型的识别效果差距很大(AISHELL上差别较小)。
  2. 普通NAR模型虽然和CTC都有输出标签独立假设限制,但是普通NAR模型效果优于CTC效果。
  3. 普通NAR模型结合GLM时,效果提升。
  4. 当进一步结合MWER训练方法时,效果进一步提升。
  5. Paraformer模型效果和AR模型效果很接近,差别在相对2%以内,但是推理速度提升10倍+。
  6. Paraformer结合动态 β \beta β,效果进一步提升。因为相比固定阈值,动态阈值减少了推理和训练的不一致,更准确地提取了声学向量信息。
  7. 将模型变大时,得到了和前面相似的结论。Paraformer相比普通NAR模型效果提升;和AR模型效果相当,但是推理速度提升10倍+。
  8. Paraformer-63M和AR transformer-41M模型相比较,尽管Paraformer模型较大,但是Paraformer推理速度更快。也就是说,在远场测试集上Paraformer-63M模型相比AR transformer-41M模型,识别效果相对提升6.0%,并且推理速度提升7.4倍。也就是,在实际生产中,可以通过使用较大的Paraformer模型达到比AR模型更好的识别效果以及更快的推理速度。

【论文阅读】Paraformer工业级非自回归端到端语音识别模型

对采样因子 α \alpha α的超参数测试结果参见上表格。和预期相同 α \alpha α变大时,模型效果变好,因为在训练时提供了更多的上下文信息;然而如果该参数太大会导致训练和测试不一致。基本上, α \alpha α在0.5~1.0之间的表现比较稳定。

讨论

  1. 在小型训练集上普通NAR和AR模型的识别性能差别不大,但是在工业级大数据集上差距明显。这是第一个在大规模工业级数据上验证NAR模型效果的研究。
  2. Paraformer相比普通NAR模型识别效果相对提升11%,和精细训练的AR模型效果相当。

分析:见文章第一张图。

普通NAR模型相比AR模型,插入错误多一点,但是删除错误少一点。说明普通NAR模型的predictor预测输出的标签个数较准确。然而替换错误比较多,侧面反应两者性能差距很大。作者认为这是由普通NAR模型的条件独立假设造成的。Paraformer模型相比普通NAR模型替换错误下降很多,也暗示了识别效果提升很多。作者认为这是由于GLM模块使NAR模型学习到了标签之间的依赖关系。Paraformer模型相比AR模型替换错误稍微多一些,也暗示着识别准确率稍微差一些。作者认为AR模型中基于LM的beam search解码扮演了很重要的角色,相比GLM效果更好。为了减少这个性能差距,作者将在未来工作中在Paraformer模型上结合外部语言模型。文章来源地址https://www.toymoban.com/news/detail-488165.html

结论

  1. 文章提出了一个单步NAR模型Paraformer。
  2. Paraformer使用基于CIF的predictor预测输出标签的个数并产生隐变量;(借鉴文献【18】)
  3. 改进CIF使用动态 β \beta β阈值。
  4. GLM sampler用于产生语义向量增强非自回归模型对上下文的建模能力;(借鉴文献【19】)
  5. 最后作者设计了一个策略产生负例,并用MWER损失训练使模型,使其识别能力进一步提升。(借鉴文献【20】)
  6. 在AISHELL-1 & AISHELL-2 数据集和大规模工业级数据上都验证了Paraformer效果和当前最优的AR模型效果相当,但是推理速度提升超过10倍。

个人思考/疑问

  1. MWER loss没看懂,需要看文献20.
  2. Char 的 Embedding使用的torch.nn.Embedding,直接学习嘛?还是预设值好的。
  3. 端到端语音识别中的Embedding,例如wenet框架的token 的 Embedding能不能使用NLP领域用文字训练得到的Embedding,如果能的话为啥主流的不是这种的,这个Embedding不比直接学习更好嘛?
  4. wenet的重打分架构,decoder能不能直接根据CTC N-best结果得到矫正的识别结果,相当于做矫正/纠错?
  5. Paraformer能不能直接结合在当前的wenet框架中,使用conformer那套encoder,而不是SAN-M。从文章结论看,可以使用更大的模型训练Paraformer,效果比之前的模型效果好,且推理速度快,是一个可以实践的方向。
  6. Paraformer结构能不能和wenet重打分那套结合?Pafaformer的输出替代CTC的那一支,然后再加上decoder部分的重打分。这样相当于有了两个decoder。按道理就是训练会慢,但是推理应该还好吧?可能可行。------》Paraformer输出只有一个结果,重打分啥啊。。这个做不了。但是decoder可以作为纠错模型对结果进行纠错。
  7. 作者提出的在外面再结合一个语言模型应该是可行的。

到了这里,关于【论文阅读】Paraformer工业级非自回归端到端语音识别模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 68元工业级双核A7,全新T113核心板震撼上市!

    万象奥科全新T113核心板震撼上市,仅68元、工业级品质、双核A7处理器、外设丰富,诠释极致性价比! 参数速递 1.全志T113工业级处理器,主频1.2GHz 2.双核Cortex-A7+玄铁C906 RISC-V + HiFi4 DSP异构多核 3.内存128MB/256MB/512MB,存储256MB/8GB 4.支持Video Decoding H.265/H.264,Video Encoding JPEG/MJPEG

    2024年02月06日
    浏览(48)
  • 工业级开源facechain人物写真sd-webui插件使用方式

    facechain人物写真应用自8月11日开源了第一版证件照生成后。目前在github(https://github.com/modelscope/facechain)上已有近6K的star,论文链接:FaceChain: A Playground for Identity-Preserving Portrait Generation:https://arxiv.org/abs/2308.14256。facechain社区非常活跃,fork、commit数都很大,相应截图如下

    2024年01月20日
    浏览(93)
  • 工业级高性能3D模型渲染引擎,专注于3D Web轻量化!

    一、技术概览 HOOPS Communicator 是一个SDK,用于在Web浏览器中开发3D工程应用程序,重点在于: 完全访问工程数据 使用方便 快速发展 高性能可视化 快速模型流 灵活使用和部署 点击此处获取3D模型轻量化及格式转换解决方案 它的主要组件是 HOOPS Web查看器,这是一个功能强大

    2024年02月07日
    浏览(34)
  • ToB还是ToC?工业级与消费级AR眼镜都能干什么?

    随着科技的飞速发展,增强现实(AR)技术逐渐融入我们的日常生活。我国AR眼镜消费市场分为消费级和工业级应用。其中消费级主要分为游戏、影视、直播以及社交购物与旅游;工业级主要应用于医疗、汽车、工业、船舶、电力和仓储等专业领域。我们从以下几个方面来介绍

    2024年02月04日
    浏览(47)
  • 善睐物联:工业级机器人物联网卡为数据采集提供便利

    工业4.0的推进 , 智能制造已经逐渐成为制造业的核心竞争力。在这个变革的时代 , 工业级机器人作为智能制造的重要一环 , 其地位和作用愈发突出。而物联网技术的快速发展 , 使得工业级机器人与互联网的连接成为可能 , 进一步推动了机器人的智能化和网络化。其中 , 物联网

    2024年02月19日
    浏览(51)
  • 工业级路由器在智能交通系统(ITS)中的创新应用

    智能交通系统(ITS)作为一种先进的交通管理与控制系统,旨在提高交通运输系统的效率、安全性和便捷性。随着科技的不断发展,智能交通系统已经成为城市交通管理的重要组成部分。而工业级路由器作为一种可靠的网络通信设备,其在智能交通系统中的创新应用正逐渐受

    2024年02月04日
    浏览(58)
  • ARM/X86工业级数据采集 (DAQ) 与控制产品解决方案

    I/O设备,包括信号调理模块、嵌入式PCI/PCIE卡、便携式USB模块、DAQ嵌入式计算机、模块化DAQ系统,以及DAQNavi/SDK软件开发包和DAQNavi/MCM设备状态监测软件。 工业I/O产品适用于各种工业自动化应用,从机器自动化控制、测试测量到设备状态监测。 工业级数据采集 (DAQ) 与控制产品

    2024年02月09日
    浏览(57)
  • 3D模型格式转换工具HOOPS Exchange对工业级3D产品HOOPS的支持与应用

    一、概述 HOOPS Exchange是一套高性能模型转换软件库,可以给软件提供强大的模型的导入和导出功能,我们可以将其单独作为转换工具使用,也可以将其集成到自己的软件中。 同样,HOOPS 的其它产品,也离不开HOOPS Exchange的支持,它们也需要HOOPS Exchange为其提供模型的导入和导

    2024年02月07日
    浏览(47)
  • 工业级成熟航运港口人工智能产品全球前三船公司及港口码头落地,中国上海人工智能独角兽中集飞瞳全球应用最广规模最大最先进港航AI企业

    中国上海人工智能独角兽CIMCAI中集飞瞳,是全球应用落地最广,规模最大的港口航运人工智能高科技企业。中国人工智能独角兽CIMCAI中集飞瞳 巅峰产品行业第一,产品在全球港区及集装箱枢纽规模投产包括:全球港口码头智能闸口;全球港口岸边卸/装船;全球航运船公司;

    2024年02月05日
    浏览(49)
  • 高保真度与流畅度MagicVideo-V2视频生成模型;3D人形虚拟角色;微调量化的扩散模型;自动给视频配音;非自回归音频生成

    本文首发于公众号:机器感知 高保真度与流畅度MagicVideo-V2视频生成模型;3D人形虚拟角色;微调量化的扩散模型;自动给视频配音;非自回归音频生成 MagicVideo-V2: Multi-Stage High-Aesthetic Video Generation 本文提出了MagicVideo-V2视频生成模型,该模型将文生图模型、视频运动生成器、

    2024年01月22日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包