開源NLP庫
在開發(fā)和生產(chǎn)中,最受歡迎的NLP庫列表如下:
顯然,NLP領域還有更多的庫。但是,這些庫更通用,涵蓋更多功能,而不只是專注于特定用例。例如,gensim是一個NLP庫,一開始是為構建文本主題模型而創(chuàng)建的,不能用于完整的NLP管道。
在本文的分析中,我們只考慮提供如下核心功能集合的庫:
- 句子檢測
- 單字/單詞的細粒度單位化
- 詞干提取
- 語法標記
- 詞性(POS)
- 命名實體識別(NER)
- 依賴分析器
- 訓練特定域的語言模型
以及,提供以下的部分或全部功能:
- 文本匹配
- 日期匹配
- 文本分塊
- 拼寫檢查
- 情緒檢測
- 很多其他功能!
這里比較的所有五個庫都有一些可以定義的NLP數(shù)據(jù)管線的概念 – 因為大多數(shù)NLP任務需要組合這些功能中的某些,來獲得有用的結果。這些管線,可以是“傳統(tǒng)”的管線,也可以是基于深度學習的管線。

圖片來源:Parsa Ghaffari
這是最受歡迎的NLP庫的功能比較:
| 名稱 | SparkNLP | NLTK | SpaCy | CoreNLP |
| 句子檢測 | 是 | 是 | 是 | 是 |
| 細粒度單位化 | 是 | 是 | 是 | 是 |
| 詞干提取 | 是 | 是 | 是 | 是 |
| 語法 | 是 | 是 | 是 | 是 |
| 磁性標注 | 是 | 是 | 是 | 是 |
| 命名實體識別 | 是 | 是 | 是 | 是 |
| 依賴分析 | 是 | 是 | 是 | 是 |
| 文本匹配 | 是 | 否 | 否 | 是 |
| 日期匹配 | 是 | 否 | 否 | 是 |
| 段落分解 | 是 | 是 | 是 | 是 |
| 拼寫檢查 | 是 | 否 | 否 | 否 |
| 情緒檢測 | 是 | 否 | 否 | 是 |
| 預訓練模型 | 是 | 是 | 是 | 是 |
| 訓練模型 | 是 | 是 | 是 | 是 |
以下是對現(xiàn)代計算平臺和流行編程語言的支持的技術功能比較:
| 特性 | Spark NLP | NLTK | spaCy | CoreNLP | OpenNLP |
| 完整支持JavaAPI | 是 | 否 | 否 | 是 | 是 |
| 完整支持ScalaAPI | 是 | 否 | 否 | 否 | 否 |
| 完整支持PythonAPI | 是 | 是 | 是 | 否 | 否 |
| 支持GPU訓練 | 是 | 否 | 是 | 否 | 否 |
| 支持用戶定義的深度神經(jīng)網(wǎng)絡 | 是 | 否 | 否 | 否 | 否 |
| 原生支持Spark | 是 | 否 | 否 | 否 | 否 |
| 支持Hadoop(YARN以及HDFS) | 是 | 否 | 否 | 否 | 否 |
許可證和支持
“開源”在不同地方意味著不同的事情 – 例如,斯坦福大學的CoreNLP需要商業(yè)用途的付費許可證,而且該許可證仍然不能提供已定義的SLA的商業(yè)支持。希望構建商業(yè)級生產(chǎn)級NLP解決方案的團隊需要一個不斷改進核心庫的活躍社區(qū),以及付費企業(yè)級支持選項。
以下是各種庫在許可和支持方面的對比:
| 名字 | 語言 | 許可證 | 商業(yè)用途 | 商業(yè)支持 |
| SparkNLP | Python, Java, Scala | Apache 2.0 | 是 | 是 |
| spaCy | Python | MIT | 是 | 是 |
| NLTK | Python | Apache 2.0 | 是 | 否 |
| CoreNLP | Java | GNU GPL | 付費許可 | 否 |
| OpenNLP | Java | Apache 2.0 | 是 | 否 |
斯坦福大學出售CoreNLP的商業(yè)許可證,這是商業(yè)用途所必需的。為spaCy提供商業(yè)許可證和支持的explosion.ai同樣也為快速標注迭代工具prodigy、機器學習庫thinc提供許可證。John Snow Labs提供企業(yè)級Spark NLP服務,包括基本版,24×7級別的支持,以及諸如命名實體解析,斷言狀態(tài)檢測、ID脫敏等高級功能。它還為提供 醫(yī)療領域專用的Spark NLP,其中包括一套針對生物醫(yī)學NLP的最先進的模型和數(shù)據(jù)集。
預訓練模型
雖然大多數(shù)NLP庫支持用戶訓練新模型,但NLP庫具有現(xiàn)有的預訓練的高質量模型這一點非常重要。
不過,大多數(shù)NLP庫僅支持通用的預訓練模型(POS,NER等)。由于其許可證的要求,某些庫根據(jù)模型授權狀態(tài),不允許將預訓練模型作商業(yè)用途。
| 名稱 | 通用預訓練模型 | 領域特定預訓練模型 | 許可證是否允許商用 |
| SparkNLP | 有 | 有(醫(yī)療領域) | 有(通用) |
| spaCy | 有 | 無 | 有(某些GPL許可) |
| NLTK | 有 | 無 | 有 |
| CoreNLP | 有 | 無 | 無 |
| OpenNLP | 有 | 無 | 有 |
以下是與每個庫一起打包的通用預訓練模型:
| 名稱 | 語法化 | 詞性標注 | 命名實體識別 | 依賴關系解析 | 拼寫檢查 | 情感分析 |
| SparkNLP | 有 | 有 | 有 | 有 | 有 | 有 |
| spaCy | 有 | 有 | 有 | 有 | 無 | 無 |
| NLTK | 有 | 有 | 有 | 有 | 無 | 無 |
| CoreNLP | 有 | 有 | 有 | 有 | 無 | 有 |
| OpenNLP | 有 | 有 | 有 | 有 | 無 | 無 |
結論
并非所有開源NLP庫都提供相同的功能。鑒于您的編程語言,平臺,許可和支持需求,并非所有工具都可用于您的項目。本文為縮小您選擇范圍,構建了一張快速查詢的備忘單。如果您了解某些新庫、新版本并希望我們對此清單保持更新,請聯(lián)系我們,幫助我們及時了解最新信息。
除了比較工具的功能之外,您的下一個標準應該是比較準確性、速度和可擴展性。祝您在NLP領域中好運!
Maziyar Panah and David Talby
David Talby是Pacific AI的首席技術官。他正在幫助多個快速發(fā)展的公司應用大數(shù)據(jù)和數(shù)據(jù)科學技術來解決醫(yī)療保健、生命科學和相關領域的實際問題。David在構建和運營互聯(lián)網(wǎng)規(guī)模的數(shù)據(jù)科學和業(yè)務平臺以及構建世界一流的敏捷分布的團隊方面擁有豐富的經(jīng)驗。在加入Pacific AI前,他曾在微軟的Bing Group工作,負責Bing Shopping在美國和歐洲的業(yè)務運營。他還在在西雅圖和英國為亞馬遜工作。在那里他建立并管理分布的團隊,幫助擴展亞馬遜財務系統(tǒng)。David擁有計算機科學博士學位和計算機科學碩士與工商管理碩士學位。

