我在阿里云做前端代码智能化
作為一個(gè)整天以代碼為伴的碼農(nóng),避免不了會(huì)接觸到各種代碼提示工具,但是呢,用久了之后會(huì)發(fā)現(xiàn)他們都有個(gè)共同點(diǎn),那就是?模型巨大,動(dòng)輒幾百兆;并且模型大必然需要更多的計(jì)算,同樣會(huì)導(dǎo)致電腦內(nèi)存占用高,風(fēng)扇呼呼的轉(zhuǎn),時(shí)間久了逐漸會(huì)發(fā)現(xiàn)電腦存儲(chǔ)不夠用了,電腦變卡了等等問(wèn)題。
那么,有沒(méi)有一款輕量化的代碼提示插件?或者說(shuō),如何實(shí)現(xiàn)一款輕量化的代碼提示插件呢?
下面我會(huì)從 模型選擇、模型實(shí)現(xiàn)、模型優(yōu)化三個(gè)方面 來(lái)介紹我們?cè)诖a智能提示方面的一些實(shí)踐。
模型選擇
?如何衡量一個(gè)模型的效果是好還是不好呢?
我們首先建立了基本的模型衡量體系,見(jiàn)下圖。
我們會(huì)從推薦的準(zhǔn)確性、完整性、連續(xù)性、性能、個(gè)性化以及智能性六個(gè)維度去綜合評(píng)價(jià)一個(gè)模型的優(yōu)劣。之后,我們會(huì)進(jìn)一步完善這個(gè)體系,使之能夠系統(tǒng)完整的評(píng)測(cè)模型的效果。
實(shí)踐中,我們選取了 GPT-2模型和基于markov的n-gram統(tǒng)計(jì)模型進(jìn)行對(duì)比。
對(duì)比發(fā)現(xiàn),GPT-2模型在準(zhǔn)確性和完整性方面表現(xiàn)優(yōu)異,但是在性能方面,由于模型較大,推薦一次耗時(shí)較久,(這里我們?cè)嚵俗钌賲?shù)的版本,訓(xùn)練之后模型在500M左右,推薦一次大概需要10S?),由于暫時(shí)沒(méi)找到模型壓縮的方法,只能暫時(shí)放棄。
另一個(gè)n-gram模型,在測(cè)試后發(fā)現(xiàn),它在持續(xù)推薦和性能?方面表現(xiàn)優(yōu)異,模型大小僅有40M,但也并非完美,在準(zhǔn)確性和完整性方面表現(xiàn)的不是很好。
在實(shí)踐中,我們發(fā)現(xiàn),推薦耗時(shí)在毫秒級(jí)別能夠使用戶順暢無(wú)阻礙的編寫(xiě)下去,多于1s,則會(huì)讓用戶的輸入產(chǎn)生停頓。 基于此我們暫時(shí)選取n-gram作為我們的推薦模型。
模型實(shí)現(xiàn)
下面介紹一下n-gram模型的基本原理以及我們的實(shí)現(xiàn)。
首先,n-gram模型基于馬爾可夫鏈的假設(shè),即:當(dāng)前這個(gè)詞出現(xiàn)的概率僅僅跟前面幾個(gè)有限的詞相關(guān)。 以最簡(jiǎn)單的n=2為例,即 下一個(gè)詞出現(xiàn)的概率僅跟之前一個(gè)詞相關(guān),基于這個(gè)思想,我們將大量代碼進(jìn)行切分,這樣我們得到了很多的二元組,這里可以使用單詞的出現(xiàn)次數(shù)代表概率。這樣,我們根據(jù)一個(gè)詞就可以得到一個(gè)不同概率分布的推薦列表,然后每次都以當(dāng)前詞進(jìn)行推薦,就可以產(chǎn)生持續(xù)不斷的推薦了。切分的效果參考這張圖
以下是模型訓(xùn)練和產(chǎn)生推薦的大致流程。
模型優(yōu)化
在真實(shí)應(yīng)用中,僅僅有這些是遠(yuǎn)遠(yuǎn)不夠的。模型只是其中一部分,更多的應(yīng)該是在應(yīng)用過(guò)程中,依據(jù)實(shí)踐經(jīng)驗(yàn)和用戶的反饋,對(duì)模型進(jìn)行不斷調(diào)優(yōu):
比如,在實(shí)際應(yīng)用中,基于同一個(gè)上下文,我們一般會(huì)同時(shí)產(chǎn)生基于n=3,n=4等等不通粒度的推薦,我們會(huì)給不通粒度賦予不同的權(quán)重,然后結(jié)合概率進(jìn)行篩選和排序,并且根據(jù)實(shí)際效果以及我們的反饋體系,對(duì)權(quán)重進(jìn)行斷優(yōu)化,確保產(chǎn)生最佳效果的推薦。
另外,為了讓推薦更加個(gè)性化,我們的模型需要具備實(shí)時(shí)訓(xùn)練的能力,即用戶的輸入在產(chǎn)生推薦的同時(shí),還要參與模型的增量訓(xùn)練,并根據(jù)用戶實(shí)際的選擇對(duì)模型進(jìn)行調(diào)優(yōu),確保模型的準(zhǔn)確性和個(gè)性化,大致流程圖如下
還有,為了得到更加輕量的模型,我們對(duì)語(yǔ)料庫(kù)也進(jìn)行了精簡(jiǎn),比如,在初始模型中,我們對(duì)出現(xiàn)概率極低的語(yǔ)料進(jìn)行了刪減,保持模型的輕巧和高效,同時(shí)由于具備實(shí)時(shí)訓(xùn)練的能力,確保這個(gè)操作不會(huì)影響到推薦的準(zhǔn)確率。
結(jié)語(yǔ)
當(dāng)然,目前的這些對(duì)于一個(gè)輕巧好用的代碼提示來(lái)說(shuō)是遠(yuǎn)遠(yuǎn)不夠的,當(dāng)前我們正在嘗試完善模型的衡量體系?,并且在嘗試更多輕量的語(yǔ)言模型,希望給用戶提供完美的體驗(yàn)。
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的我在阿里云做前端代码智能化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为什么Spring仍然会是云原生时代最佳
- 下一篇: 2017年html5行业报告,云适配发布