11月6日上午,在中国中文信息学会和中国计算机学会联合创办的“语言与智能高峰论坛”上,微软亚洲研究院副院长周明,以《从语言智能到代码智能》为题,介绍了智能代码理解和生成代码的机理、预训练模型(CodeBERT/CodeGPT)、基准数据集(CodeXGLUE)以及融合了编程语言句法和语义信息的新的评价指标(CodeBLEU),分享了微软在编程语言知识和上下文进行推理,支持代码检索、补全、翻译、纠错、问答等场景的应用。
周明,微软亚洲研究院副院长、中国计算机学会副理事长、国际计算语言学会(ACL)前任会长。
整理:智源实习生 罗丽
1
NLP预训练模型到代码智能预训练模型
自然语言处理在深度学习的支撑下取得了迅猛发展,把自然语言发展的技术迁移到智能代码研究领域,以提升代码能力成为近年来新的研究热点。代码智能能够让计算机具备理解和生成代码的能力,利用编程的语言知识和上下文进行推理,支持代码检索、代码翻译等场景应用。
图1:基于神经网络的NLP研究(NN-NLP)
图为清华大学唐杰团队总结的过去5年ACL文章中自然语言发展的主要工作,包括 Word embeddings、LSTM、Encode decoder、RNN、Pre-trainedmodel 等,这些技术推动了自然语言的应用,包括基于神经网络的机器翻译,预训练模型演化,阅读理解技术等。
基于以上研究,周明总结了过去5年神经网络自然语言处理具有里程碑意义的工作。
图2:NN-NLP的技术演进
1. Word embedding。2013年,Mikolov 等提出利用上下文预测中间词或利用中间词来预测上下文。在一个窗口内,根据预测的损失,回传调整 Word embeddings,并通过大规模文本训练,得到了一个相对稳定的 Wordembeddings。Word embeddings 包含词本身的意义、上下文、句法语义等信息的嵌入,相对来讲,它是一个静态表示。
2. Sentence embedding。 既然词可以做嵌入,那么句子也应该能做嵌入,对句子进行表示的最初考虑是利用 RNN 或 CNN,从词嵌入出发,得到句子的全局表示。
3. Encoder-decoder。之后,研究者提出 Encoder decoder,以实现不同语言串的输出,比如机器翻译能够将中文语言串,变为英文语言串。Decoder 在产生某个输出时,需要考虑输入各节点权值的影响。
4.Transformer。RNN 自左到右的并行能力比较弱,只有一个特征抽取器,从多角度来进行特征抽取时,需要引入自注意力机制(Self-attention Mechanism),实现一个词与其他词连接强度的同步计算,而 Multi-header 的多角度抽取特征,为Transformer技术带来很多革命性突破。
5. Pre-trained model。对大型数据库做 Self-supervised learning,针对大规模语料进行训练,可以得到预训练模型。
预训练模型是把大规模语料中训练的通用语言知识浓缩在一个模型中,该模型是一个词的上下文相关的语义表示,在该模型中对下游任务做 Fine-tuning。所谓 Fine-tuning,是在原有神经网络的基础上,根据具体任务来调整参数,每一个具体任务标注语料,然后针对标注的语料进行训练,训练的损失回传,调整网络,得到一个相对较好的处理器。
图3:预训练模型-自然语言处理的新范式
预训练模型包括预训练和微调(Fine-tuning),可以做纯文本训练,也可以做文本、图像