​GENIUS: 根据草稿进行文本生成的预训练模型,可用于多种NLP任务的数据增强...

本文主要是介绍​GENIUS: 根据草稿进行文本生成的预训练模型,可用于多种NLP任务的数据增强...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

9a73e2cb8dc648b5a82096defc703e93.gif

©PaperWeekly 原创 · 作者 | 郭必扬 

单位 | 上海财经大学信息管理与工程学院AI Lab

47b7f578e824acded52e083e685e7c8c.png

论文标题:

GENIUS: Sketch-based Language Model Pre-training via Extreme and Selective Masking for Text Generation and Augmentation

论文作者:

Biyang Guo, Yeyun Gong, Yelong Shen, Songqiao Han, Hailiang Huang, Nan Duan, Weizhu Chen

作者单位:

上海财经大学信息管理与工程学院 AI Lab;微软亚洲研究院;微软 Azure AI

论文链接:

https://arxiv.org/abs/2211.10330

Github链接:

https://github.com/beyondguo/genius(更多相关工作见:https://github.com/microsoft/SCGLab)

d4f088f2475f80aa64e95f26e81027e2.png

论文简介

本文提出了一种基于草稿进行文本生成(sketch-based text generation)的预训练模型 GENIUS。GENIUS 模型可以根据你给定的少量的关键词、短语、片段,进行文本补全,从而构成一个完整、连贯的段落。这类似于我们人类写作时先打草稿再进行创作的过程。GENIUS 使用了大量通用语料进行预训练,在预训练中使用了一种 extreme-and-selective masking 的策略,这些使得 GENIUS 有强大的生成能力。下面是一些例子:

05ab1e215212a0d8fe64cf8d5ebeea26.png

基于GENIUS的生成能力,本文还提出了一种新颖的数据增强方法——GeniusAug。GeniusAug 先从训练样本中抽取一个目标相关的 sketch,然后输入进 GENIUS 模型中进行新样本的生成。

相比于传统的数据增强方法,GeniusAug 既能够保存原样本的核心语义,还能够带来很大的多样性,从而使得模型在 in-distribution(ID)和 out-of-distribution(OOD)的情况都能得到显著的性能提升。实验验证 GeniusAug 可以通用于情感分类、主题分类、实体识别、机器阅读理解等多种 NLP 任务的数据增强。

2f2f248e27bdcc46d1a4072ea4537074.png

论文的代码和模型都已经开源,作者已经搭建了一个在线 demo,方便大家测试:

https://huggingface.co/spaces/beyond/genius

5c856ca9aec8635279f4e3473e03a485.png

b87fec53ccebbc856d1b818597a050a9.png

GENIUS的预训练

GENIUS 采用了一种 reconstruction from sketch 的预训练方式。先从完整文本中抽取一个 sketch,然后让模型根据 sketch 去重构这个文本。GENIUS 使用 BART [1] 模型进行初始化,在 C4 语料库上进行大规模预训练。

这里面的关键就是如何构造这样的 sketch,作者使用了一个 extraction-projection-masking 的 pipeline 来进行 sketch 构造:

1. extraction 使用无监督关键词抽取工具 YAKE [2],抽取最大为 3-gram 的关键词/短语,占比约为原文的 20%。这里抽取 3-gram 是为了抽取更大粒度的信息,从而降低重构难度。

2. projection 把抽取出来的关键信息,按照原文的位置、出现次数进行映射,且允许不同词语的重叠。

3. masking 把剩下的部分,使用单个的 MASK token 进行替换。

通过这样的三步,sketch 中就会保留原文的不同粒度的关键信息。经过作者统计,被 MASK 掉的内容平均占全文的 73%

这个 sketch 的抽取步骤看似很简单,但是其中几个设计很关键

1. 以往的文本重构预训练模型,都是采用 random masking 的策略,比如 BERT、BART、T5 等等,而且都只能采用比较小的 MASK 比例,本文认为 random 的策略,可能导致 MASK 的比例无法过大,而这又会限制模型的生成能力。

2. 抽取的出来的关键词,如何排列,以往的根据 keywords 生成文本的模型中,会直接按照抽取出来的顺序进行拼接,然后让模型去重构;本文认为这样也会增加重构的难度,使得预训练效果不佳;

3. 对抽取出来的关键信息,是直接拼接,还是使用 MASK token 进行拼接。作者也设计了实验来进行对比,发现使用 MASK token 来拼接可以有更好的效果。

下图是作者对不同的 sketch 的构造方法进行的预训练效果的对比:

806bc37aa0b6644b6694fc0ca75b6544.png

上图中,T4 是作者默认使用的sketch模板,其他的模板是作为对比,来验证模型模板的有效性。T1 就是抽取了关键词之后直接拼接作为 sketch,T2 则是按照原文的顺序进行关键词排列,T3 进一步允许了一个词出现多次,T4 在 T3 的基础上使用 MASK token 进行填补,T4-random 则是随机抽取词语来作为 sketch。

从结果发现,T4-random 的预训练效果最差,这验证了在这种机端 MASK 的情况下,随机选择一部分词来作为 sketch 是无法进行良好重构训练的。T2 效果优于 T1,说明了关键信息的按照原始顺序排列的重要性;T3 优于 T2,说明了允许这些信息出现多次、允许互相重叠是有益处的;T4(也就是默认模板)优于 T3,说明了使用 MASK token 作为连接是更有效的。

这些设计,降低了文本重构的难度,有利于训练,同时,T4 模板的设计,也更加贴近于 GENIUS 的 backbone——BART 的 text infilling 预训练目标,所以在继续预训练时,可以缓解灾难性遗忘的问题,使得在大规模继续预训练后能有良好的效果。

总的来说,GENIUS 的预训练,跟以往的基于文本重构的 denoising 预训练有着两点显著区别:

  • extreme masking:GENIUS 的 mask 比例可以高达 80%,而 BERT 系列、BART、T5 都只能 mask 很小一部分;

  • selective masking:GENIUS 是针对不那么重要的部分进行 mask,而之前的方法,基本都是 random mask 的方式。

2.1 实验

作者从新闻语料中抽取了 1000 条样本,抽取 sketch 进行 sketch-based text generation 任务,并对比了一系列相关模型,包括使用 text-infilling 目标进行训练的 BART [1]、根据词汇进行文本生成的 CBART [3],使用 CommonGen 训练的 keywords2text 模型以及 ILM(infilling language model)[4],GENIUS 在文本流畅性、多样性、保真度上都有优势:

13e91fa50e7ec35b63c1cc3178e26754.png

1058523c8372cfd1fd999690fa2e9644.png

根据这些例子可以看出,GENIUS 相比于其他 baseline,可以生成更长、更完整、更流畅的文本。

307a7e5d5b29b123f7a827823e62ffb2.png

基于GENIUS的文本数据增强新方法–GeniusAug

数据增强是文本生成模型的重要应用之一,也是检验文本生成效果的重要手段。如果生成的文本可用于下游 NLP 任务的训练并带来性能提升,则可以说明文本生成的质量良好。

文本展示了 GENIUS 可作为一种通用的数据增强工具,应用于文本分类、实体识别、阅读理解等任务上。

a06981fae289578cad047e37b686b493.png

作者分析了传统的文本数据增强主要有两个问题:

  • 有的方法太过于保守:例如基于文本编辑的 EDA [5],利用 MLM 模型进行词汇替换 [6] 等方法,只对原始文本进行极少量的改动,相当于给数据增加一些噪音。当改动过大时,这些方法甚至会损害模型的性能;其他基于 paraphrasing 的方法,例如 back-translation [7],也只是对原文的表达进行了一定的风格改变,整体结构、语义依然保持基本不变。这些特点,使得增强的样本缺乏多样性。

  • 有的方法太过于激进:例如基于 GPT-2 模型在下游数据集上进一步微调,从而能够给定一个标签生成全新的训练样本 [8,9]。这些方法能产生多样化的样本,但是也同时有很大的风险产生不合理的样本,因此往往需要进一步筛选才能使用。

根据 GENIUS 的 sketch-based text generation 的思想,作者提出了 GeniusAug 方法,在进行多样化样本增强的情况下,还能够尽可能保留任务相关的语义,从而达到了保守和激进中间的一个平衡。

3.1 方法

‍具体方法分为两步:

1. target-aware sketch extraction

在 GENIUS 的预训练中,我们是通过无监督抽取工具进行抽取关键信息的。在数据增强的场景下,我们采用另一种方法——target-aware sketch extraction,抽取跟任务相关的部分作为关键信息。

假设原始样本为 , 其任务相关信息(target-related informationTRI)为 ,文本中的 n-gram 分为为,我们首先使用一个 encoder 来对这些信息进行编码,得到 , 和 ,然后我们通过下面公式来计算每个 n-gram 的得分:

0964157b0e5c11fac840c2eca331b310.png

其中, 是一个 fusing embedding,综合了原始文本和 TRI 的语义,然后再通过余弦相似度来对 n-gram 进行排序,选择得分最高的 N 个作为 target-aware 的关键信息。

这里的 TRI,对于不同的任务我们有不同的选取,对于文本分类任务,TRI 就是文本的标签,或者标签的描述;对于 NER 任务,TRI 就是实体;对于阅读理解任务,TRI 就是给定的 question。我们可以认为这里抽取出来的信息,就是对具体任务最有帮助的信息,然后 GENIUS 模型根据这样的 sketch 进行生成,对这些关键信息构造新的上下文,从而构成新的样本。

2. GENIUS generation

得到 target-aware sketch 之后,就可以直接使用 GENIUS 进行文本生成了。但是,作者进一步提出了两种方式,一种可以进一步提升样本的质量,一种可以进一步提升样本的多样性:

  • attribute controlling:作者发现 GENIUS 除了根据 sketch 进行生成外,还具有“属性控制”的能力,我们可以在 sketch 的前面,增加一个 prompt,来使得生成的样本,更加贴近我们设置的某个属性。这个特点,对于数据增强尤其有用,比如对于文本分类任务,我们可以把属性设置为样本的标签,这样在文本生成的时候,就可以让生成的样本更加贴近某个类别。下面是一些属性控制的例子:

    7d1ba815b989c8cb89dd9f79fae00b62.png

    可以看到,同样的 sketch,在给定不同的 attribute 之后,可以生成不同主题的内容。

  • sketch-mixup:除了从某个样本中抽取 sketch 然后生成外,作者还提出了一种极大增加多样性的方式,借助了 Mixup 的思想,我们可以把来自不同样本的 sketch 进行混合,得到一个新的 sketch,作者在后面的实验中,也验证了这种 mixup 的方式在一些任务下可以继续提升性能。

由于 GENIUS 模型已经在大量通用语料上进行了预训练,所以在数据增强场景下是“取之即用”的,不需要在下游数据集上进行微调。相比之下,C-BERT [6], LAMBADA [8] 等方法则需要再下游数据集上进行微调之后才能使用。但是,微调一般都是有增益的,所以作者在实验中也对比了微调的版本 GeniusAug-f。

3.2 实验

3.2.1 文本分类

作者在数据增强部分是主要实验是在文本分类上进行的。作者采用了 6 个文本分类数据集:Huffpost 新闻、BBC 新闻、20NG、Yahoo 问答、IMDB 和 SST2 情感分类,测试了在仅仅提供 n={50,100,200,500,1000} 条标注训练样本的情况下,不同的数据增强方法能带来多大的性能提升。

除此之外,作者还设计了 4 组 OOD 泛化实验,Huffpost 和 BBC 新闻拥有 5 个相同的新闻类别,而 IMDB 和  SST2 都是电影评价二分类,因此它们彼此之间可以互相进行测试,验证模型在样本分布发生较大改变之后是否能够保持较好的泛化能力。

ff3bc400366a94e928c87c13006d143d.png

4a03ee1a0fcd4ce6d975d574a8627d7f.png

根据实验结果,GeniusAug 和 GeniusAug-f 在 ID 和 OOD 设置下,都取得了比其他 augmentation 方法更好的效果,尤其在 OOD 场景下。通过 target-aware sketch 抽取,使得模型可以保留任务的核心信息,通过 GENIUS 模型的生成,训练样本的多样性大大提高。这两方面,均对 OOD 泛化性能有很大帮助。

值得一提的是其中的另一个 baseline——STA [10],STA 是一种针对性文本数据增强方法,也涉及到任务相关信息的抽取,然后在增强的过程中根据词汇的不同角色进行针对性地文本编辑,因此 STA 对比其他 baseline 也可以取得比较好的效果。

然而,由于 STA 是一种基于规则的方法,产生的新样本可能不通顺,不借助语言模型,使得其多样性也收到限制,GeniusAug 则弥补了这方面的缺陷,在文本质量、多样性方面超越 STA,从而在下游任务上取得更好的效果。

接着,作者探究了在使用不同水平的分类模型时各个数据增强方法的效果(n=50):

ebfe6d3c28db8249b9b88337816ba727.png

即使基线模型已经十分强大,GeniusAug 依然可以带来显著的性能提升。相比之下,其他方法带来的提升就微弱许多。有意思的事,当不使用数据增强时,RoBERTa-large 的性能是 60.9,distilBERT 的性能则为 51.9,而在 GeniusAug 的加持下,distilBERT 的性能可以跃升到 61.8,超越了 size 要大 5~6 倍的 RoBERTa-large 的性能。

前文中提到了使用 sketch-mixup 来进一步提高样本的多样性,作者也对此做了实验对比:

18d1423d49ff57a347f7462a77001eef.png

图中 GA 即为 GeniusAug 的简写,实验在低资源设置下(n=50)进行,GeniusAug-mixup 在所有数据集上都超越了 GeniusAug,甚至在 4/6 个数据集上超越了进一步微调的 GeniusAug-f。这个实验说明,sketch 的设计可能是一个很值得研究的问题,从而更加充分地利用 GENIUS 模型的能力。

3.2.2 NER和MRC任务

作者还在 NER 和 SQuAD 任务上做了相关实验,验证 GeniusAug 在其他 NLP 任务上的有效性。

对于 NER 任务,GeniusAug 通过抽取实体所在的片段来构成 sketch,然后通过 GENIUS 生成新的上下文。对于 MRC 任务,GeniusAug 则是先找出 answer 所在的句子,然后从该句子的上下文中抽取跟 question 相关的 sketch,然后交给 GENIUS 来生成新的上下文。

文章对比了几种常见的 baseline,实验结果如下:

c34c0d917470eafd44d114c68b0e81ac.png

实验表明 GeniusAug 对其他 NLP 任务依然是强大的数据增强工具,而且无需在下游任务上进行微调。更多的 NLP 任务,作者团队还在继续探索中。

3.2.3 消融实验

最后作者做了两组消融实验,主要是为了探究两个问题:

1. GENIUS 的预训练,对于这种 sketch-based augmentation 方式是否真的有效。如果我们单纯的使用 BART 的 text-infilling,然后套用这里的 sketch-based augmentation,效果如何?

作者在 Huff 数据集上进行了实验,结果显示没有了 pre-training 之后,效果出现了显著的降低,尤其在低资源的场景下。但可以注意到,在 ID 的 setting 下,当训练样本达到 1000 时,没有预训练,但是使用 GENIUS 的方式微调,效果也可以很好,这也说明了这种 sketch-based augmentation 方式的有效性。然而,在 OOD setting 下,就算微调,效果依然不及有预训练的版本。

bbbb54f49fc43ef6695d8c47da645805.png

2. Target-aware sketch extraction 的策略是否比其他抽取 sketch 然后进行 augmentation 要更好。于是作者设计了两种其他方式:① 在抽取时,只考虑原文的语义,称为 content-only;② 在抽取时,仅考虑 target 的语义,称为 target-only。

然后在 Huff 上进行对比,见下图。实验发现,只使用 content 来抽取关键信息的话,效果是最差的。因为每个文本个性化的内容可能很多,不考虑标签,可能 sketch 并不是跟任务很相关,从而影响效果;而只考虑 target 的话,有时候表现还是挺不错的,但效果不太稳定;总体上看,同时考虑 content 和 target 的 target-aware 方法,是效果最好最稳定的。

41f5369ed1f716f982c87f041178b52c.png

81b4370065090bd4df1ed4a488f24f1b.png

总结&未来改进

GENIUS 模型是一种利用 extreme and selective masking 策略进行预训练的条件文本生成模型,这种预训练使得 GENIUS 模型可以给予几个极度残缺的文本进行补全和扩写,补充丰富的细节。GeniusAug 在 GENIUS 模型的基础上,探索了一种文本数据增强的新范式——基于草稿的数据增强,平衡了多样性和样本质量的两难问题,在众多 NLP 任务上表现出出色的效果。

当然,GENIUS 也存在着一些缺陷,作者在论文中专门设置了一章讨论 GENIUS 工作未来改进的方向。比如,目前使用的预训练数据量(两千万样本)依然没有足够大,使得模型可能在一些特殊场景下可能效果不好;对于一个 mask 部分,GENIUS 无法控制具体生成文本的长度,所以在一些需要精确控制的场景可能性能受限。

此外,基于 GENIUS 模型的数据增强方法 GeniusAug 也并不适用于所有 NLP 任务,比如 NLI 这种涉及到逻辑推理的问题,这是由于单纯的抽取 sketch 很难涵盖原文的逻辑关系,这使得生成的样本并不一定适用于下游任务。

更多模型的细节请参考论文,大家可以亲自上手测试一下模型 demo 来获得更直观地体验:

https://huggingface.co/spaces/beyond/genius

a3a12267d72599e883d040369cce8578.png

outside_default.png

参考文献

outside_default.png

[1] Bart: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension. 2020. In Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics.

[2] Yake! keyword extraction from single documents using multiple local features. 2020. Information Sciences.

[3] Parallel refinements for lexically constrained text generation with bart. In Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing

[4] Enabling language models to fill in the blanks. 2020. In Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics

[5] EDA: Easy data augmentation techniques for boosting performance on text classification tasks. In Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing

[6] Conditional bert contextual augmentation. 2019. In International Conference on Computational Science

[7] Qanet: Combining local convolution with global self-attention for reading comprehension. arXiv preprint arXiv:1804.09541.

[8] Do not have enough data? deep learning to the rescue! 2020. In Pro- ceedings of the AAAI Conference on Artificial Intelligence

[9] Data augmentation using pre-trained transformer models. 2020. In Proceedings of the 2nd Workshop on Life-long Learning for Spoken Language Systems

[10] Selective text augmentation with word roles for low-resource text classification. arXiv preprint arXiv:2209.01560.

更多阅读

db60a3d2f0057c1570e7a3e914a8b4db.png

c93bb73f38c1de92eba3e899e48998a4.png

2c5a749008524ffbaaa80c4a772e57a9.png

8f0b20b762d2506dc1bc5b8df4648c0c.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

3cf2c1e3af772fac43bd3df1a4f5730b.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

c7a8956134d72c96afdea95694e55f09.jpeg

这篇关于​GENIUS: 根据草稿进行文本生成的预训练模型,可用于多种NLP任务的数据增强...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717343

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma