敲代碼遇到難題怎么辦?這個(gè)項(xiàng)目無需聯(lián)網(wǎng)也能幫你找到解決方案
許多開發(fā)人員在編程過程中碰到問題,首選都是打開瀏覽器,搜索問題,并嘗試找出答案,現(xiàn)在,有一個(gè)神器可以讓你不用這么麻煩了。
這個(gè)名為codequestion的神器,是一個(gè)基于archive.org上的Stack Exchange Dump構(gòu)建的。使用來自Stack Exchange的數(shù)據(jù),codequestion針對(duì)預(yù)先訓(xùn)練的模型在本地運(yùn)行。
安裝后你無需網(wǎng)絡(luò)連接,你只需要在終端輸入問題,就可以得到答案,搜索出來的結(jié)果和你在瀏覽器上搜索的沒有什么兩樣。
目前,codequestion知道的人并不是很多,只獲得 117 個(gè)Star,累計(jì)分支 11 個(gè)(Github地址:https://github.com/neuml/codequestion),下面一起來看看具體使用方法:
安裝方式
最簡(jiǎn)單的安裝方式是通過pip和PyPI:
- pip install codequestion
你也可以直接從GitHub安裝codequestion。建議使用Python虛擬環(huán)境,支持Python 3.6+:
- pip install git+https://github.com/neuml/codequestion
下載模型
一旦安裝了Codequestion,就需要下載模型。
- python -m codequestion.download
該模型將存儲(chǔ)在〜/ .codequestion /中,預(yù)訓(xùn)練的模型可以從Github詳情頁面獲取
- $ git reset --hard
可以自定義代碼問題以針對(duì)自定義的問題解答存儲(chǔ)庫運(yùn)行,目前,僅支持Stack Exchange模型。
運(yùn)行查詢
運(yùn)行查詢最快的方法是啟動(dòng)一個(gè)codequestion shell
- $ git reset --hard
技術(shù)原理
原始數(shù)據(jù)轉(zhuǎn)儲(chǔ)處理:codequestion的運(yùn)行原理是怎樣的呢?首先是原始數(shù)據(jù)轉(zhuǎn)儲(chǔ)處理,來自Stack Exchange庫的原始7z XML轉(zhuǎn)儲(chǔ)通過一系列步驟進(jìn)行處理。僅檢索得分高且得分高的問題存儲(chǔ),問題和答案被合并到一個(gè)名為questions.db的SQLite文件中。questions.db的模式如下:
- $ git reset --hard
索引編制:codequestion工具為questions.db建立了一個(gè)句子嵌入索引。單詞嵌入模型是基于questions.db構(gòu)建的自定義fastText模型。一旦將每個(gè)標(biāo)記轉(zhuǎn)換為單詞嵌入,就會(huì)創(chuàng)建加權(quán)句子嵌入。詞嵌入使用BM25索引對(duì)資源庫中的所有token進(jìn)行加權(quán)。但有一個(gè)重要的修改:標(biāo)簽被用來提升標(biāo)簽標(biāo)記的權(quán)重。將questions.db轉(zhuǎn)換為句子嵌入的集合后,會(huì)將它們標(biāo)準(zhǔn)化并存儲(chǔ)在Faiss中,從而可以進(jìn)行快速相似性搜索。
查詢方式:codequestion使用與索引相同的方法對(duì)每個(gè)查詢進(jìn)行標(biāo)記。這些標(biāo)記用于構(gòu)建句子嵌入。針對(duì)Faiss索引查詢?cè)撉度?,以找到最相似的問題。
除此之外,創(chuàng)建者還在Github項(xiàng)目詳情頁介紹了如何使用Stack Exchange構(gòu)建代碼問題模型。感興趣的伙伴們趕緊收藏。