本文转载自量子位

有的人能把代码写成推理小说。

需要一个临时变量的时候就叫temp,需要多个就叫var1var2

甚至用拼音缩写当函数名,比如查询订单就叫cxdd

要想看懂这样的代码,得联系上下文反复推敲,还原每个部分的真实作用。

这个过程叫做反混淆(Deobfuscation)。

麻烦,着实麻烦。就没有省事儿点的办法吗?

AI来啊!

最近,Facebook就出了这样一个语言模型DOBF,专治代码混淆。

像下图这种,所有不影响运行的变量名、函数名、类名,都被替换成无意义的符号,AI都能作出猜测并尝试还原。

来看看和正确答案的对比,虽然不是完全一样,但AI的改法也大大提高了代码的可读性。

像FUNC_0,源代码中是“重置参数”,AI改成“初始化权重”,也完全说得通。

DOBF模型目前除了Python还支持C++和Java。

编码不规范的人毕竟是少数,这个模型更广泛的用途是恢复故意做混淆以保护知识产权的代码,比如这种:

代码写好后,把不影响编译运行的部分,批量替换成人类难以分辨的符号,给破译增加难度。

在这之前也有掩码语言模型(Masked Language Model)用于恢复被遮蔽的文本。

用于恢复代码的有哈工大&微软开发的CodeBERT和Facebook之前开发的TransCoder,但效果都不如最新的DOBF。

DOBF超过它们靠的不是模型架构上的创新或数据集的完善,而是提出了新的预训练任务

合理的任务指导AI学习

之前的掩码语言模型多是随机选择要掩蔽的部分,经常会选到括号逗号这种对AI来说没什么难度的。

DOBF的做法是指定遮蔽变量名、函数名和类名并让AI去恢复,这个任务难度更大,能迫使AI学到更深层的规律。

另外还用相同的符号替代多次出现的同一名称,这样可以防止AI发现有的名字可以复制粘贴之后学会偷懒走捷径。

像上图中的变量V3,AI从第3行的定义可以看出这个变量是List类型,再一看第5行调用的是pop(0)。

这不是先进先出嘛,AI就会命名成queue(队列)而不是stack(堆栈)了。

更厉害的还在后面,DOBF通过代码内容甚至能判断出相应函数是生成斐波那契数列做向量点积的。

DOBF在架构上其实没有特别的设计,只是为了公平对比分别训练了两个和CodeBERT、TransCoder层数一样的模型。

成功的关键之处就在于合理的训练任务。

微调一下能完成更多任务

验证了这个方法有效后,Facebook把这个训练任务提取出来称为DOBF任务,还可以用于训练其他语言模型。

比如在TransCoder模型上把DOBF作为预训练任务,再用CodeXGLUE基准测试中的下游任务进行微调。

结果在代码抄袭检测总结代码生成文档、和自然语言搜索代码片段这3个任务上,使用DOBF或MLM+DOBF预训练都取得了更好的成绩。

Facebook下一步还要以DOBF作为指导,看看能不能为自然语言设计更好的预训练目标。

不过代码上的事还不算完,人类在混淆代码上可是无所不用其极的。

期待着有一天,AI连国际C语言混乱代码大赛上的变态代码也能看懂。

AI根据代码内容可自动起函数名相关推荐

  1. 提高代码质量:如何编写函数

    原文地址:http://luopq.com/2016/02/21/write-good-function/  函数是实现程序功能的最基本单位,每一个程序都是由一个个最基本的函数构成的.写好一个函数是提 ...

  2. C/C++函数名修饰约定

    函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型. 正在装载数据-- LINK程序或其他工 ...

  3. Linux函数名加数字,C++ 编译器的函数名修饰规则

    函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型.LINK程序或其他工具有时需要指定函数的 ...

  4. python return返回值格式化_day11__函数名的应用,python新特f-strings格式化输出、迭代器...

    一.函数名的应用 ​函数名的定义和变量的定义几乎一致,在变量的角度,函数名其实就是一个变量,具有变量的功能:可以赋值:但是作为函数名他也有特殊的功能就是加上()就会执行对应的函数,所以我们可以把函数名 ...

  5. 看看函数名和注释,AI就能自动生成代码,程序员:这不真实,我要失业

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:机器之心  参与:张倩.Racoon X.Jamin 你 ...

  6. LIVE 预告 | CMU研究者:解放审稿人,AI可以帮我们实现自动审稿吗?

    2021一开年,众多顶会投稿截止日期也在日渐邻近. 各大AI顶会论文呈现井喷之势的同时,审稿人们也在花费越来越多的精力在审稿过程中.作者们越来越普遍地开始抱怨会议中的论文评审随机性增加.不公正现象出现 ...

  7. 织梦缩略图自动补齐绝对路径_[教程]织梦CMS缩略图和文章内容图片自动转化为带域名的绝对路径...

    今天又接了个织梦CMS的有偿服务,客户想要后台添加文章内容的时候,缩略图自动变成带上绝对路径的格式. 比如我们默认的缩略图是这样的 /uploads/allimg/150814/123P2NB-0-l ...

  8. AI 补代码神器诞生,百度网盘克星诞生,Google 取消中国搜索引擎项目! | 开发者周刊...

    整理 | 张红月 出品 | CSDN(ID:CSDNnews) 本周热门项目    TabNine:支持23种语言及5种主流编辑器AI补代码工具问世(下附链接) https://github.com/ ...

  9. IDEA 设置代码提示或自动补全的快捷键

    IDEA 设置代码提示或自动补全的快捷键 (附IntelliJ IDEA常用快捷键) 修改方法如下: 点击 文件菜单(File) –> 点击 设置(Settings- Ctrl+Alt+S), ...

  10. CSDN周刊:AI补代码神器问世,百度网盘克星诞生,Google 已经取消中国搜索引擎项目!

    CSDN开发者周刊:只为传递"有趣/有用"的开发者内容,点击Star(Github)! 本周热门项目 1.TabNine:支持23种语言及5种主流编辑器AI补代码工具问世 一位来自 ...

最新文章

  1. C#类型反射、晚期绑定、特性编程的使用背景与分析
  2. VS2017断点调试UNITY2018.3 经常卡住的问题
  3. C指针原理(6)-C内嵌汇编
  4. 519. 随机翻转矩阵
  5. Flume安装(单节点)
  6. 读《大道至简—是懒人造就了方法 》有感
  7. 搜狗王小川:搜狗的语音识别比阿里和科大讯飞的好
  8. 心音与心电信号分析之一--6.26--心音信号数字滤波
  9. DOS批处理高级教程
  10. 有关office2016图标显示异常的解决办法(亲测一天,终于解决!!!!)
  11. 中国步进电机市场现状研究分析与发展前景预测报告(2022)
  12. 12.2总结(纵使结局不如意,放弃实属下下签。)
  13. 幂法求矩阵的最大特征值和对应特征向量
  14. 如何正确使用 GC.SuppressFinalize()?
  15. 怎么样把pdf压缩到最小
  16. 用html做完整网页效果
  17. OpenCms 带分页的新闻列表
  18. 10 Minutes to pandas----十分钟搞定Pandas
  19. 力扣 532. 数组中的 k-diff 数对
  20. python中迭代对象是什么_python中的迭代对象和迭代器

热门文章

  1. 一图看懂人工智能技术体系
  2. 分享一个无意间发现的躺赚网络创业小项目!
  3. Python学习笔记(三)列表
  4. 抽象的数码艺术-分形艺术
  5. java 二进制转换为十进制_二进制转换十进制 算法解析
  6. 【08月02日】指数估值排名
  7. Pandas数据分析与处理补充习题
  8. u盘虚拟启动cd linux,[CDLinux]制作U盘CDLinux系统启动盘
  9. winrar解压器_最好的解压软件,没有之一
  10. 面试官:兄弟,说说基本类型和包装类型的区别吧