近日,史丹佛大學開源了 Stanford.NLP for .Net,為自然語言處理領域的開發者們提供幫助。顧名思義,它是 Stanford NLP 為.NET 準備的版本。
連結:https://sergey-tihon.github.io/Stanford.NLP.NET/
該專案包含使用使用 IKVM.NET 將 Stanford NLP.jar 軟體包重新編譯到.NET 中的構建指令碼,這些軟體經過測試可以有效工作,該工具包的介紹網站是:https://sergey-tihon.github.io/Stanford.NLP.NET/
所有重編譯軟體包在 NuGet 上:https://www.nuget.org/packages?q=Stanford.NLP
其中包含:
- Stanford.NLP.CoreNLP
- Stanford.NLP.NER
- Stanford.NLP.Parser
- Stanford.NLP.POSTagger
- Stanford.NLP.Segmenter
- Stanford.NLP.CoreNLP
Stanford CoreNLP 提供了一組自然語言分析工具,可採用原始的英文文字輸入,並提供單詞的基本形式、讀音形式、無論它們是公司名還是人名等,以及規範化日期、時間和數字數量。它根據短語和單詞之間的聯絡來標記句子的結構,並可指出哪個名詞短語指向相同實體。
Stanford CoreNLP 是一個整合框架,可以讓你輕鬆使用語言分析工具來分析一段文字。在純文字的基礎上,你可以使用僅僅兩行程式碼來執行整個工具。它的分析為更高階別和特定領域的文字理解應用提供了基礎。
Stanford CoreNLP 整合了所有 Stanford NLP 工具,其中包括(POS)標記器、命名實體識別器(NER)、解析器、核心分析系統和情緒分析工具,並提供了英文分析模型檔案。這一專案的目的是方便人們更快、更輕鬆地獲得完整的自然語言文字語言註釋。它的設計是高度靈活且可擴充套件的。使用一個選項,你就可以選擇啟用哪些工具、禁用哪些。
Stanford.NLP.Parser
它適用於處理句子之中的語法結構。例如,哪些單詞是聚合在一起的(作為短語)哪些單詞是主題或物件動詞。概率解析器使用手工標記的句子中獲得知識,試圖對新句子產生有意義的分析。這些基於統計的解析器雖然仍然可能產生錯誤,但通常工作得很好。它們的發展是 20 世紀 90 年代自然語言處理領域的最大突破之一。
你可以在這裡嘗試使用它:http://nlp.stanford.edu:8080/parser/
詞彙化的概率解析器通過單獨的 PCFG 結構和語法依賴實現了因子產生模型,其中的偏好通過有效精準推理結合 A*演算法形成。同時,該軟體也可以簡單地用作準確的無索引隨機上下文無關語法解析器。兩者都可以作為效能良好的統計解析系統使用。在解析器中,有一個 GUI(Java)可用於檢視解析器的短語結構樹輸出。
該解析器不僅有英文版本,還適用於一些其他語言。包括基於 Chinese Treebank 的中文解析器,基於 Negra 語料庫的的與解析器,基於 Penn Arabic Treebank 的阿拉伯語解析器,以及義大利語、保加利亞語和葡萄牙語。
該解析器提供 Stanford Dependencies 輸出,以及解析結構樹。型別的依賴關係也被稱為語法關係。這種風格的輸出僅適用於中文和英文,更多細節可參考:https://nlp.stanford.edu/software/stanford-dependencies.shtml
Stanford.NLP.NER
Stanford NER 是一個 Named Entity Recognizer 的實現。命名實體識別(NER)標籤在文字序列中代指事物,如人、公司名、基因和蛋白質名稱。它配有仔細設計的特徵提取器,用於命名實體識別,以及許多用於定義特徵提取器的其他選項,其中包含三種分類(PERSON、ORGANIZATION、LOCATION)的英語識別器,Stanford NLP Group 也在原專案頁面中提供了其他不同語言和環境的模型,包括僅訓練過 CoNLL 2003 資料集的版本:https://nlp.stanford.edu/software/CRF-NER.html
Stanford NER 也被稱為 CRFClassifier。該軟體提供(任意順序)線性鏈條件隨機場(CRF)序列模型的通用實現。這意味著通過訓練自己的模型,你實際上可以使用該程式碼為任何任務構建序列模型。
Stanford.NLP.POSTagger
A Part-Of-Speech Tagger(POS Tagger) 是一個可以用某些語言來讀取文字的軟體,它可以把部分語音(和其它標記)分配到每一個單詞上,比如、動詞、形容詞等,儘管一般的計算型應用使用的是像「名詞複數」這樣的更細密的 POS 標籤。
完整版下載包含三個訓練過的 English 標籤器模型,一個 Arabic 標籤器模型,一個 Chinese 標籤器模型,和一個德語標籤器模型。兩種版本都包括相同的原始碼和其它必需的檔案。給定 POS 標註的訓練文字,標籤器可以在任何語言上進行重複訓練。
詞類名縮寫(Part-of-speech name abbreviations):英文標籤器使用的是 Penn Treebank 標籤集。這裡有 Penn Treebank POS 標籤集的相關文獻連線(http://acl.ldc.upenn.edu/J/J93/J93-2004.pdf,http://www.comp.leeds.ac.uk/amalgam/tagsets/upenn.html,http://www.computing.dcu.ie/~acahill/tagset.html)。標籤器在 GNU General Public License 下被授權,包含原始碼。軟體包包括命令列呼叫,伺服器執行和一個 Java API。
Stanford.NLP.Segmenter
原生文字的標記化(Tokenization)是許多 NLP 任務的標準預處理步驟。對英語來說,標記化通常包括標點符號分離和一些詞綴的分離。其它語言則需要更大量的標記預處理,通常叫做分割(segmentation)。
The Stanford Word Segmenter(史丹佛詞彙分割器)現在支援阿拉伯語和中文。它所提供的分割方法已經在大量應用中廣泛應用,並且表現不俗。
史丹佛 NLP 組推薦對包含長句的檔案使用至少 1G 的儲存。
分割器現在已經可以下載,在 GNU General Public License 下被授權,包含原始碼。軟體包包括命令列呼叫和一個 Java API。
分割器程式碼被雙重授權(與 MySQL 的方式相類似)。開源許可是經過全部授權的,很多使用都是免費的。
安裝
a. 選擇適用於任務的軟體包。如果你的任務非常複雜,需要深度分析,請使用 Stanford CoreNLP
b. 安裝選擇的 NuGet 軟體包
c. 下載原始 ZIP 文件(軟體包上有連結)
d. 如果有的話,解壓縮*.jar 盒模型
e. 開始之前,請參閱示例:https://sergey-tihon.github.io/Stanford.NLP.NET/samples.html
注意:請不要嘗試從專案中引用 NuGet 軟體包,它們是互相關聯的!如果你需要使用多於一個,請引用 Stanford CoreNLP 軟體包,所有特性都在包中。
版本
NuGet 軟體包中的模型版本與 Stanford NLP Group 中的相對應。例如,如果你使用了 Stanford NLP 網站中的 Stanford CoreNLP 3.3.1 版,在 NuGet 中,它的版本為 3.3.1.x 版,其中 x 只對應 NuGet,該位數字被用作標記.NET 集合中的內部版本。
許可證
該原始碼(構建指令碼,整合測試,文件和示例)在 MIT 許可證之下。
NuGet 包許可
所有其下的軟體均為開源,在 GNU 通用公共許可證(v2 及更新的版本)之下。注意:它是 GPL 形式的,允許免費使用,但不允許被整合到任何形式的專有軟體中,即使是其中的一部分,或翻譯版本。商業應用請聯絡史丹佛自然語言處理組。