當前位置:
首頁 > 知識 > 支持53種語言預訓練模型,斯坦福發布全新NLP工具包StanfordNLP

支持53種語言預訓練模型,斯坦福發布全新NLP工具包StanfordNLP

選自stanfordnlp

機器之心編譯

機器之心編輯部

今日,Stanford NLP 團隊發布了包含 53 種語言預訓練模型的自然語言處理工具包 StanfordNLP,該工具包支持 Python 3.6 及之後版本,並基於 PyTorch,支持多種語言的完整文本分析管道,包括分詞、詞性標註、詞形歸併和依存關係解析,此外它還提供了與 CoreNLP 的 Python 介面。

Github: https://github.com/stanfordnlp/stanfordnlp …

Paper: https://nlp.stanford.edu/pubs/qi2018universal.pdf …

PyPI: https://pypi.org/project/stanfordnlp/ …

以下內容介紹了 StanfordNLP 的相關論文、安裝、使用以及設置方法。

StanfordNLP 結合了斯坦福團隊參加 CoNLL 2018 Shared Task on Universal Dependency Parsing 使用的軟體包,和 Stanford CoreNLP 軟體的官方 Python 介面。StanfordNLP 不僅提供 CoreNLP 的功能,還包含一系列工具,可將文本字元串轉換為句子和單詞列表,生成單詞的基本形式、詞性和形態特徵,以及適用於 70 余種語言中的句法結構。

StanfordNLP 用高度準確的神經網路構建而成,允許使用自己的標註數據進行高效訓練和評估。這些模塊基於 PyTorch 構建。

StanfordNLP 的特徵:

可以輕鬆設置本地 Python 實現;

包含進行文本分析的完整神經網路管道(neural network pipeline),包括分詞、多詞 token(MWT)擴展、詞形歸併(lemmatization)、詞性(POS)和形態特徵標記以及依存關係解析;

提供在 73 個 treebanks 上的 53 種人類語言的預訓練神經模型;

官方維護的接入到 CoreNLP 的穩定 Python 介面。

論文:Universal Dependency Parsing from Scratch

論文地址:https://nlp.stanford.edu/pubs/qi2018universal.pdf

依存關係解析是用於語義作用標記的各種自然語言處理系統、關係提取和機器翻譯中的重要組成部分。然而,大多數研究都已經將依賴解析單獨處理,並且在很大程度上忽略了為解析器準備相關數據的上游 NLP 組件,例如標記器和詞形化器。然而,實際上,這些上游系統仍然遠非完美。

為此,研究者構建了一個 raw-textto-CoNLL-U 管道系統,該系統執行 Shared Task 所需的所有任務。利用深度學習,該管道在每個相互關聯的任務階段中都實現了有競爭力的性能:分詞、句子和詞分割、詞性(POS)/形態特徵(UFeats)標記、詞形歸併,最後是依存關係解析。

研究者表示,該工作的主要貢獻包括:

將符號統計知識與靈活、強大的神經系統相結合以提高穩健性的新方法;

用於聯合 POS / UFeats 預測的 biaffine 分類器,可提高預測一致性;

使用編輯分類器增強的詞形歸併工具,可提高少樣本序列上的序列到序列模型的穩健性;

擴展解析器到模型線性化。

該系統在 big-treebanks 上實現了競爭性的表現。在修復了一個關鍵的錯誤之後,更正後的系統在官方評估指標 LAS、MLAS 和 BLEX 上獲得了第 2 名、第 1 名和第 3 名,並且在所有指標上大幅度地優於低資源 treebank 類別的所有提交系統。

實驗結果

主要結果如表 1 所示。當對所有 treebank 進行宏觀平均時,該系統幾乎可以在所有指標上實現競爭性能。此外,當僅在 big-treebanks 上進行評估時,它在多個指標上實現了最佳性能。即使不是表現最好的系統,該系統也會在這些 treebank 上的每個指標上取得競爭結果。該系統由單系統組件組成,而一些表現最佳的模型則使用集成方法。

此外,該系統的 UFeats 分類器在這些 treebank 上也非常準確。它不僅在 UFeats F1 上實現了最佳性能,而且還幫助解析器在 big-treebanks 上實現了最佳 MLAS,即使解析器在其他指標評估上沒有取得最佳性能。研究者強調了 POS 標記器/ UFeats 分類器中的一致性建模的貢獻:在兩種設置中,與 AllTags 度量標準相比,各個度量標準(UPOS、XPOS 和 UFeats)在參考系統上實現了更低的 advantage margin,表明參考系統儘管有時在每個單獨的任務上更準確,但並不像本研究中的整體系統那樣一致。

all-treebanks 和 big-treebanks 的結果之間的最大差異來自句子分割。在檢查了較小 treebank 上的結果和實現後,研究者注意到標記器中處理數據的方式對這些 treebank 的泛化產生了負面影響。這對於這些 treebank 來說是毀滅性的,因為所有下游組件都在句子水平處理單詞。

研究者解決了這個問題,並在提交時訓練了新的分詞器,其中所有超參數都與系統相同。他們進一步構建了一個非官方的評估管道,驗證了它與官方系統達到的評估結果相同,並且僅通過替換分詞器來評估整個管道。如表 1 所示,由此產生的系統(Stanford )整體上更準確,分別在官方評估指標 LAS、MLAS 和 BLEX 上排名第 2、第 1 和第 3。在 big-treebanks 上,所有指標僅在 0.02%的 F1 內變化,因此不包括在內。然而,在 small treebanks 上這種影響更為明顯:如表 2 所示,校正系統在所有低資源 treebank 的所有官方評估指標上都大大優於所有提交系統。

表 1:測試集上的評估結果(F1),僅適用於所有 treebank 及大型 treebank 測試集。對於所有指標上的每一組結果,研究者將其與來自參照系統的結果進行對比。參照系統是指在那個指標上當前性能最好的系統。

表 2:在低資源 treebank 測試集上的評估結果(F1)。

安裝和使用

設置

StanfordNLP 支持 Python 3.6 及之後版本。推薦從 PyPI 中安裝 StanfordNLP。如果已經安裝了 pip,運行以下命令:

這有助於解決 StanfordNLP 的所有依賴項,例如 PyTorch 1.0.0 及以上版本。

或者,你還可以從該 git repo 中安裝 StanfordNLP,這樣你可以更加靈活地基於 StanfordNLP 開發,以及訓練自己的模型。運行以下命令:

運行 StanfordNLP

啟動神經網路管道

要想運行第一個 StanfordNLP pipeline,只需在 Python 互動式解釋器中進行以下步驟:

最後一個命令將輸出輸入字元串中第一個句子中的單詞,以及在句子的通用依存解析中控制該單詞的單詞索引、單詞之間的依賴關係。輸出如下:

注意:如果你遇到了 OSError: [Errno 22] Invalid argument 這樣的問題,很可能是因為 Python 的問題。推薦使用 Python 3.6.8 及之後版本和 Python 3.7.2 及之後版本。

StanfordNLP 還提供多語言 demo 腳本,展示了如何在非英語語言中使用 StanfordNLP,如繁體中文。

demo 地址:https://github.com/stanfordnlp/stanfordnlp/blob/master/demo/pipeline_demo.py

詳見:https://stanfordnlp.github.io/stanfordnlp/installation_download.html#getting-started

訪問 Java Stanford CoreNLP Server

除了神經網路管道,該項目還包括一個官方 wrapper,允許使用 Python 代碼訪問 Java Stanford CoreNLP Server。

初始設置如下:

下載 Stanford CoreNLP 和你想使用語言的模型。

將 model jar 放在分發目錄中。

在 Python 代碼中寫明 Stanford CoreNLP 的地址:export CORENLP_HOME=/path/to/stanford-corenlp-full-2018-10-05。

該項目提供另一個 demo 腳本,展示如何使用 CoreNLP 客戶端以及如何從中提取不同的標註。

demo 地址:https://github.com/stanfordnlp/stanfordnlp/blob/master/demo/corenlp.py

神經網路管道中的模型

該項目目前提供 CoNLL 2018 Shared Task 中所有 treebank 的模型。模型下載和使用說明詳見:

https://stanfordnlp.github.io/stanfordnlp/installation_download.html#models-for-human-languages。

批處理以最大化 Pipeline 速度

為了最大化速度,對文檔進行批量處理是必要的。一次僅對一個句子運行 for loop 太慢了。最好的方法是將文檔串聯到一起,每個文檔由空白行分割(即兩個換行符

)。分詞器會將空白行識別為斷句。目前,研究者正在積極尋求改善多文檔處理。

訓練自己的神經網路管道

該庫中的所有神經模塊,包括分詞器、多詞標記 (MWT) 擴展器、POS/形態特徵標註器、詞形歸併和依存解析器,都可以用你自己的 CoNLL-U 格式數據來訓練。目前,該庫還不支持通過 Pipeline 介面訓練模型。因此,為了訓練你自己的模型,你要 clone 這個 git repo,然後從源代碼進行設置。

如果想詳細了解如何一步步訓練和評估自己的模型,請參考以下鏈接:

https://stanfordnlp.github.io/stanfordnlp/training.html

參考原文:https://stanfordnlp.github.io/stanfordnlp/

本文為機器之心編譯,轉載請聯繫原作者獲得授權。

------------------------------------------------

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

Petuum提出序列生成學習演算法通用框架
前端開發者的福音:根據UI設計圖自動生成GUI骨架代碼

TAG:機器之心 |