包lingo提供了自然語言處理所需的數據結構和算法。
具體而言,它為英語提供了一個POS標記器( lingo/pos ),一個依賴項解析器( lingo/dep )和基本的令牌( lingo/lexer )。它還提供了用於持有庫存的數據結構( lingo/corpus )和Treebanks( lingo/treebank )。
該軟件包的目的是為自然語言處理提供生產質量管道。
包裹是可抓的: go get -u github.com/chewxy/lingo
該軟件包及其子包取決於很少的外部軟件包。他們在這裡:
| 包裹 | 用於 | 活力 | 筆記 | 執照 |
|---|---|---|---|---|
| Gorgonia | 機器學習 | 必不可少的。重寫它們並不難,但是為什麼呢? | 同一位作者 | Gorgonia許可證(類似於Apache) |
| 戈格維茲 | 註釋的可視化和其他與圖相關的可視化 | 對於可視化至關重要,這是一個不錯的功能 | API上次更改2017年4月12日 | Gographviz許可證(Apache 2.0) |
| 錯誤 | 錯誤 | 沒有它,包裹不會死,但是有一個很好的 | 過去一年的穩定API | 錯誤許可證(MIT/BSD喜歡) |
| 放 | 設置操作 | 可以輕鬆更換 | 過去一年的穩定API | 設置許可證(MIT/BSD狀) |
請參閱各個軟件包以獲取使用。 cmd目錄中還有一堆可執行文件。它們本來是關於如何設置自然語言處理管道的示例。
帶有此軟件包的自然語言管道是由頻道大量驅動的。這是依賴解析的示例:
func main () {
inputString: `The cat sat on the mat`
lx := lexer . New ( "dummy" , strings . NewReader ( inputString )) // lexer - required to break a sentence up into words.
pt := pos . New ( pos . WithModel ( posModel )) // POS Tagger - required to tag the words with a part of speech tag.
dp := dep . New ( depModel ) // Creates a new parser
// set up a pipeline
pt . Input = lx . Output
dp . Input = pt . Output
// run all
go lx . Run ()
go pt . Run ()
go dp . Run ()
// wait to receive:
for {
select {
case d := <- dp . Output :
// do something
case err := <- dp . Error :
// handle error
}
}
}有關特定任務(POS標記,解析,命名實體識別等),請參閱每個子書的回教徒。該軟件包本身主要提供了子彈將使用的數據結構。
也許最重要的數據結構是*Annotation結構。它基本上含有一個單詞和相關的元數據。
對於依賴性解析,該圖採用三種形式: *Dependency , *DependencyTree和*Annotation 。這三種形式均可從一種轉換為另一個形式。 TODO:解釋每種數據類型背後的理由。
您可能已經註意到的一個特定怪癖是, POSTag和DependencyType被用作常數編碼。實際上,該軟件包確實提供了兩種變體:一個來自斯坦福/賓夕法尼亞州立大學的牛排,一個來自Universaldepentencies。
硬編碼的主要原因主要是出於績效原因 - 知道分配多少減少了該計劃必須做的許多其他工作。它還減少了突變全局變量的機會。
當然,這是一個權衡 - 計劃僅限於這兩個選擇。值得慶幸的是,只有有限數量的POS標籤和依賴關係類型。已經實施了兩個最受歡迎的兩個(斯坦福/PTB和普遍依賴性)。
支持以下構建標籤:
要使用特定的標籤集或RERET,請因此構建程序: go build -tags='stanfordtags' 。
默認標籤和依賴關係類型是通用依賴項版本。
您還應注意,令牌, lingo/lexer不是您通常的普通NLP令牌。這是一個代幣儀,它可以按空間進行象徵,並具有一些特定的英語規則。它的靈感來自羅布·派克(Rob Pike)關於勒克斯斯(Lexers)的演講。我認為為NLP編寫類似的東西會很酷。
lingo/lexer包裝的測試用例展示了其處理Unicode的方式和其他pathalogical English。
有關更多信息,請參見貢獻。
此軟件包已根據MIT許可獲得許可。