敞开成长之旅!这是我参加「日新计划 12 月更文挑战」的第2天,点击查看活动概况


theme: channing-cyan

作者:朱祥茹、段忠杰、汪诚愚、黄俊

导读

用户生成内容(User Generated Content,UGC)是互联网上多模态内容的重要组成部分,UGC数据级的不断增加促进了各大多模态内容渠道的繁荣。在海量多模态数据和深度学习大模型的加持下,AI生成内容(AI Generated Content,AIGC)呈现出爆发性增加趋势。其间,文图生成(Text-to-image Generation)使命是盛行的跨模态生成使命,旨在生成与给定文本对应的图画。典型的文图模型例如OpenAI开发的DALL-E和DALL-E2。近期,业界也练习出了更大、更新的文图生成模型,例如Google提出的Parti和Imagen,依据扩散模型的Stable Diffusion等。

可是,上述模型一般不能用于处理中文的需求,而且上述模型的参数量庞大,很难被开源社区的广阔用户直接用来Fine-tune和推理。此外,文图生成模型的练习进程关于常识的了解比较缺乏,容易生成反常识内容。本次,EasyNLP开源结构在从前推出的依据Transformer的文图生成模型(看这里)基础上,进一步推出了交融丰厚常识图谱常识的文图生成模型ARTIST,能在常识图谱的指引上,生成愈加符合常识的图片。咱们在中文文图生成评测基准MUGE上评测了ARTIST的生成作用,其生成作用名列榜单榜首。咱们也向开源社区免费开放了常识增强的中文文图生成模型的Checkpoint,以及相应Fine-tune和推理接口。用户能够在咱们开放的Checkpoint基础上进行少数范畴相关的微调,在不消耗很多核算资源的状况下,就能一键进行各种艺术创作。

EasyNLP(github.com/alibaba/Eas…)是阿⾥云机器学习PAI 团队依据 PyTorch 开发的易⽤且丰厚的中⽂NLP算法结构,⽀持常⽤的中⽂预练习模型和⼤模型落地技能,并且供给了从练习到部署的⼀站式 NLP 开发体会。EasyNLP 供给了简洁的接⼝供⽤户开发 NLP 模型,包括NLP应⽤ AppZoo 和预练习 ModelZoo,一起供给技能帮助⽤户⾼效的落地超⼤预练习模型到事务。因为跨模态了解需求的不断增加,EasyNLP也⽀持各种跨模态模型,特别是中⽂范畴的跨模态模型,面向开源社区,期望能够服务更多的 NLP 和多模态算法开发者和研 究者,也期望和社区⼀起推进 NLP /多模态技能的开展和模型落地。

本⽂扼要介绍ARTIST的技能解读,以及如何在EasyNLP结构中使⽤ARTIST模型。

ARTIST模型详解

ARTIST模型的构建依据Transformer模型 ,将文图生成使命分为两个阶段进行,榜首阶段是经过VQGAN模型对图画进行矢量量化,即关于输入的图画,经过编码器将图画编码为定长的离散序列,解码阶段是以离散序列作为输入,输出重构图。第二阶段是将文本序列和编码后的图画序列作为输入,运用GPT模型学习以文本序列为条件的图画序列生成。为了增强模型先验,咱们规划了一个Word Lattice Fusion Layer,将常识图谱中的的实体常识引入模型,辅佐图画中对应实体的生成,从而使得生成的图画的实体信息愈加精准。下图是ARTIST模型的系统框图,以下从文图生成整体流程和常识注入两方面介绍本方案。

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

榜首阶段:依据VQGAN的图画矢量量化

在VQGAN的练习阶段,咱们运用数据中的图片,以图画重构为使命目标,练习一个图画词典的codebook,其间,这一codebook保存每个image token的向量表明。实际操作中,关于一张图片,经过CNN Encoder编码后得到中间特征向量,再对特征向量中的每个编码位置寻觅codebook中距离最近的表明,从而将图画转换成由codebook中的imaga token表明的离散序列。第二阶段中,GPT模型会以文本为条件生成图画序列,该序列输入到VQGAN Decoder,从而重构出一张图画。

第二阶段:以文本序列为输入运用GPT生成图画序列

为了将常识图谱中的常识融入到文图生成模型中,咱们首先经过TransE对中文常识图谱CN-DBpedia进行了练习,得到了常识图谱中的实体表明。在GPT模型练习阶段,关于文本输入,首先识别出一切的实体,然后将已经练习好的实体表明和token embedding进行结合,增强实体表明。可是,因为每个文本token可能归于多个实体,如果将多个实体的表明全都引入模型,可能会造成常识噪声问题。所以咱们规划了实体表明交互模块,经过核算每个实体表明和token embedding的交互,为一切实体表明加权,有挑选地进行常识注入。特别地,咱们核算每个实体表征对关于当时token embedding的重要性,经过内积进行衡量,然后将实体表明的加权平均值注入到当时token embedding中,核算进程如下:

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

得到常识注入的token embedding后,咱们经过构建具有layer norm的self-attention网络,构建依据Transformer的GPT模型,进程如下:

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

在GPT模型的练习阶段,将文本序列和图画序列拼接作为输入,假定文本序列为w, 生成图画的imaga token表明的离散序列概率如下所示:

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

最终,模型经过最大化图画部分的负对数似然来练习,得到模型参数的值。

ARTIST模型作用

规范数据集评测成果

咱们在多个中文数据集上评价了ARTIST模型的作用,这些数据集的统计数据如下所示:

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

在Baseline方面,咱们考虑两种状况:zero-shot learning和规范fine-tuning。咱们将40亿参数的中文CogView模型作为zero-shot learner,咱们也考虑两个模型规划和ARTIST模型规划相当的模型,分别为开源的DALL-E模型和OFA模型。试验数据如下所示:

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

从上能够看出,咱们的模型在参数量很小的状况(202M)下也能获得较好的图文生成作用。为了衡量注入常识的有效性,咱们进一步进行了相关评测,将常识模块移除,试验作用如下:

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

上述成果能够清楚地看出常识注入的作用。

事例剖析

为了愈加直接地比较不同场景下,ARTIST和baseline模型生成图画质量比照,咱们展示了电商商品场景和自然风光场景下各个模型生成图画的作用,如下图:

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

电商场景作用比照

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

自然风光场景作用比照

上图能够看出ARTIST生成图画质量的优越性。咱们进一步比较咱们从前公开的模型(看这里)和具有丰厚常识的ARTIST模型的作用。在榜首个示例“手工古风复原款发钗汉服配饰宫廷发簪珍珠头饰发冠”中,原始生成的成果首要突出了珍珠发冠这个物体。在ARTIST模型中,“古风”等词的常识注入进程使得模型生成成果会更倾向于古代我国的珍珠发簪。

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

第二个示例为“一颗绿色的花椰菜在成长”。因为模型在练习时对“花椰菜”物体款式把握不够,当不包括常识注入模块时,模型依据“绿色”和“菜”的提示生成了有大片绿叶的单株植物。在ARTIST模型中,生成的物体更接近于形如花椰菜的椭圆形的植物。

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

ARTIST模型在MUGE榜单的评测成果

MUGE(Multimodal Understanding and Generation Evaluation,链接)是业界首个大规划中文多模态评测基准,其间包括依据文本的图画生成使命。咱们运用本次推出的ARTIST模型在中文MUGE评测榜单上验证了前述文图生成模型的作用。从下图可见,ARTIST模型生成的图画在FID指标(Frechet Inception Distance,值越低表明生成图画质量越好)上超越了榜单上的其他成果。

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

ARTIST模型的完结

在EasyNLP结构中,咱们在模型层构建了ARTIST模型的Backbone,其首要是GPT,输入分别是token id和包括的实体的embedding,输出是图片各个patch对应的离散序列。其核⼼代码如下所示:

# in easynlp/appzoo/text2image_generation/model.py
# init
self.transformer = GPT_knowl(self.config)
# forward
x = inputs['image']
c = inputs['text']
words_emb = inputs['words_emb']
x = x.permute(0, 3, 1, 2).to(memory_format=torch.contiguous_format)
# one step to produce the logits
_, z_indices = self.encode_to_z(x) 
c_indices = c
cz_indices = torch.cat((c_indices, a_indices), dim=1)
# make the prediction
logits, _ = self.transformer(cz_indices[:, :-1], words_emb, flag=True)
# cut off conditioning outputs - output i corresponds to p(z_i | z_{<i}, c)
logits = logits[:, c_indices.shape[1]-1:]

在数据预处理进程中,咱们需求获得当时样本的输入文本和实体embedding,从而核算得到words_emb:

# in easynlp/appzoo/text2image_generation/data.py
# preprocess word_matrix
words_mat = np.zeros([self.entity_num, self.text_len], dtype=np.int)
if len(lex_id) > 0:
    ents = lex_id.split(' ')[:self.entity_num]
    pos_s = [int(x) for x in pos_s.split(' ')]
    pos_e = [int(x) for x in pos_e.split(' ')]
    ent_pos_s = pos_s[token_len:token_len+self.entity_num]
    ent_pos_e = pos_e[token_len:token_len+self.entity_num]
    for i, ent in enumerate(ents):
        words_mat[i, ent_pos_s[i]:ent_pos_e[i]+1] = ent
encoding['words_mat'] = words_mat
# in batch_fn
words_mat = torch.LongTensor([example['words_mat'] for example in batch])
words_emb = self.embed(words_mat)

ARTIST模型使⽤教程

以下咱们扼要介绍如何在EasyNLP结构使⽤ARTIST模型。

安装EasyNLP

⽤户能够直接参阅GitHub(github.com/alibaba/Eas…)上的说明安装EasyNLP算法结构。

数据预备

  1. 预备自己的数据,将image编码为base64方式:ARTIST在详细范畴使用需求finetune, 需求用户预备下流使命的练习与验证数据,为tsv文件。这⼀⽂件包括以制表符\t分隔的三列(idx, text, imgbase64),榜首列是文本编号,第二列是文本,第三列是对应图片的base64编码。样例如下:
64b4109e34a0c3e7310588c00fc9e157	韩国心爱日系袜子女中筒袜春秋薄款纯棉学院风街头卡通兔子长袜潮	iVBORw0KGgoAAAAN...MAAAAASUVORK5CYII=

下列⽂件已经完结预处理,可⽤于练习和测验:

https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/T2I_train.tsv
https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/T2I_val.tsv
https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/T2I_test.tsv
  1. 将输入数据与lattice、entity位置信息拼接到一起:输出格式为以制表符\t分隔的几列(idx, text, lex_ids, pos_s, pos_e, seq_len, [Optional] imgbase64)
# 下载entity to entity_id映射表
wget wget -P ./tmp https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/entity2id.txt
python examples/text2image_generation/preprocess_data_knowl.py \
  	--input_file ./tmp/T2I_train.tsv \
    --entity_map_file ./tmp/entity2id.txt \
    --output_file ./tmp/T2I_knowl_train.tsv
python examples/text2image_generation/preprocess_data_knowl.py \
    --input_file ./tmp/T2I_val.tsv \
    --entity_map_file ./tmp/entity2id.txt \
    --output_file ./tmp/T2I_knowl_val.tsv
python examples/text2image_generation/preprocess_data_knowl.py \
    --input_file ./tmp/T2I_test.tsv \
    --entity_map_file ./tmp/entity2id.txt \
    --output_file ./tmp/T2I_knowl_test.tsv

ARTIST文图生成微调和猜测示例

在文图生成使命中,咱们对ARTIST进行微调,之后用于微调后对模型进行猜测。相关示例代码如下:

# 下载entity_id与entity_vector的映射表
wget -P ./tmp https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/entity2vec.pt
# finetune
python -m torch.distributed.launch $DISTRIBUTED_ARGS examples/text2image_generation/main_knowl.py \
    --mode=train \
    --worker_gpu=1 \
    --tables=./tmp/T2I_knowl_train.tsv,./tmp/T2I_knowl_val.tsv \
    --input_schema=idx:str:1,text:str:1,lex_id:str:1,pos_s:str:1,pos_e:str:1,token_len:str:1,imgbase64:str:1,  \
    --first_sequence=text \
    --second_sequence=imgbase64 \
    --checkpoint_dir=./tmp/artist_model_finetune \
    --learning_rate=4e-5 \
    --epoch_num=2 \
    --random_seed=42 \
    --logging_steps=100 \
    --save_checkpoint_steps=200 \
    --sequence_length=288 \
    --micro_batch_size=8 \
    --app_name=text2image_generation \
    --user_defined_parameters='
        pretrain_model_name_or_path=alibaba-pai/pai-artist-knowl-base-zh
        entity_emb_path=./tmp/entity2vec.pt
        size=256
        text_len=32
        img_len=256
        img_vocab_size=16384
      ' 
# predict
python -m torch.distributed.launch $DISTRIBUTED_ARGS examples/text2image_generation/main_knowl.py \
    --mode=predict \
    --worker_gpu=1 \
    --tables=./tmp/T2I_knowl_test.tsv \
    --input_schema=idx:str:1,text:str:1,lex_id:str:1,pos_s:str:1,pos_e:str:1,token_len:str:1, \
    --first_sequence=text \
    --outputs=./tmp/T2I_outputs_knowl.tsv \
    --output_schema=idx,text,gen_imgbase64 \
    --checkpoint_dir=./tmp/artist_model_finetune \
    --sequence_length=288 \
    --micro_batch_size=8 \
    --app_name=text2image_generation \
    --user_defined_parameters='
        entity_emb_path=./tmp/entity2vec.pt
        size=256
        text_len=32
        img_len=256
        img_vocab_size=16384
        max_generated_num=4
      '

阿里云机器学习渠道PAI上运用Transformer完结文图生成

PAI-DSW(Data Science Workshop)是阿里云机器学习渠道PAI开发的云上IDE,面向不同水平的开发者,供给了交互式的编程环境(文档)。在DSW Gallery中,供给了各种Notebook示例,便利用户轻松上手DSW,建立各种机器学习使用。咱们也在DSW Gallery中上架了运用Transformer模型进行中文文图生成的Sample Notebook(见下图),欢迎大家体会!

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

未来展望

在这一期的工作中,咱们在EasyNLP结构中扩展了依据Transformer的中文文图生成功能,一起开放了模型的Checkpoint,便利开源社区用户在资源有限状况下进行少数范畴相关的微调,进行各种艺术创作。在未来,咱们计划在EasyNLP结构中推出更多相关模型,敬请期待。咱们也将在EasyNLP结构中集成更多SOTA模型(特别是中文模型),来支持各种NLP和多模态使命。此外,阿里云机器学习PAI团队也在持续推进中文多模态模型的自研工作,欢迎用户持续重视咱们,也欢迎参加咱们的开源社区,共建中文NLP和多模态算法库!

Github地址:github.com/alibaba/Eas…

Reference

  1. Chengyu Wang, Minghui Qiu, Taolin Zhang, Tingting Liu, Lei Li, Jianing Wang, Ming Wang, Jun Huang, Wei Lin. EasyNLP: A Comprehensive and Easy-to-use Toolkit for Natural Language Processing. EMNLP 2022
  2. Tingting Liu*, Chengyu Wang*, Xiangru Zhu, Lei Li, Minghui Qiu, Ming Gao, Yanghua Xiao, Jun Huang. ARTIST: A Transformer-based Chinese Text-to-Image Synthesizer Digesting Linguistic and World Knowledge. EMNLP 2022
  3. Aditya Ramesh, Mikhail Pavlov, Gabriel Goh, Scott Gray, Chelsea Voss, Alec Radford, Mark Chen, Ilya Sutskever. Zero-Shot Text-to-Image Generation. ICML 2021: 8821-8831

阿里灵杰回忆

  • 阿里灵杰:阿里云机器学习PAI开源中文NLP算法结构EasyNLP,助力NLP大模型落地
  • 阿里灵杰:预练习常识衡量比赛夺冠!阿里云PAI发布常识预练习工具
  • 阿里灵杰:EasyNLP带你玩转CLIP图文检索
  • 阿里灵杰:EasyNLP中文文图生成模型带你秒变艺术家
  • 阿里灵杰:EasyNLP集成K-BERT算法,凭借常识图谱完结更优Finetune
  • 阿里灵杰:中文稀少GPT大模型落地 — 通往低成本&高性能多使命通用自然语言了解的关键里程碑
  • 阿里灵杰:EasyNLP玩转文本摘要(新闻标题)生成
  • 阿里灵杰:跨模态学习能力再晋级,EasyNLP电商文图检索作用刷新SOTA
  • 阿里灵杰:EasyNLP带你完结中英文机器阅读了解
  • 阿里灵杰:EasyNLP发布交融语言学和现实常识的中文预练习模型CKBERT