自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AI根據(jù)代碼內(nèi)容自動起函數(shù)名,再也不怕命名不規(guī)范的同事了

新聞 人工智能
最近,F(xiàn)acebook就出了這樣一個語言模型DOBF,專治代碼混淆。所有不影響運行的變量名、函數(shù)名、類名,都被替換成無意義的符號,AI都能作出猜測并嘗試還原。

 [[414747]]

本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。

有的人能把代碼寫成推理小說。

需要一個臨時變量的時候就叫temp,需要多個就叫var1,var2

甚至用拼音縮寫當(dāng)函數(shù)名,比如查詢訂單就叫cxdd

要想看懂這樣的代碼,得聯(lián)系上下文反復(fù)推敲,還原每個部分的真實作用。

這個過程叫做反混淆(Deobfuscation)。

麻煩,著實麻煩。就沒有省事兒點的辦法嗎?

AI來??!

最近,F(xiàn)acebook就出了這樣一個語言模型DOBF,專治代碼混淆。

像下圖這種,所有不影響運行的變量名、函數(shù)名、類名,都被替換成無意義的符號,AI都能作出猜測并嘗試還原。

AI根據(jù)代碼內(nèi)容自動起函數(shù)名,再也不怕命名不規(guī)范的同事了

來看看和正確答案的對比,雖然不是完全一樣,但AI的改法也大大提高了代碼的可讀性。

AI根據(jù)代碼內(nèi)容自動起函數(shù)名,再也不怕命名不規(guī)范的同事了

像FUNC_0,源代碼中是“重置參數(shù)”,AI改成“初始化權(quán)重”,也完全說得通。

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

編碼不規(guī)范的人畢竟是少數(shù),這個模型更廣泛的用途是恢復(fù)故意做混淆以保護知識產(chǎn)權(quán)的代碼,比如這種:

AI根據(jù)代碼內(nèi)容自動起函數(shù)名,再也不怕命名不規(guī)范的同事了

代碼寫好后,把不影響編譯運行的部分,批量替換成人類難以分辨的符號,給破譯增加難度。

在這之前也有掩碼語言模型(Masked Language Model)用于恢復(fù)被遮蔽的文本。

用于恢復(fù)代碼的有哈工大&微軟開發(fā)的CodeBERT和Facebook之前開發(fā)的TransCoder,但效果都不如最新的DOBF。

DOBF超過它們靠的不是模型架構(gòu)上的創(chuàng)新或數(shù)據(jù)集的完善,而是提出了新的預(yù)訓(xùn)練任務(wù)

合理的任務(wù)指導(dǎo)AI學(xué)習(xí)

之前的掩碼語言模型多是隨機選擇要掩蔽的部分,經(jīng)常會選到括號逗號這種對AI來說沒什么難度的。

DOBF的做法是指定遮蔽變量名、函數(shù)名和類名并讓AI去恢復(fù),這個任務(wù)難度更大,能迫使AI學(xué)到更深層的規(guī)律。

另外還用相同的符號替代多次出現(xiàn)的同一名稱,這樣可以防止AI發(fā)現(xiàn)有的名字可以復(fù)制粘貼之后學(xué)會偷懶走捷徑。

AI根據(jù)代碼內(nèi)容自動起函數(shù)名,再也不怕命名不規(guī)范的同事了

像上圖中的變量V3,AI從第3行的定義可以看出這個變量是List類型,再一看第5行調(diào)用的是pop(0)。

這不是先進先出嘛,AI就會命名成queue(隊列)而不是stack(堆棧)了。

更厲害的還在后面,DOBF通過代碼內(nèi)容甚至能判斷出相應(yīng)函數(shù)是生成斐波那契數(shù)列做向量點積的。

AI根據(jù)代碼內(nèi)容自動起函數(shù)名,再也不怕命名不規(guī)范的同事了

DOBF在架構(gòu)上其實沒有特別的設(shè)計,只是為了公平對比分別訓(xùn)練了兩個和CodeBERT、TransCoder層數(shù)一樣的模型。

成功的關(guān)鍵之處就在于合理的訓(xùn)練任務(wù)。

微調(diào)一下能完成更多任務(wù)

驗證了這個方法有效后,F(xiàn)acebook把這個訓(xùn)練任務(wù)提取出來稱為DOBF任務(wù),還可以用于訓(xùn)練其他語言模型。

比如在TransCoder模型上把DOBF作為預(yù)訓(xùn)練任務(wù),再用CodeXGLUE基準(zhǔn)測試中的下游任務(wù)進行微調(diào)。

結(jié)果在代碼抄襲檢測、總結(jié)代碼生成文檔、和自然語言搜索代碼片段這3個任務(wù)上,使用DOBF或MLM+DOBF預(yù)訓(xùn)練都取得了更好的成績。

AI根據(jù)代碼內(nèi)容自動起函數(shù)名,再也不怕命名不規(guī)范的同事了

Facebook下一步還要以DOBF作為指導(dǎo),看看能不能為自然語言設(shè)計更好的預(yù)訓(xùn)練目標(biāo)。

不過代碼上的事還不算完,人類在混淆代碼上可是無所不用其極的。

期待著有一天,AI連國際C語言混亂代碼大賽上的變態(tài)代碼也能看懂。

AI根據(jù)代碼內(nèi)容自動起函數(shù)名,再也不怕命名不規(guī)范的同事了

Github地址:

https://github.com/facebookresearch/CodeGen/blob/master/docs/dobf.md

論文地址:

https://arxiv.org/abs/2102.07492

國際C語言混亂代碼大賽:

http://www.ioccc.org/

 

 

責(zé)任編輯:張燕妮 來源: 量子位
相關(guān)推薦

2020-01-21 21:15:16

WiFi網(wǎng)絡(luò)WiFi6

2020-04-20 15:00:22

DevOps工具代碼

2020-05-07 09:05:22

電腦Python代碼

2022-04-14 10:22:30

NginxLinux

2019-12-26 09:38:57

GitHub工具 wxpy

2025-02-28 09:47:36

2021-08-12 11:05:07

C++語言內(nèi)存泄露

2021-03-19 09:55:15

Linuxshell命令

2021-05-08 07:53:33

面試線程池系統(tǒng)

2020-05-07 16:08:28

Linuxshell命令

2019-08-19 14:59:49

GitHub代碼開發(fā)者

2022-09-20 14:30:24

腳本工具SQL數(shù)據(jù)庫

2018-05-18 14:39:46

華為 華為云

2024-06-20 12:51:37

PythonTermcolor

2014-07-18 15:54:04

goTenna:隨身無

2021-03-26 15:18:11

代碼工具Mockoon

2025-04-25 10:00:00

2020-07-14 20:03:55

Windows 10Windows微軟

2023-11-28 17:49:51

watch?computed?性能

2020-04-30 09:19:56

Docker容器虛擬機
點贊
收藏

51CTO技術(shù)棧公眾號