第二次結對編程做業

baseline 復現

咱們選擇的 baseline 是 CodeNet。CodeNet 的模型能夠用以下的圖描述:git

模型的輸入由兩個主要的分支組成。一支接受代碼信息(方法名、API 序列、tokens 等),另外一隻則接受文檔描述信息。咱們的任務是將兩種輸入轉化成爲類似的 vector (即圖中的 code vector 和 docstring vector)。模型使用了 RNN/MLP 的結構對輸入作特徵抽取。在網絡的最後,CodeNet 將代碼匹配視爲二分類任務(匹配上與未匹配上),對提取出的 code vector 和 docstring vector 作監督。github

CodeNet 是基於 CodeNN 作改進的。它們最大的不一樣之處是,CodeNN 使用餘弦類似度計算 vector 的 loss,而 CodeNet 則將匹配任務視爲二分類問題。CodeNet 這種改進能夠提升匹配的準確率,但隨之而來的是搜索時計算量的提升。CodeNN 在訓練完成後只需對 code 和 docstring 分別作特徵提取,便可拋開 model 投入生產環境,預測時用餘弦類似度做爲標準進行搜索便可。但 CodeNet 在生產環境中還需保留最後的 MLP 層,這裏有額外的計算開銷。編程

復現時遇到的最大問題是 CodeNet 的代碼不完整,同時 README 與實際代碼有若干不一致的地方。具體而言,CodeNet 的代碼庫中缺乏了 transformer.py 這個文件,咱們因而模仿 ·cleaner.py` 的寫法將其恢復出來。README 與代碼主要是參數的名字有些不一致,這些都不是什麼大問題。網絡

咱們復現時使用 py_github 數據集。訓練時咱們使用 1e-3 做爲學習率,並在單卡上訓練 200 epochs,花費 6 個小時。咱們最終性能以下:性能

dataset precision auc acc@top5 acc@top10
val(pool=200) 0.8926 0.9519 0.5060 0.6942
val(pool=800) 0.2199 0.3549
test(pool=200) 0.8918 0.9507 0.5151 0.6959
test(pool=800) 0.3615 0.2255

基本達到 README 中提到的性能(甚至超過)。但奇怪的是 test 上的性能竟然比 validation set 的性能還要好。此處咱們還要細究緣由。學習

對夥伴的評價

本次結對編程的夥伴是和紀言同窗。結對編程時咱們都比較忙,所以沒有花太多額外的時間,同時線下交流比較少,咱們的工做主要時線上完成的。我的感受夥伴對ML有許多本身的想法,同時代碼能力也很強。code

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息