[Github 專案推薦] 一個更好閱讀和查詢論文的網站

spearhead_cai發表於2019-01-13

機器學習發展到現在,已經積累了非常多的文章,特別是深度學習火起來後,每年新增加的論文非常多,如果需要研究某個領域,不僅需要閱讀這個領域經典的論文,也必須時刻關注最新的學術進展,比如最近兩年特別火的 GAN,不僅需要先了解它的第一篇開山之作--"Generative Adversarial Nets",也需要關注最新發表的該領域的論文。

而查詢論文,除了直接谷歌搜尋外,通常都會到 arxiv 網站上查詢,下圖顯示的是在計算機視覺和模式識別這個類別下的最新論文:

[Github 專案推薦] 一個更好閱讀和查詢論文的網站

不過,從上圖也可以知道,這裡僅僅展示了論文名字和作者、發表時間等資訊,如果是熟悉的作者,比如一些大牛,當然就值得我們一看,但如果作者不熟悉,就只能通過論文名字判斷是否值得點選論文名字,檢視論文簡介,再通過論文簡介判斷是否值得下載 pdf 來精讀或者泛讀。

如果可以,我們當然希望在這個頁面就可以展示論文簡介,這樣可以減少一個步驟。

所以今天推薦一個基於 arXiv 提供的 API 實現的更加易於閱讀機器學習方面論文的網站,網站如下所示:

網址:www.arxiv-sanity.com/

[Github 專案推薦] 一個更好閱讀和查詢論文的網站

上圖左上角,可以這個網站目前收集了過去幾年大約總共 62820 篇論文,都是機器學習方面的論文,然後下方有幾個選項卡,分別是:

most recent

展示最新的論文。對於每篇論文,都會展示名字、作者、發表時間,論文的圖示,論文的簡介,然後可以下載 pdf,並且還可以搜尋相似論文和有討論區。

不過對於討論區,似乎因為使用人數不多,或者是發表評論的人不多,直接展示的論文基本都沒有評論留言,需要直接點選discussions這個選項卡才會展示有評論的論文,但基本都是隻有一條評論,不多於兩條評論。

top recent

根據登入使用者收藏到其 library 的論文展示,可以選擇展示最近幾天的範圍,包括最近一天、三天、一週、一個月、一年以及所有。

[Github 專案推薦] 一個更好閱讀和查詢論文的網站

top hype

這主要是展示在 Twitter 上提及過的論文,可以檢視提及的使用者,以及發的 twitter 內容,不過我看基本都是屬於直接轉發 arxiv 的官方twitter 發表的推文,類似於我們直接轉發微博。

[Github 專案推薦] 一個更好閱讀和查詢論文的網站

後面的幾個選項卡,除了discussions,其餘幾個都是需要進行登入的,friends就是展示你朋友的論文,recommanded就是基於你收藏在你的library的論文來展示,這裡開發者還給出採用的方法,是基於 SVM 演算法。

Github 專案

這個網站的實現程式碼是開源在 Github 上的:

github.com/karpathy/ar…

[Github 專案推薦] 一個更好閱讀和查詢論文的網站

其中通過 Arxiv API 查詢論文的程式碼檔案是fetch_papers.py,可以在這個程式碼中改變希望查詢的論文類別,不僅僅是機器學習。對於 Arxiv API ,可以檢視說明文件,文件地址:

arxiv.org/help/api/us…

程式碼結構

根據作者介紹,程式碼主要分為兩部分:

查詢程式碼

通過 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
複製程式碼

除此外,還需要ImageMagickpdftotext,在Ubuntu可以通過命令安裝:

sudo apt-get install imagemagick poppler-utils
複製程式碼

但這個命令會還需要繼續安裝其他依賴庫

執行流程

整個專案的執行流程需要依次執行好幾個指令碼檔案,這裡最好仔細檢視每個指令碼程式碼,它們包含不少設定,這些設定可能是你希望修改的。按如下順序來依次執行下列程式碼:

  1. fetch_papers.py:通過 arxiv API 進行查詢並建立一個包含每篇論文所有資訊的檔案db.p。這份程式碼可以修改你想查詢的內容,比如不是查詢機器學習,而是其他計算機內容,如資料庫等類別。這裡需要注意,**一次性查詢太多論文會受到 arxiv 的限制,**所以最好分批執行這份程式碼,並通過引數--start-index來設定每次重新執行時的起始位置;
  2. download_pdfs.py:下載論文並儲存到資料夾pdf
  3. parse_pdf_to_text.py:輸出所有 pdfs 中的文字部分,儲存到txt資料夾
  4. thumb_pdf.py:生成 pdfs 的略縮圖,儲存到資料夾thumb
  5. analyze.py:基於bigrams來計算所有文件的tfidf向量,生成檔案tfidf.p,tfidf_meta.p,sim_dict.p
  6. buildsvm.py:對所有使用者訓練 SVMs ,並輸出檔案user_sim.p
  7. make_cache.py:主要是進行預處理來加快伺服器啟動的速度,如果是第一次執行該程式碼需要確保執行命令sqlite3 as.db < schema.sql來初始化一個空的資料庫
  8. 在後臺開啟一個mongodb守護程式。Mongodb可以通過這篇教程來安裝--docs.mongodb.com/tutorials/i…
    • sudo service mongod start命令開啟 mongodb 服務
    • 確定服務在後臺執行:在檔案/var/log/mongodb/mongod.log中最後一行必須是[initandlisten] waiting for connections on port <port>
  9. 執行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.py
python download_pdfs.py
python parse_pdf_to_text.py
python thumb_pdf.py
python analyze.py
python buildsvm.py
python make_cache.py
複製程式碼

然後會通過一個螢幕會話執行服務,這需要執行命令screen -S serve來建立會話(或者引數-r來重新連線),然後執行下列命令:

python serve.py --prod --port 80
複製程式碼

那麼伺服器會載入新的檔案並展示在網站上。不過有些系統可能需要加上命令sudo才可以使用 80 埠,這裡有兩個解決辦法,一個是使用iptables來變更埠,或者採用setcap來提高你的python直譯器的許可權,參考文章:

stackoverflow.com/questions/4…

但對於這個方法,需要謹慎使用,最好是採用virtualenv等虛擬環境。


小結

最後,再次給出網站和專案的地址:

www.arxiv-sanity.com/

github.com/karpathy/ar…

點選原文,也可以直接跳轉到 Github 上。

也可以在後臺留言,獲取網站和專案地址,以及打包好的程式碼,步驟如下:

  1. 關注"機器學習與計算機視覺"公眾號
  2. 回覆關鍵詞:arxiv

歡迎關注我的微信公眾號--機器學習與計算機視覺,或者掃描下方的二維碼,大家一起交流,學習和進步!

[Github 專案推薦] 一個更好閱讀和查詢論文的網站

之前分享的資源和教程文章有:

相關文章