機器學習發展到現在,已經積累了非常多的文章,特別是深度學習火起來後,每年新增加的論文非常多,如果需要研究某個領域,不僅需要閱讀這個領域經典的論文,也必須時刻關注最新的學術進展,比如最近兩年特別火的 GAN,不僅需要先了解它的第一篇開山之作–“Generative Adversarial Nets”,也需要關注最新發表的該領域的論文。
而查詢論文,除了直接谷歌搜尋外,通常都會到 arxiv 網站上查詢,下圖顯示的是在計算機視覺和模式識別這個類別下的最新論文:
不過,從上圖也可以知道,這裡僅僅展示了論文名字和作者、發表時間等資訊,如果是熟悉的作者,比如一些大牛,當然就值得我們一看,但如果作者不熟悉,就只能通過論文名字判斷是否值得點選論文名字,檢視論文簡介,再通過論文簡介判斷是否值得下載 pdf 來精讀或者泛讀。
如果可以,我們當然希望在這個頁面就可以展示論文簡介,這樣可以減少一個步驟。
所以今天推薦一個基於 arXiv 提供的 API 實現的更加易於閱讀機器學習方面論文的網站,網站如下所示:
上圖左上角,可以這個網站目前收集了過去幾年大約總共 62820 篇論文,都是機器學習方面的論文,然後下方有幾個選項卡,分別是:
most recent
展示最新的論文。對於每篇論文,都會展示名字、作者、發表時間,論文的圖示,論文的簡介,然後可以下載 pdf,並且還可以搜尋相似論文和有討論區。
不過對於討論區,似乎因為使用人數不多,或者是發表評論的人不多,直接展示的論文基本都沒有評論留言,需要直接點選discussions這個選項卡才會展示有評論的論文,但基本都是隻有一條評論,不多於兩條評論。
top recent
根據登入使用者收藏到其 library 的論文展示,可以選擇展示最近幾天的範圍,包括最近一天、三天、一週、一個月、一年以及所有。
top hype
這主要是展示在 Twitter 上提及過的論文,可以檢視提及的使用者,以及發的 twitter 內容,不過我看基本都是屬於直接轉發 arxiv 的官方twitter 發表的推文,類似於我們直接轉發微博。
後面的幾個選項卡,除了discussions,其餘幾個都是需要進行登入的,friends就是展示你朋友的論文,recommanded就是基於你收藏在你的library的論文來展示,這裡開發者還給出採用的方法,是基於 SVM 演算法。
Github 專案
這個網站的實現程式碼是開源在 Github 上的:
其中通過 Arxiv API 查詢論文的程式碼檔案是fetch_papers.py
,可以在這個程式碼中改變希望查詢的論文類別,不僅僅是機器學習。對於 Arxiv API ,可以檢視說明文件,文件地址:
程式碼結構
根據作者介紹,程式碼主要分為兩部分:
查詢程式碼
通過 Arxiv API 來下載指定類別的最新論文,並提取每篇論文的內容來提取文字,建立tfidf
向量,這部分程式碼需要考慮的就是後端爬取和計算方面的功能:
- 建立一個 arxiv 論文的資料庫
- 計算內容向量
- 生成略縮圖
- 給使用者計算 SVMs
- 等等
使用者介面
這部分是一個網頁端的伺服器(基於 Flask/Tornado/sqlite),實現通過資料庫查詢論文,根據相似性來過濾使用者,等功能。
依賴庫
需要的依賴庫包括:
- numpy
- feedparser–解析 xml 檔案
- scikit learn–處理 tfidef 向量,並實現 SVM 演算法
- flask–展示結果
- flask_limiter
- tornado
- dateutil
- scipy
- sqlite3
上述依賴庫可以通過下列命令來安裝:
$ virtualenv env # optional: use virtualenv$ source env/bin/activate # optional: use virtualenv$ pip install -r requirements.txt複製程式碼
除此外,還需要ImageMagick
和pdftotext
,在Ubuntu
可以通過命令安裝:
sudo apt-get install imagemagick poppler-utils複製程式碼
但這個命令會還需要繼續安裝其他依賴庫
執行流程
整個專案的執行流程需要依次執行好幾個指令碼檔案,這裡最好仔細檢視每個指令碼程式碼,它們包含不少設定,這些設定可能是你希望修改的。按如下順序來依次執行下列程式碼:
fetch_papers.py
:通過 arxiv API 進行查詢並建立一個包含每篇論文所有資訊的檔案db.p
。這份程式碼可以修改你想查詢的內容,比如不是查詢機器學習,而是其他計算機內容,如資料庫等類別。這裡需要注意,**一次性查詢太多論文會受到 arxiv 的限制,**所以最好分批執行這份程式碼,並通過引數--start-index
來設定每次重新執行時的起始位置;download_pdfs.py
:下載論文並儲存到資料夾pdf
;parse_pdf_to_text.py
:輸出所有 pdfs 中的文字部分,儲存到txt
資料夾thumb_pdf.py
:生成 pdfs 的略縮圖,儲存到資料夾thumb
analyze.py
:基於bigrams
來計算所有文件的tfidf
向量,生成檔案tfidf.p
,tfidf_meta.p
,sim_dict.p
buildsvm.py
:對所有使用者訓練 SVMs ,並輸出檔案user_sim.p
make_cache.py
:主要是進行預處理來加快伺服器啟動的速度,如果是第一次執行該程式碼需要確保執行命令sqlite3 as.db <
來初始化一個空的資料庫
schema.sql- 在後臺開啟一個
mongodb
守護程式。Mongodb可以通過這篇教程來安裝–docs.mongodb.com/tutorials/i…sudo service mongod start
命令開啟 mongodb 服務- 確定服務在後臺執行:在檔案
/var/log/mongodb/mongod.log
中最後一行必須是[initandlisten] waiting for connections on port <
port>
- 執行
serve.py
程式碼來開啟flask
服務。通過訪問localhost:5000
來檢視最終執行的效果!
另外,也可以執行twitter_daemon.py
來啟動一個螢幕會話,它會採用你的twitter
API(儲存在檔案twitter.txt
)來查詢在 Twitter 上被提及到的在資料庫中的論文,並儲存結果到檔案twitter.p
。
作者寫了一個簡單的命令列指令碼依次執行上述程式碼,每天都會執行依次這個指令碼來抓取新的論文,並儲存到現有資料庫中,然後重新計算所有的tfidf
向量或分類器。
注意:對於程式碼analyze.py
,它利用numpy
來做很多計算工資,這裡推薦安裝BLAS
(比如OpenBLAS
)方面的庫來提高計算速度,安裝後,對於 25000 篇論文和 5000 多個使用者僅需要幾個小時即可完成計算。
線上執行
如果希望線上執行flask
伺服器,比如在 AWS 上,執行命令python serve.py --prod
。
另外,你還需要建立一個金鑰檔案secret_key.txt
,並新增隨機的文字(具體做法可以檢視server.py
程式碼)
當前工作流程
目前對於該網站還不能實現全自動,需要每天都手動執行部分程式碼來獲取最新的論文,這裡作者給出剛剛提到的指令碼檔案內容:
python fetch_papers.pypython download_pdfs.pypython parse_pdf_to_text.pypython thumb_pdf.pypython analyze.pypython buildsvm.pypython make_cache.py複製程式碼
然後會通過一個螢幕會話執行服務,這需要執行命令screen -S serve
來建立會話(或者引數-r
來重新連線),然後執行下列命令:
python serve.py --prod --port 80複製程式碼
那麼伺服器會載入新的檔案並展示在網站上。不過有些系統可能需要加上命令sudo
才可以使用 80 埠,這裡有兩個解決辦法,一個是使用iptables
來變更埠,或者採用setcap
來提高你的python
直譯器的許可權,參考文章:
stackoverflow.com/questions/4…
但對於這個方法,需要謹慎使用,最好是採用virtualenv
等虛擬環境。
小結
最後,再次給出網站和專案的地址:
點選原文,也可以直接跳轉到 Github 上。
也可以在後臺留言,獲取網站和專案地址,以及打包好的程式碼,步驟如下:
- 關注”機器學習與計算機視覺”公眾號
- 回覆關鍵詞:arxiv
歡迎關注我的微信公眾號–機器學習與計算機視覺,或者掃描下方的二維碼,大家一起交流,學習和進步!
之前分享的資源和教程文章有: