自然語(yǔ)言處理之路:工具——七種兵器
一個(gè)自然語(yǔ)言處理煉丹師的自白
往期:
欲善其事撇簿,必先利其器垄提。這一篇介紹個(gè)人在研究中常用的工具抱既,這些可以成倍地提高你的效率,不用為一些細(xì)節(jié)的東西浪費(fèi)時(shí)間炸枣,而專注于自己的想法穆役。
首先,假設(shè)這樣一個(gè)場(chǎng)景踩叭,我們?cè)谝粋€(gè)小實(shí)驗(yàn)室。最近翠胰,終于用經(jīng)費(fèi)買(mǎi)了帶GPU的服務(wù)器容贝,于是再不用去超算和大家排隊(duì)搶計(jì)算資源了。但是之景,現(xiàn)在我們得先知道如何使用服務(wù)器嗤疯,來(lái)訓(xùn)練我們模型才行,不然也只會(huì)對(duì)著金山光流口水闺兢。
第一步,我們得連接上服務(wù)器戏罢,并使用那邊的終端屋谭。
遠(yuǎn)程登錄(SSH)
這里我們可以使用基于 SSH 的一些工具來(lái)連接服務(wù)器。
在 Windows 系統(tǒng)龟糕,可以試試常用的 PuTTY桐磁。但我個(gè)人更推薦目前在用的 Xshell,在一些設(shè)置上更加方便讲岁。而且雖然這是款商業(yè)軟件我擂,但我們可以申請(qǐng)研究免費(fèi)許可。當(dāng)然缓艳,還有種是直接在 Windows 上用 shell 命令行校摩,通過(guò)安裝 Cygwin 。
在 Mac 和 Linux 系統(tǒng)阶淘,直接打開(kāi)終端 ssh 過(guò)去就好了衙吩。
關(guān)于將自己文件拷到服務(wù)器,可以用 scp 或 rsync 命令溪窒。更多 SSH 相關(guān)常用的命令坤塞,可以查看這篇文章《如何使用SSH》冯勉。
這樣就連接上了服務(wù)器,但又會(huì)遇得到新問(wèn)題:如何使用終端環(huán)境摹芙。因?yàn)榇藭r(shí)沒(méi)有了熟悉的圖像界面灼狰,只有黑色的窗口和閃滅的命令行,讓人手足無(wú)措浮禾。
Linux 命令行 (Shell)
要在這樣一個(gè)環(huán)境下生存下來(lái)交胚,那我們就得了解一些“咒語(yǔ)”,即命令行中的各種命令伐厌。每個(gè)咒語(yǔ)都有著其獨(dú)特的功用承绸,對(duì)于這些咒語(yǔ),一些基礎(chǔ)的初級(jí)咒語(yǔ)比如 ls, cd, less 這些挣轨,高級(jí)的一些比如 awk, sed军熏,掌握的咒語(yǔ)越多你就會(huì)越得心應(yīng)手,效率更高卷扮。到那時(shí)荡澎,反過(guò)來(lái)還會(huì)去 diss 圖形界面。順便 vim 的操作也可以了解下晤锹。
最初摩幔,我從 Windows 轉(zhuǎn)過(guò)來(lái)也費(fèi)了很多勁。先是在東芝實(shí)習(xí)時(shí)鞭铆,需要研究 Linux 內(nèi)核或衡,就稍微接觸了一些。但之后又不用了车遂,直到最近需要在 GPU 上跑程序封断,重新?lián)炱饋?lái),時(shí)間一長(zhǎng)舶担,就習(xí)慣了坡疼。
自己比較喜歡的學(xué)習(xí)資源,是被稱為 TLCL (The Linux Command Line) 的一本很贊的書(shū)衣陶,有中文翻譯版柄瑰,先快速照著書(shū)練習(xí)一遍就好了,之后可以回頭細(xì)細(xì)看剪况。
此外相關(guān)學(xué)習(xí)資源很多教沾,搜索一下就有。當(dāng) Shell 熟練后拯欧,就可以寫(xiě)大殺器详囤,shell 腳本,讓自己的工作完全自動(dòng)化。自動(dòng)下載數(shù)據(jù)藏姐,自動(dòng)前處理隆箩,自動(dòng)訓(xùn)練模型,自動(dòng)分析結(jié)果... 那你呢羔杨,去玩吧捌臊,多虧了它我才能天天到處浪。
于是這樣兜材,就可以開(kāi)始寫(xiě)代碼了理澎。
Python
人生苦短,大家都用Python曙寡。所以我們也用糠爬,首先深度學(xué)習(xí)現(xiàn)在的主流框架,基本都是 Python 寫(xiě)的举庶,而且 Python 好用且易上手执隧,特別在處理數(shù)據(jù)上面,有各種成熟的模塊户侥。
關(guān)于 Python 的資源就更數(shù)不勝數(shù)镀琉,這里列出幾個(gè)我用過(guò)的非常棒的學(xué)習(xí)資源:
Udacity 的 101 Intro to Computer Science:很棒的 CS 入門(mén)課程,因?yàn)槔锩嬗?Python 來(lái)寫(xiě)代碼蕊唐,所以上完之后 Python 基礎(chǔ)也學(xué)差不多了屋摔。
還有 MIT 的 Introduction to Computer Science and Programming Using Python,也是計(jì)算機(jī)科學(xué)與 Python替梨,但比上面講得更深一些钓试。
中文資料,我推薦廖雪峰的 Python 教程副瀑,和前兩個(gè)不同亚侠。這個(gè)主要講 Python,看看前面部分俗扇,網(wǎng)絡(luò)編程后的不看也行。
會(huì)了 Python 之后箕别,此刻你可能擼起袖子準(zhǔn)備大干特干了铜幽。來(lái)!用 Python 從底層實(shí)現(xiàn)一個(gè)深度學(xué)習(xí)模型串稀!3秒鐘讓你從入門(mén)到放棄除抛。所以最好還是拿來(lái)主義 ,用已有成熟的深度學(xué)習(xí)框架就好了(值得一提:用 Python 還有 Numpy 從底層實(shí)現(xiàn)母截,其實(shí)對(duì)理解深度學(xué)習(xí)非常有幫助)到忽。
深度學(xué)習(xí)框架 (Framework)
跟著 Python 語(yǔ)言,再介紹幾個(gè)基于 Python 的主流深度學(xué)習(xí)框架〈框架部分我就不說(shuō)孰好孰壞了护蝶,稍微點(diǎn)一下,說(shuō)說(shuō)自己用過(guò)的:
Pytorch:目前我主要用的框架翩迈。特點(diǎn)是代碼符合 Python 編碼哲學(xué)持灰,簡(jiǎn)潔而且優(yōu)美,自己定制的空間也比較大负饲,此外 debug 的時(shí)候也很方便找堤魁。比較適合用于科研,最近越來(lái)越火了返十,首先 fast.ai 已經(jīng)開(kāi)始用它來(lái)教學(xué)妥泉,還有把 caffe 也給合并了。
Tensorflow:因?yàn)橛?Google 這個(gè)爹洞坑,所以可能是最流行的一個(gè)框架吧(我們都是 TF Boys)盲链。因?yàn)樯鐓^(qū)大所以基本上什么代碼都能找到,個(gè)人認(rèn)為 TensorFlow 更適合產(chǎn)品開(kāi)發(fā)检诗。
Keras:在 Kaggle 上玩的時(shí)候用過(guò)匈仗,非常傻瓜式,簡(jiǎn)單好學(xué)逢慌。
關(guān)于更多詳細(xì)比較悠轩,可以查看李飛飛 CS231n 的深度學(xué)習(xí)框架的PPT。
OK攻泼,現(xiàn)在就能寫(xiě)出自己的模型火架,然后在 GPU 上跑了。但對(duì)于深度學(xué)習(xí)任務(wù)忙菠,除了 GPU 計(jì)算資源何鸡,還有一個(gè)很重要的是數(shù)據(jù)。
》直接進(jìn)行數(shù)據(jù)處理牛欢,當(dāng)然厲害的大觸們是可以做到的骡男,但對(duì)于一般人,我推薦有很好交互性的工具傍睹,Jupyter Notebook隔盛。
Jupyter Notebook
可以把它當(dāng)成一個(gè)網(wǎng)頁(yè)應(yīng)用,視覺(jué)化地編輯服務(wù)器端的一些文件拾稳,但主要管理 notebook 文件吮炕。 notebook 可以進(jìn)行實(shí)時(shí)的交互,很適合測(cè)試代碼访得。 而且里面可以混雜 Markdown 語(yǔ)句龙亲,代碼,圖片等等,所以很適合進(jìn)行分享鳄炉,以及之后自己閱讀杜耙。
使用時(shí),先需要在服務(wù)器端搭建 Notebook 服務(wù)器迎膜,然后直接瀏覽器訪問(wèn)泥技。
關(guān)于 Jupyter Notebook 的介紹還有使用方法,網(wǎng)上有很多教程磕仅,比如說(shuō)這個(gè)《Jupyter Notebook介紹珊豹、安裝及使用教程 - 知乎專欄》。最近還發(fā)布了相關(guān)的 JupyterLab 榕订,也可以了解一下店茶。
數(shù)據(jù)和模型都搞定了,終于可以跑程序了吧劫恒。是的贩幻,恭喜你,可以跑動(dòng)自己第一個(gè)程序了两嘴。
但跑程序的時(shí)候丛楚,當(dāng)前終端窗口就會(huì)被占用了,不能干其他事情憔辫,比如說(shuō)跑第二個(gè)程序趣些,或進(jìn)行文件操作。這時(shí)你得建立額外的窗口再次連接服務(wù)器贰您。每次都這樣會(huì)特別麻煩坏平,所以就需要一個(gè)在服務(wù)器端直接進(jìn)行分屏的小應(yīng)用。
Tmux (分屏)
Tmux 是個(gè)在終端窗口中分屏锦亦,運(yùn)行多個(gè)終端會(huì)話的工具舶替,同時(shí)還能隨時(shí)斷開(kāi)會(huì)話放入后臺(tái),或者接入杠园。
學(xué)習(xí)的話顾瞪,可以去下一個(gè)備忘單,然后邊用邊查抛蚁。
常用的幾個(gè)命令也就創(chuàng)建玲昧,分屏,還有切換篮绿。
這樣對(duì)于跑程序相關(guān)的就一切都 OK 啦,無(wú)論是想跑一個(gè)吕漂,還是同時(shí)跑 n 個(gè)亲配,隨你喜歡。
但最后還有一點(diǎn)要提,那就是如何管理你的代碼吼虎。
Git & GitHub
首先 Git 必須得會(huì)犬钢,基本上編程弄個(gè)項(xiàng)目都會(huì)用到。Git 的好處是思灰,不會(huì)因?yàn)槭仲v誤刪了某些代碼而找不回來(lái)玷犹;或者突然覺(jué)得以前寫(xiě)得更好而換不回去;或者發(fā)現(xiàn)實(shí)踐各種想法洒疚,結(jié)果搞出一大堆自己都分不清的文件歹颓。特別,在做實(shí)驗(yàn)時(shí)油湖,有很多模型想試巍扛,這時(shí)就建立成多個(gè)分支(branch)來(lái)執(zhí)行。
學(xué)習(xí)資源的話乏德,也有很多這里列兩個(gè)我用過(guò)覺(jué)得挺好的:
說(shuō)到 Git 就得提 GitHub,超級(jí)神器喊括。主要是用來(lái)托管代碼的胧瓜,可以用過(guò) Git 將代碼推到 GitHub,之后自己使用或用于共享郑什。GitHub 還有一個(gè)很厲害的功能是府喳,找代碼。如果你想做任何東西蹦误,或者實(shí)現(xiàn)論文代碼劫拢,做之前可以先搜搜 GitHub,總會(huì)有你意想不到的收獲强胰。
這樣基本上整個(gè)工作流程用到的工具就都有了舱沧,下次再見(jiàn)吧。