今天在 KDnuggets 看到一篇好文章 :
此文對 Python 六大自然語言處理函式庫進行了評比 , 剛好我最近在研讀 NLP, 所以仔細看了全文, 對於這六大套件的優劣算是有了一個粗略的印象, 內容摘要翻譯整理如下 :
- 自然語言處理包含下列次領域 :
(1). 語音辨識與生成 (speech recognition & generation)
(2). 文本分析 (text analysis)
(3). 情緒分析 (sentiment analysis)
(4). 機器翻譯 (machine translation) - 研究 NLP 除了需要數學與機器學習基礎外, 還要具有語言學概念.
- NLP 函式庫讓文本的前置處理 (preprocessing) 大幅簡化, 使我們可以專心於機器學習模型之建立與超參數 (superparameter) 的微調.
- Python NLP 六大函式庫 :
(1). NLTK
(2). SpaCy
(3). Scikit-Learn
(4). Gensim
(5). Pattern
(6). Polyglot
其中 NLTK 是最知名且歷史悠久的 NLP 套件, 彈性大且支援最多語言, 但執行速度較慢, 學習曲線較陡, 且無神經網路模型. SpaCy 的處理速度最快, 易學易用屬於工業級產品, 但只支援 7 種語言. Scikit-Learn 提供廣泛的演算法來建立模型, 但前處理時無法使用神經網路, 需靠其他套件支援. Gensim 支持深度學習, 但主要是設計用來建立非監督式的文本模型, 且其工具無法支持完整的 NLP 作業管線 (pipeline). Pattern 提供了主要的 NLP 功能且內建網頁爬蟲 API, 但它主要是一個網頁探勘套件, 無法對某些特定的 NLP 作業進行優化. Polyglot 支援最多達 196 種語言, 但處理效能較慢且社群支持較少. - 目前最受歡迎的 NLP 套件是 NLTK 與 SpaCy, 兩者也互為主要的競爭者. NLTK 較偏向學術性, 使用者可測試其所提供的各種方法與演算法, 或混用它們. SpaCy 則對每個問題提供開箱即用 (out-of-box) 的單一解決方案, 所以也不需要去比較哪個方法較好. SpaCy 的優勢是其工業級的處理效能 (是 NLTK 的好幾倍), 可惜所支援的語言數目較少, 不過也在持續增加中. 因此在大部分的情況下建議採用 SpaCy, 如果想嘗試一些不同的做法也可考慮使用 NLTK 來做.
我以前安裝完 NLTK 後做了簡單測試就放下了, 因為它所提供的方法有點多, 光是 tokenization (斷詞) 的函數就好幾個, 最近稍微看了一下 SpaCy 的用法, 發覺 SpaCy 乾脆俐落, 它不會提供一大堆函數來處理相同的問題, 而且內建的模型也考慮到語境 (context), 所以斷詞的結果非常正確, 所以我想先學學 SpaCy, 以後有需要再來玩看看 NLTK.
沒有留言:
張貼留言