【論文閱讀】Stanza: A Python Natural Language Processing Toolkit for Many Human Languages[ACL2020]


本文介紹的是斯坦福自然語言處理工具的升級版:Stanza,在v1.0.0之前,這個工具被稱為StanfordNLP。

2021年了,今天想使用斯坦福自然語言處理工具發現人家升級了,不用安裝JDK了,只需要

Stanza supports Python 3.6 or later. We recommend that you install Stanza via pip, the Python package manager. To install, simply run:

pip install stanza

This should also help resolve all of the dependencies of Stanza, for instance PyTorch 1.3.0 or above.

官方介紹頁面:https://stanfordnlp.github.io/stanza/

使用手冊發表在ACL2020上:https://arxiv.org/abs/2003.07082

Github倉庫地址:https://github.com/stanfordnlp/stanza/

Abstract

我們將介紹stanza,一個支持66種人類語言的開源Python自然語言處理工具包。與現有的廣泛使用的工具箱相比,stanza提供了一個與語言無關的完全神經網絡的文本分析管道,包括標記化、多詞標記擴展、引理化、部分語音和形態特征標記、依賴分析和命名實體識別。我們在112個數據集(包括通用依賴樹庫和其他多語言語料庫)上訓練了stanza,結果表明,相同的神經結構在所有被測語言上都具有良好的泛化能力和競爭力。此外,stanza還包括一個到廣泛使用的Java Stanford CoreNLP軟件的本地Python接口,該接口進一步擴展了它的功能,以涵蓋其他任務,如協同引用解析和關系提取。

1 Introduction

開源自然語言處理(NLP)工具包的日益普及使得用戶更容易構建具有復雜語言處理的工具。盡管CoreNLP(Manning et al.,2014)、FLAIR(Akbik et al.,2019)、spaCy(https://spacy.io/)和UDPipe(Straka,2018)等現有NLP工具包已得到廣泛使用,但它們也存在一些局限性。首先,現有的工具箱通常只支持少數幾種主要語言。這大大限制了社區處理多語言文本的能力。其次,由於注重效率(如spaCy)或使用功能不太強大的模型(如CoreNLP),廣泛使用的工具有時在精度方面沒有得到充分優化,這可能會誤導下游應用程序和從中獲得的見解。第三,一些工具假設輸入文本已經用其他工具標記或注釋,缺乏在統一框架內處理原始文本的能力。這限制了它們對不同來源文本的廣泛適用性。

我們將介紹Stanza(在v1.0.0之前,這個工具箱被稱為StanfordNLP),一個支持多種人類語言的Python自然語言處理工具包。如表1所示,與現有廣泛使用的NLP工具包相比,Stanza具有以下優點:

From raw text to annotations

Stanza的特點是一個以原始文本為輸入的完全神經管道,並產生注釋,包括標記化、多詞標記擴展、引理化、詞性和形態特征標記、依賴分析和命名實體識別。

Multilinguality

Stanza的體系結構設計是語言不可知和數據驅動的,這使我們能夠通過在Universal Dependencies(UD)樹庫和其他多語言語料庫上訓練管道pipeline來發布支持66種語言的模型。

 State-of-the-art performance

我們在總共112個數據集上對stanza進行了評估,發現它的神經管道能夠很好地適應不同類型的文本,在管道的每一步都達到了最先進的或有競爭力的性能。

2 System Design and Architecture

在頂層,Stanza由兩個單獨的組件組成:(1)完全神經的多語言NLP管道;a fully neural multilingual NLP pipeline;(2)Java-Stanford CoreNLP軟件的Python客戶端接口。在本節中,我們將介紹他們的設計

2.1 Neural Multilingual NLP Pipeline

Stanza的神經管道由各種模型組成,從標記原始文本到對整個句子進行句法分析(見圖1)。所有組件的設計都考慮到處理多種人類語言,高級設計選擇捕捉多種語言中的常見現象,數據驅動模型從數據中學習這些語言之間的差異。此外,stanza組件的實現是高度模塊化的,並且盡可能地重用基本的模型體系結構以實現緊湊性。我們在此強調重要的設計選擇,並請讀者參考Qi et al(2018)的建模細節。

圖1:Stanza的神經NLP管道概述。Stanza將多語言文本作為輸入,並生成可作為本機Python對象訪問的注釋。除了這個神經管道,Stanza還提供了一個到Java Corenlp software的Python客戶端接口。

Tokenization and Sentence Splitting.

當呈現原始文本raw text時,Stanza將其標記並將標記分組為句子,作為處理的第一步。與大多數現有的工具箱不同,Stanza將原始文本的標記化和句子分割結合到一個模塊中。這被建模為字符序列上的標記問題,其中模型預測給定字符是標記的結尾、句子的結尾還是多詞標記的結尾multi-word token(MWT,見圖2)【遵循通用依賴關系(Nivre et al.,2020),我們區分了標記(輸入文本中字符的連續跨度)和語法詞。除了MWT的情況外,這些符號是可互換的,MWT的情況是一個標記可以對應多個單詞。】。我們選擇與標記化一起預測MWT,因為在某些語言中,此任務是上下文敏感的。

Multi-word Token Expansion.

一旦標記器識別出MWT,它們就被擴展到底層的語法詞中,作為下游處理的基礎。這是通過頻率詞典和神經序列對序列(seq2seq)模型的集成來實現的,以確保訓練集中經常觀察到的擴展總是穩健地擴展,同時保持對不可見詞進行統計建模的靈活性。

POS and Morphological Feature Tagging形態特征標注.

對於一個句子中的每個單詞,Stanza給它指定一個詞性(POS),並分析它的普遍形態特征(UFeats,例如單數/復數、第一/第二/第三人稱等)。為了預測POS和UFeats,我們采用了雙向長短時記憶網絡(bilstm)作為基本結構。為了使通用POS,universal POS (UPOS)、樹庫特定POS,treebank-specific POS(XPOS)和UFeats之間的一致性,我們采用Dozat and Manning(2017)的Biafine評分機制,將XPOS和UFeats預測條件化為UPOS的預測條件。

Lemmatization.詞形還原

Stanza還將句子中的每個單詞進行引理化,以恢復其規范形式(例如,did→do)。與多字標記擴展器類似,Stanza的lemmatizer實現為基於字典的lemmatizer和神經seq2seq lemmatizer的集成。在seq2seq模型的編碼器輸出上構建了一個額外的分類器,用於預測$shortcuts$ ,如小寫和標識副本 lowercasing and identity copy,以便對長輸入序列(如URLs)具有魯棒性。

Dependency Parsing.

Stanza解析每個句子的句法結構,其中句子中的每個詞都被指定一個句法頭,該句法頭要么是句子中的另一個詞,要么是在詞根的情況下,一個人工詞根符號。我們實現了一個基於Bi LSTM的深度雙仿射神經依賴解析器(Dozat and Manning,2017)。我們進一步用兩個語言特征來擴充這個模型:一個預測給定語言中兩個單詞的線性化順序,另一個預測它們之間的典型線性距離。我們之前已經證明,這些功能顯著提高了解析精度(Qi et al,2018)。

Named Entity Recognition.

對於每個輸入句子,Stanza還識別其中的命名實體(例如,人名、組織等)。對於NER,我們采用了來自Akbik et al(2018)的基於上下文的字符串表示的序列標記器。我們首先訓練一個前向和后向字符級LSTM語言模型,在標記時將兩個語言模型中每個單詞位置末尾的表示與單詞嵌入連接起來,並將結果輸入一個標准的帶有條件隨機場(CRF)解碼器的一層雙LSTM序列標記器。

2.2 CoreNLP Client

 斯坦福大學的Java CoreNLP軟件提供了一整套專門針對英語的NLP工具。然而,由於缺乏官方支持,Python(許多NLP從業者選擇的編程語言)很難訪問這些工具。為了方便使用Python中的CoreNLP,我們利用了CoreNLP中現有的服務器接口,並實現了一個健壯的客戶機作為其Python接口。

當CoreNLP客戶機被實例化時,Stanza將自動啟動CoreNLP服務器作為本地進程。然后,客戶機通過其restfulapi與服務器通信,然后在協議緩沖區中傳輸注釋,並轉換回本機Python對象。用戶還可以指定JSON或XML作為注釋格式。為了確保健壯性,在使用客戶機時,Stanza會定期檢查服務器的運行狀況,並在必要時重新啟動服務器。

3 System Usage

Stanza的用戶界面設計為允許快速開箱即用地處理多語言文本。為了實現這一點,Stanza支持通過Python代碼自動下載模型,並使用所選處理器進行流水線定制。注釋結果可以作為本機Python對象訪問,以允許靈活的后處理。

3.1 Neural Pipeline Interface

Stanza的神經NLP管道可以用管道$Pipeline$類初始化,以語言名作為參數。默認情況下,將在輸入文本上加載和運行所有處理器;但是,用戶也可以指定要加載和運行的處理器,並將處理器名稱列表作為參數。用戶還可以在初始化時指定其他處理器級屬性,例如處理器使用的批大小。

下面的代碼片段顯示了Stanza在下載中文模型、使用自定義處理器注釋句子以及打印所有注釋時的最小使用:

所有處理器運行后,將返回一個文檔實例,該實例存儲所有注釋結果。在文檔中,注釋以自頂向下的方式進一步存儲在句子、標記和單詞中(圖1)。以下代碼段演示如何訪問文檔中每個單詞以及文檔中所有命名實體的文本和POS標記:

Stanza被設計成在不同的硬件設備上運行。默認情況下,只要CUDA設備在管道中可見,就會使用它們,否則就會使用cpu。但是,用戶可以通過在初始化時設置use\ gpu=False來強制所有計算在cpu上運行。

3.2 CoreNLP Client Interface

CoreNLP客戶端接口的設計方式是,與后端CoreNLP服務器的實際通信對用戶透明。要使用CoreNLP客戶機注釋輸入文本,需要初始化$CoreNLPClient$實例,並提供CoreNLP注釋器的可選列表。注釋完成后,結果將作為本機Python對象進行訪問。

此代碼片段演示如何建立CoreNLP客戶端並獲取英語句子的NER和coreference注釋:

通過客戶端界面,用戶可以用CoreNLP支持的6種語言對文本進行注釋

3.3基於Web的交互式演示 Interactive Web-based Demo

為了幫助可視化Stanza生成的文檔及其注釋,我們構建了一個交互式web演示程序,以交互方式運行管道。對於Stanza用這些語言提供的所有語言和注釋,我們根據在最大的treebank/NER數據集上訓練的模型生成預測,並使用Brat rapid annotation tool將結果可視化【https://brat.nlplab.org/】。此演示在客戶機/服務器體系結構中運行,並在服務器端執行注釋。我們在網站上公開了這個演示的一個實例http://stanza.run/。它也可以在本地運行並安裝適當的Python庫。

在德語句子上運行Stanza的示例如圖3所示。

圖3:stanza注釋了一個德語句子,如我們的交互式演示所示。注:在進行下游分析之前,am被擴展為語法詞an和dem。

3.4 Training Pipeline Models

對於所有的神經處理器,stanza為用戶提供了命令行接口來訓練他們自己的定制模型。為此,用戶需要准備兼容格式的培訓和開發數據(例如,universal dependencies管道的CoNLL-U格式和NER模型的BIO格式列文件)。以下命令使用用戶指定的訓練和開發數據訓練神經依賴關系解析器:

4 Performance Evaluation

為了建立基准測試結果並與其他流行的工具包進行比較,我們在總共112個數據集上對Stanza進行了培訓和評估。所有預先訓練的模型都可以公開下載。

Datasets.

我們使用Universal Dependencies v2.5 treebanks(Zeman et al.,2019)對Stanza的標記器/句子拆分器、MWT擴展器、POS/UFeats標記器、lemmatizer和依賴解析器進行培訓和評估。對於培訓,我們使用此版本中100個具有非版權培訓數據的樹庫,對於不包含開發數據的樹庫,我們隨機將20%的培訓數據分割為開發數據。

這些樹狀圖Treebank代表66種語言,主要是歐洲語言,但跨越多種語系,包括印歐語系、亞非語系、烏拉爾語系、突厥語系、漢藏語系等。對於NER,我們使用12個公開數據集對Stanza進行了培訓和評估,涵蓋8種主要語言,如表3所示(Nothman等人,2013;Tjong Kim Sang)De Meulder,2003年;Tjong Kim-Sang,2002年;Benikova等人,2014年;Mohit等人,2012年;Taulé等人,2008年;Weischedel等人,2013年)。對於WikiNER語料庫,由於沒有規范划分,我們將它們隨機划分為70%的訓練、15%的開發和15%的測試划分。對於其他所有的語料庫,我們都使用了它們的規范分裂。

表2:通用依賴(v2.5)測試樹庫的神經管道性能比較。對於我們的系統,我們顯示了所有100個樹組的宏平均結果。我們還將我們的系統與五種主要語言的樹庫上的UDPipe和spaCy進行了比較,其中相應的預訓練模型是公開的。所有結果均為2018環球開發商共享任務官方評估腳本產生的分數。

Training.

在通用依賴樹庫Universal Dependencies treebanks上,我們調整了幾個大型樹庫上的所有超參數,並將它們應用於所有其他樹庫。當word2vec不可用時,我們使用作為2018 UD共享任務一部分發布的word2vec嵌入(Zeman等人,2018),或fastText嵌入(Bojanowski等人,2017)。對於NER組件中的字符級語言模型,我們在常見爬網和Wikipedia轉儲以及WMT19共享任務發布的新聞語料庫(Barrault等人,2019)的混合上對它們進行了預訓練,但英語和漢語除外,我們在Google 10億字(Chelba等人。,2013)和中國千兆字語料庫【https://catalog.ldc.upenn.edu/ LDC2011T13】。我們再次將相同的超參數應用於所有語言的模型。

Universal Dependencies Results.

對於UD樹庫Treebank的性能,我們將Stanza(v1.0)與UDPipe(v1.2)和spaCy(v2.2)在5種主要語言的樹庫上進行了比較,只要有一個預訓練模型可用。如表2所示,Stanza在所報告的大多數分數上取得了最好的成績。值得注意的是,我們發現Stanza的語言不可知體系結構能夠適應不同語言和流派的數據集。Stanza的高宏平均分數也表明了這一點,它覆蓋了66種語言的100個樹庫。

NER Results.

對於NER組件的性能,我們比較了Stanza(v1.0)與FLAIR(v0.4.5)和SpaCy(v2.2)。對於spaCy,只要能找到一個在同一數據集上訓練過的模型,我們就報告其公開可用的預訓練模型的結果,否則,我們就用默認的超參數在數據集上重新訓練其模型,遵循公開可用的教程【https://spacy.io/usage/training\ner注意,在本公開教程之后,我們在訓練spaCy-NER模型時沒有使用預訓練詞嵌入,盡管使用預訓練詞嵌入可能會改善NER結果。】。對於FLAIR,因為他們的可下載模型是在不同於規范模型的數據集版本上預先訓練的,所以我們用他們最好的超參數在我們自己的數據集分裂上重新訓練了所有模型。所有試驗結果見表3。

我們發現,在所有的數據集上,與FLAIR相比,Stanza的F1得分都更高或接近。與spaCy相比,Stanza的NER性能要好得多。值得注意的是,與FLAIR相比,Stanza的高性能是通過更小的模型實現的(小到75%),因為我們有意壓縮模型以提高內存效率和易於分發。

表3:NER在不同語言和語料庫中的表現。所有報告的分數均為實體微平均測試F1。對於每個語料庫,我們還列出了實體類型的數量。*標記來自同一數據集上公開可用的預訓練模型的結果,而其他來自我們的數據集上重新訓練的模型。

Speed comparison.

我們將Stanza與現有的工具箱進行比較,以評估注釋文本所需的時間(見表4)。對於GPU測試,我們使用單個NVIDIA Titan RTX卡。不出所料,Stanza廣泛使用精確的神經模型,使得注釋文本所需的時間明顯長於SpaCy,但與類似精度的工具箱相比,它仍然具有競爭力,特別是借助GPU加速。

表4:英語EWT Treebak 和OntoNotes NER測試集上與空間(CPU)相關的各種工具箱的注釋運行時。作為參考,在比較的UD和NER任務上,SpaCy每秒可以分別處理8140和5912個令牌。

5 Conclusion and Future Work

我們介紹了Stanza,一個支持多種人類語言的Python自然語言處理工具包。我們已經證明,Stanza的神經管道不僅覆蓋了人類語言,而且由於其語言不可知的、完全神經結構的設計,在所有任務上都是准確的。同時,Stanza的CoreNLP客戶端通過附加的NLP工具擴展了它的功能。

對於今后的工作,我們考慮在近期內改進以下方面:

Stanza中可下載的模型主要在單個數據集上進行訓練。為了使模型對許多不同類型的文本具有健壯性,我們希望研究匯集各種兼容數據源以訓練每種語言的“默認”模型的可能性;

我們可用的計算量和資源是有限的。因此,我們希望為Stanza建立一個開放的“模型動物園”,以便我們團隊以外的研究人員也可以貢獻他們的模型,並從其他人發布的模型中獲益;

Stanza被設計用來優化其預測的准確性,但這有時會以計算效率為代價,並限制了工具箱的使用。我們希望進一步研究在工具箱中減少模型大小和加速計算,同時仍然保持相同的精度水平。

我們還想通過添加其他處理器來擴展Stanza的功能,例如用於更豐富文本分析的神經共指解析或關系提取。

If you use Stanza in your work, please cite this paper:

Peng Qi, Yuhao Zhang, Yuhui Zhang, Jason Bolton and Christopher D. Manning. 2020. Stanza: A Python Natural Language Processing Toolkit for Many Human Languages. In Association for Computational Linguistics (ACL) System Demonstrations. 2020. [pdf][bib]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM