根据ai代码的内容自动从函数人,不再害怕命名的规范的同事
有些人可以把代码写成推理小说
需要一个临时变量时称为temp,需要多个时称为var1、var2。
为了理解这样的代码,必须与上下文相关联,再现各个部分的真正作用。
此过程称为Deobfuscation。
麻烦,真的很麻烦。有没有省事的办法
最近,在“Facebook”中有一个名为DOBF的语言模型。
如下图所示,将不影响执行的变量名、函数名和类名替换为无意义的符号,AI可以推测并尝试恢复。
DOBF模型现在除了Python之外还支持C++和Java。
这个模型被广泛用于恢复那些有意扰乱的代码以保护知识产权。
“遮罩语言模型”用于恢复遮罩文本。
恢复代码有哈工大amp。虽然是在微软开发的CodeBERT和Facebook之前开发的TransCoder,但不像最新的DOBF那样。
DOBF超越的不是模型架构的革新和数据集的改善,而是新的预培训任务的提案。
合理的任务指导AI学习前的掩蔽语言模型,往往会随机选择掩蔽部分,比如括号逗号等,对于AI来说不太难的东西。
在DOBF中,隐藏变量名、函数名、类名,让AI复原,但这个任务难度更大,可以让AI学到更深的规律性。
另外,用同一个符号代替多次出现的同一个名字,可以防止AI发现有可以复制的名字偷工减料。
如上图中的变量V3所示,AI从第三行的定义中了解到这个变量是List型的,看到第五行就会调用pop(0)
不是先入先出吗。AI命名为queue(队列),而不是stack(堆栈)
更厉害的是在这之后,DOBF从代码的内容,判断出该函数生成斐波纳契数列,并进行矢量的点积。
DOBF在体系结构上没有特别设计,但为了公平比较,我们在CodeBERT、TransCoder的相同层数下训练了两个模型。
成功的关键在于适当的培训任务。
如果确定此方法有效,则可以提取此培训任务并将其称为DOBF任务,用于其他语言模型的培训。
例如,在TransCoder模型上,将DOBF作为预培训任务,并在CodeXGLUE基准测试期间的下游任务中进行微调。
结果,在发现代码副本、编写汇总代码和搜索自然语言代码段这三个任务中,使用DOBF或MLM+DOBF预培训会产生更好的结果。
Facebook在下一步中,您可以以DOBF为指导,为自然语言设计更好的预先培训目标。
不仅仅是代码上的事情,人类在使代码混乱上也会想尽一切办法。
希望有一天,连国际C语言混乱代码大赛的异常代码都能读懂AI。
Github地址为https://Github。com/Facebook用于research/codegen程序主机/docs dobf。md
论文地址:https://arxiv.org/abs/2102.07492
国际C语言混乱代码大赛http://www.ioccc.org/
-完成-
量子比特QbitAI头线协议
你可以关注我们,快速了解最先进的技术动向