新聞中心
近日,兩個(gè)外國(guó)小哥Kartik Godawat 和 Deepak Rawat 開(kāi)發(fā)了一個(gè) Jupyter 插件Text2Code,可以將自然語(yǔ)言查詢(xún)轉(zhuǎn)換成相關(guān)的 Python 數(shù)據(jù)分析代碼。

創(chuàng)新互聯(lián)公司專(zhuān)注于敖漢網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供敖漢營(yíng)銷(xiāo)型網(wǎng)站建設(shè),敖漢網(wǎng)站制作、敖漢網(wǎng)頁(yè)設(shè)計(jì)、敖漢網(wǎng)站官網(wǎng)定制、微信平臺(tái)小程序開(kāi)發(fā)服務(wù),打造敖漢網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供敖漢網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
如果能創(chuàng)建一個(gè)桌面軟件,將自然語(yǔ)言直接轉(zhuǎn)換成相關(guān)的 Python 數(shù)據(jù)分析代碼,工作就方便了。
這不,有倆「好事」的程序員耐不住寂寞,把這個(gè)工具做出來(lái)。
靈感來(lái)自GPT-3,自然語(yǔ)言直接轉(zhuǎn)代碼
2020年6月,OpenAI 推出了GPT-3,它不僅具有未來(lái)的 NLP 相關(guān)的諸多功能,而且還能夠生成 React 代碼和shell命令。
倆人從中得到了靈感,他們意識(shí)到在做數(shù)據(jù)分析的時(shí)候,我們經(jīng)常忘記不經(jīng)常使用的 pandas 命令或者語(yǔ)法,需要去搜索,從 StackOverflow 復(fù)制代碼然后需要相應(yīng)地修改變量和列名。
最初他們?cè)噲D把這個(gè)問(wèn)題作為一個(gè)聊天機(jī)器人來(lái)解決,并試圖使用Rasa,但因?yàn)槿狈线m的訓(xùn)練數(shù)據(jù)而夭折了。
他們決定開(kāi)發(fā)一個(gè)監(jiān)督學(xué)習(xí)模型,該模型可以吃進(jìn)自然語(yǔ)言和代碼的對(duì)應(yīng)語(yǔ)料,然后進(jìn)行訓(xùn)練,完整的pipeline包含了下面幾個(gè)步驟:
生成訓(xùn)練數(shù)據(jù)
為了模擬終端的用戶(hù)想向系統(tǒng)查詢(xún)的內(nèi)容,我們開(kāi)始嘗試用英語(yǔ)描述一些命令的格式。
例如:
display a line plot showing $colname on y-axis and $colname on x-axis from $varname
然后,我們通過(guò)使用一個(gè)非常簡(jiǎn)單的生成器來(lái)替換 $colname 和 $varname 來(lái)生成數(shù)據(jù),以獲得訓(xùn)練集中的變量。
意圖匹配
在生成數(shù)據(jù)之后,需要為特定的意圖映射到一個(gè)唯一的「意圖id」,并使用通用語(yǔ)句編碼器獲取用戶(hù)query的embedding,然后用我們預(yù)先定義好的意圖query(生成的數(shù)據(jù))來(lái)得到余弦距離。
「通用句子編碼器」-Universal Sentence Encoder類(lèi)似于 word2vec,會(huì)生成相應(yīng)的embedding,唯一的區(qū)別是這里的嵌入是用于句子而不是單詞。
命名實(shí)體識(shí)別
相同的生成數(shù)據(jù)可以被用來(lái)訓(xùn)練一個(gè)自定義的實(shí)體識(shí)別模型,這個(gè)模型可以用來(lái)檢測(cè)columns,varaibles,library的名字。
為此,作者還研究了 HuggingFace 模型,但最終決定使用 Spacy 來(lái)訓(xùn)練模型,主要是因?yàn)?HuggingFace 模型是基于Transformer的模型,與 Spacy 相比有點(diǎn)過(guò)于復(fù)雜繁重。
填充模板
一旦實(shí)體被正確識(shí)別并且意圖被正確匹配,填充模板就變得非常容易。
例如,“ show 5 rows from df”這個(gè)查詢(xún)將生成兩個(gè)實(shí)體: 一個(gè)變量和一個(gè)數(shù)值。這個(gè)模板代碼編寫(xiě)起來(lái)很簡(jiǎn)單。
與Jupyter結(jié)合
這是所有步驟里最復(fù)雜的一步,因?yàn)闉?Jupyter 編寫(xiě)如此復(fù)雜的擴(kuò)展有點(diǎn)棘手,而且?guī)缀鯖](méi)有文檔或示例參考。
他們通過(guò)一些嘗試并參考已經(jīng)存在的擴(kuò)展,最終將所有內(nèi)容包裝成一個(gè)單獨(dú)的 Python 包,并且可以直接通過(guò) pip 來(lái)安裝。
單單一個(gè)Python包并不能直接使用,于是他們創(chuàng)建了一個(gè)前端以及一個(gè)服務(wù)器擴(kuò)展,當(dāng) jupyter notebook啟動(dòng)時(shí),就會(huì)被加載。前端向服務(wù)器發(fā)送查詢(xún)以獲取生成的模板代碼,然后將其插入notebook的對(duì)應(yīng)單元并執(zhí)行它。
Text2Code的演示
模型也會(huì)失效,但數(shù)據(jù)分析師真的省事了
就像許多機(jī)器學(xué)習(xí)模型一樣,有時(shí)候意圖匹配和命名實(shí)體識(shí)別效果會(huì)很差,即使這個(gè)意圖對(duì)人來(lái)說(shuō)非常簡(jiǎn)單。
有時(shí)也會(huì)識(shí)別不到意圖,就無(wú)法生成正確的代碼,作者還考慮使用下面的方法來(lái)進(jìn)一步改進(jìn)插件的效果。
收集/生成高質(zhì)量的英語(yǔ)訓(xùn)練數(shù)據(jù),可以考慮從quroa,StackOverflow爬取更多的高贊回答,嘗試用不同的方式來(lái)描述相同的內(nèi)容,增強(qiáng)數(shù)據(jù);收集真實(shí)世界的變量名和庫(kù)名,而不是隨機(jī)生成,使用基于Transformer的模型嘗試命名實(shí)體識(shí)別。
如果這個(gè)模型訓(xùn)練的足夠好,對(duì)數(shù)據(jù)分析師來(lái),能省不少事了。
項(xiàng)目開(kāi)源地址:
https://github.com/deepklarity/jupyter-text2code
新聞名稱(chēng):無(wú)需GPT-3!國(guó)外小哥徒手開(kāi)發(fā)Text2Code,數(shù)據(jù)分析代碼一鍵生成
網(wǎng)站路徑:http://m.5511xx.com/article/dhcsdjp.html


咨詢(xún)
建站咨詢(xún)
