AI向程序員老司機(jī)學(xué)習(xí):從眼神變化中尋找bug
NAIST的研究人員把眼球追蹤的研究用在軟件開發(fā)領(lǐng)域,讓智能體從程序員的眼部活動(dòng)中學(xué)習(xí)找bug、打補(bǔ)丁、寫注釋。
用AI找bug這件事,有人嘗試過,結(jié)果翻車了。美國網(wǎng)站Yelp的程序員們?cè)噲D讓AI幫自己找bug,豈料AI卻刪庫跑路,最后只能用回滾的辦法挽回?fù)p失。
當(dāng)然,這只是程序員開的一個(gè)玩笑。但是讓AI找bug一直是程序員們美好的愿望。
育碧和Mozilla曾開發(fā)過一個(gè)AI,能從過去代碼庫的錯(cuò)誤中學(xué)習(xí)找bug,并在今后提交新代碼時(shí)標(biāo)出可能的bug。
然而這些在程序員老司機(jī)面前都是渣渣,大神們往往一個(gè)眼神,就能直接定位到bug所在的位置。如果讓AI直接向大神學(xué)習(xí),豈不更快?
日本奈良先端科學(xué)技術(shù)大學(xué)院大學(xué)(名字有些長,下面簡稱NAIST)的研究人員真的做到了,他們把眼球追蹤的研究用在軟件開發(fā)領(lǐng)域,構(gòu)建了一個(gè)基于模仿學(xué)習(xí)(IL)的框架,讓智能體從程序員的眼部活動(dòng)中學(xué)習(xí)找bug、打補(bǔ)丁、寫注釋。
以往的AI找bug方法是從文本特征中學(xué)習(xí)。而程序員獨(dú)有的注意力策略可以節(jié)省程序理解和維護(hù)的時(shí)間。大神們會(huì)將注意力集中在程序的重要信息上,僅瀏覽源代碼中的關(guān)鍵字。
NAIST的AI就是在軟件開發(fā)中模仿程序員的視覺注意力。結(jié)合程序員眼睛注視的數(shù)據(jù),智能體可以獲得到過去難以學(xué)習(xí)到的注意力策略。
由于程序代碼是文本序列,研究人員用自然語言處理的方法來設(shè)計(jì)智能體。這個(gè)智能體包括兩個(gè)深度神經(jīng)網(wǎng)絡(luò):
第一部分是一個(gè)RNN,用來對(duì)代碼片段的全局上下文進(jìn)行編碼。第二部分是指定任務(wù)解碼器,用上一步的編碼數(shù)據(jù)來預(yù)測(cè)下一步的token。
代碼片段和編程環(huán)境被當(dāng)做一系列token或關(guān)鍵字,智能體被限制專注于模仿程序員視覺注意力的特定子標(biāo)記,作為輸入當(dāng)前狀態(tài)并輸出所需的操作。
這種方法還需要大量的演示數(shù)據(jù)。研究人員建議使用生成對(duì)抗網(wǎng)絡(luò),讓AI學(xué)習(xí)編程大神們的示范操作,而不僅僅是模仿。
總的來說,這種方法利用了模仿學(xué)習(xí),讓智能體從人類示范中收集相關(guān)復(fù)雜任務(wù)的知識(shí)。智能體由行為克隆(behavioral cloning)訓(xùn)練的模型表示。代碼片段和編程環(huán)境被認(rèn)為是一系列token或關(guān)鍵字,智能體被限制去關(guān)注模仿程序員注意到的特定代碼,作為當(dāng)前狀態(tài)的輸入,并輸出所需的操作。
僅僅依靠眼部數(shù)據(jù)還不夠,NAIST團(tuán)隊(duì)還建議用腦電圖(EEG)讀數(shù)視覺注意力的補(bǔ)充數(shù)據(jù)。如果這個(gè)模型在生產(chǎn)環(huán)境中使用,可以提高AI智能體在軟件開發(fā)任務(wù)中的性能。
在論文的最后,研究人員說,即使沒有語言描述,嬰兒也能從父母的演示中學(xué)到了很多東西。他們或許是從嬰兒行為獲得的啟發(fā)??磥鞟I也逃脫不了“復(fù)讀機(jī)”的命運(yùn)。
論文鏈接:https://arxiv.org/abs/1903.06320