新智元微软亚研院副院长周明:从语言智能到代码智能( 三 )


之后 , 研究者将预训练模型继续扩展到图像和视频任务中 , 并构建模型 Unicoder-VLfor Images 和 Unicoder-VL for Videos 。
新智元微软亚研院副院长周明:从语言智能到代码智能
本文插图
图9:Unicoder-VL for Images
新智元微软亚研院副院长周明:从语言智能到代码智能
本文插图
图10:Unicoder-VL for Videos
4. LayoutLM
LayoutLM 是 Document 的训练模型,该模型考虑了分布信息 。
用 OCR 扫描文档 , 扫描结果加每一个识别对象的位置信息作为输入 , 得到 OCR 的结果 , 每个结果的位置信息和对应文档的预训练模型 , 使用时 , 将预训练模型加图像的部分融入 , 做各项文档识别和信息抽取的任务 。
新智元微软亚研院副院长周明:从语言智能到代码智能
本文插图
图11:LayoutLM: Text Layout Pre-training
预训练模型的应用包括问答、多语言问答、文本理解和视频章节提取等 。
新智元微软亚研院副院长周明:从语言智能到代码智能
本文插图
图12:预训练模型的应用
为促进预训练模型发展 , 微软发布数据集 XGLUE , 该数据集覆盖十几种语言 , 包含几十个任务 。
新智元微软亚研院副院长周明:从语言智能到代码智能
本文插图
图13:数据集XGLUE
如何用预训练模型做代码智能
从Excel的智能化操作 , 到自然语言查询转换为 SQL 的数据库操作 , 再到 GPT-3 自动生成代码 , 代码智能的实际应用在不断革新和扩大 。 那么 , 用预训练模型如何做代码智能?
1. 将代码特点融入预训练模型
通过将代码融入预训练模型 , 用代码训练 BERT , 得到包含代码的预训练模型;通过融入有文本注释的代码进一步训练模型 , 可以得到具有代码和文本的 CodeBERT 。
此外 , 代码具有结构 , 代码之间的变量有顺序关系 , 需要抽取变量之间的依赖关系或相同关系来构建模型 , 对于给定的代码 , 可以用程序包得到代码对应的抽象语法树(AST),将抓取的代码特点融入模型 , 训练建立新的具有代码结构的 CodeBERT 。
CodeBERT是一个可处理双模态数据的新预训练模型 , 使用了 Transformer 作为基本网络结构 , 采用混合目标函数:掩码语言模型和替换 Token 检测 。

新智元微软亚研院副院长周明:从语言智能到代码智能
本文插图
图14:CodeBERT——Pre-Train with Code
新智元微软亚研院副院长周明:从语言智能到代码智能
本文插图
图15:CodeBERT:Pre-Train with code + Text
新智元微软亚研院副院长周明:从语言智能到代码智能
本文插图
图16:CodeBERT——Pre-Train with Code + Text + Structure
同样 , 可以通过已有的GPT模型训练得到 CodeGPT 。
新智元微软亚研院副院长周明:从语言智能到代码智能
本文插图
图17:CodeGPT
基于以上模型 , 进行代码智能的实验 , 构建Fine-tuning框架 。 该框架中 , CodeBERT主要用于分析 , 而codeGPT用于生成 , Encoder Decoder 用于实现不同语言串之间的转化 , 其中Encoder部分可以利用CodeBERT进行初始化 。
代码智能的下游任务包括代码搜索(Code Search)、代码完成(Code Completion)、代码修复(Code Repair)和代码翻译(Code Translation)等 , 实验发现 , 代码智能在自然语言代码检索、修复 , 文档生成、翻译等任务上均取得了 SOTA 效果 。


推荐阅读