这不,有俩「坏事」的顺序员耐不住寂寞,把这个工具做出来。
灵感来自GPT-3,自然言语直接转代码2020年6月,OpenAI 推出了GPT-3,它不只具有未来的 NLP 相关的诸多功用,而且还可以生成 React 代码和shell命令。
俩人从中失掉了灵感,他们看法到在做数据剖析的时分,我们常常遗忘不常常运用的 pandas 命令或许语法,需求去搜索,从 StackOverflow 复制代码然后需求相应地修正变量和列名。
最后他们试图把这个成绩作为一个聊天机器人来处置,并试图运用Rasa,但由于缺乏适宜的训练数据而夭折了。
他们决议开发一个监视学习模型,该模型可以吃进自然言语和代码的对应语料,然后停止训练,残缺的pipeline包含了下面几个步骤:
生成训练数据
为了模拟终端的用户想向系统查询的内容,我们末尾尝试用英语描画一些命令的格式。
例如:
display a line plot showing $colname on y-axis and $colname on x-axis from $varname
然后,我们经过运用一个十分复杂的生成器来交流 $colname 和 $varname 来生成数据,以取得训练集中的变量。
意图婚配
在生成数据之后,需求为特定的意图映射到一个独一的「意图id」,并运用通用语句编码器获取用户query的embedding,然后用我们预先定义好的意图query(生成的数据)来失掉余弦距离。
「通用句子编码器」-Universal Sentence Encoder相似于 word2vec,会生成相应的embedding,独一的区别是这里的嵌入是用于句子而不是单词。
命名实体辨认
相反的生成数据可以被用来训练一个自定义的实体辨认模型,这个模型可以用来检测columns,varaibles,library的名字。
为此,作者还研讨了 HuggingFace 模型,但最终决议运用 Spacy 来训练模型,主要是由于 HuggingFace 模型是基于Transformer的模型,与 Spacy 相比有点过于复杂繁重。
填充模板
一旦实体被正确辨认并且意图被正确婚配,填充模板就变得十分容易。
例如,“ show 5 rows from df”这个查询将生成两个实体: 一个变量和一个数值。这个模板代码编写起来很复杂。
与Jupyter结合
这是一切步骤里最复杂的一步,由于为 Jupyter 编写如此复杂的扩展有点顺手,而且简直没有文档或示例参考。
他们经过一些尝试并参考曾经存在的扩展,最终将一切内容包装成一个独自的 Python 包,并且可以直接经过 pip 来安装。
单单一个Python包并不能直接运用,于是他们创立了一个前端以及一个效劳器扩展,当 jupyter notebook启动时,就会被加载。前端向效劳器发送查询以获取生成的模板代码,然后将其插入notebook的对应单元并执行它。
Text2Code的演示
模型也会失效,但数据剖析师真的省事了就像许多机器学习模型一样,有时分意图婚配和命名实体辨认效果会很差,即使这个意图对人来说十分复杂。
有时也会辨认不到意图,就无法生成正确的代码,作者还思索运用下面的办法来进一步改良插件的效果。
搜集/生成高质量的英语训练数据,可以思索从quroa,StackOverflow爬取更多的高赞回答,尝试用不同的方式来描画相反的内容,增强数据;搜集真实世界的变量名和库名,而不是随机生成,运用基于Transformer的模型尝试命名实体辨认。
假设这个模型训练的足够好,对数据剖析师来,能省不少事了。
项目开源地址:
https://github.com/deepklarity/jupyter-text2code
【编辑引荐】
教你一招Linux下文本比对办法
用开源工具 Pulp 管理你的软件仓库
高能清点:10个物联网开发工具,收藏了
7种过时的代码作风
融云CTO杨攀: Geek Online 2020编程应战赛 让开发者站上C位
(责任编辑:admin)