阅读本文大概需要 3 分钟。

如果能创建一个桌面软件,将自然语言直接转换成相关的 Python 数据分析代码,工作就方便了。

这不,有俩「好事」的程序员耐不住寂寞,把这个工具做出来。

近日,两个外国小哥 Kartik Godawat 和 Deepak Rawat 开发了一个 Jupyter 插件 Text2Code,可以将自然语言查询转换成相关的 Python 数据分析代码。

灵感来自 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

参考链接:

https://towardsdatascience.com/data-analysis-made-easy-text2code-for-jupyter-notebook-5380e89bb493

推荐阅读

1

10 月 1 日之后,你新建的 GitHub 库默认分支不叫「master」了

2

突发!Windows XP 源代码泄露

3

图解 | 数字签名和数字证书的前世今生

4‍‍

官方正式的发布 GitHub 命令行客户端真香 !

崔庆才

静觅博客博主,《Python3网络爬虫开发实战》作者

隐形字

个人公众号:进击的Coder

长按识别二维码关注

好文和朋友一起看~

GitHub 热榜:一个能将文本快速转化为代码的 Python 神器!相关推荐

  1. GitHub热榜第一,标星近万:这个用Python做交互式图形的项目火了

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI GitHub上,一份用Python做交互式图形的资源火了. 这一工具名为Bokeh,官方介绍称,它能读取大型数据集或者流数据,以简单快速的 ...

  2. GitHub热榜,零基础学C++教程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 零基 ...

  3. 这张「二维码」火到了GitHub热榜第一:扫一扫,打破系统边界,文件秒传

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 这张「二维码」,今天火到了GitHub热榜第一. 为什么这么火? 只要扫描这张二维码,通过Wi-Fi,文件就可以在电脑和手机之间互传--文件 ...

  4. 滴滴开源AI项目登上GitHub热榜,人机对话模型可从论文到产品部署无缝衔接

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 没想到,滴滴开源的自然语言理解(人机对话)模型训练平台,就这样登上了GitHub热榜. 这一项目名为DELTA,是一个深度学习模型训练框架 ...

  5. 把命令行玩成“迷你谷歌”:可搜索、计算,还能翻译 | GitHub热榜

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 还在用浏览器打开谷歌.百度 ...

  6. Github热榜:中英文识别OCR模型,百度开源媲美收费软件!

    近日,百度飞桨正式开源了业界最小的超轻量8.6M中英文识别OCR模型套件PaddleOCR,在模型大小.精度和预测速度上,甚至超过了之前一度登上GitHub热榜的chineseocr_lite(5.1 ...

  7. 零基础学C++进腾讯,这份GitHub热榜的「从入门到高薪」请你收下

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 零基础想学C++进大厂?这件事其实没那么难. 一位国内在读研究生的C++学习指南本月初登上了Github热榜,目前已经收割2000星. 避 ...

  8. GitHub 热榜:中国博士开发可交互全球疫情地图,登上柳叶刀!

    点击上方"视学算法",选择"星标"公众号 重磅干货,第一时间送达 转自量子位,作者郭一璞 一个多月前,当你被困在家里无法出门的时候,可能每天早上第一件事就是看看 ...

  9. 谷歌ALBERT模型V2+中文版来了:之前刷新NLP各大基准,现在GitHub热榜第二

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者:十三.发自.凹非寺 转自:量子位(QbitAI),未经允许不得二次转载 比BER ...

最新文章

  1. 深度解读!新一代大数据引擎Flink厉害在哪?(附实现原理细节)
  2. nginx前端根据$remote_addr分发方法
  3. Linux内存中的 buffer 和 cache 到底是个什么东东?
  4. [SDOI2018] 旧试题
  5. 简书显示服务器错误,openfire服务器异常处理
  6. 栈的动态顺序存储和实现(C语言)【栈】(7)
  7. visual studio c/c++变量内存地址里的cc是什么意思?
  8. C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程
  9. netsh interface portproxy 转发不生效_SecureCRT远程端口转发不生效的解决方法
  10. IP地址转化为数字,charindex ,SUBSTRING
  11. java 变成题_Java 习题8 参考答案及解析
  12. LeetCode 451 根据字符出现频率排序
  13. 【转】Leopard 安装教程
  14. excel 第六次人口普查_第六次全国人口普查表短表(标准版)
  15. Nginx 架构原理
  16. 软考高项-案例分析背诵
  17. 数学建模算法:层次分析法之如何选择旅游目的地
  18. 2021年高压电工模拟考试题及高压电工模拟考试题库
  19. 用letax写毕业论文-- 原创性声明、承诺书、授权书
  20. 基于51单片机的恒温加热系统--main.c文件

热门文章

  1. ID基本操作(创建主页,复制主页,把主页应用到多个页面)5.11
  2. 【Tips】购车、提车注意事项
  3. 四节1.5V的5号电池、一个电容、一个12V的报警蜂鸣器、铜线和螺母,在螺母所栓的铜线触发接通电源后,缓慢放电10秒,制作一个简易震动报警器,需要用什么样的电容合适?...
  4. java中show方法的调用_Java方法调用细节
  5. 长期当程序员会失去什么?
  6. 移动通信关键技术-多址技术和复用技术
  7. 安装Oracle 10g RAC是否需要安装HACMP (zt)
  8. Jenkins安装教程-包教包会
  9. 搭建redis高可用:主从、哨兵、集群
  10. 静态类型语言和动态类型语言