天天看點

使用 Python+spaCy 進行簡易自然語言處理使用 Python+spaCy 進行簡易自然語言處理

<b>本文講的是</b>使用 Python+spaCy 進行簡易自然語言處理<b>,</b>

<b></b>

自然語言處理(NLP)是人工智能領域最重要的部分之一。它在許多智能應用中擔任了關鍵的角色,例如聊天機器人、正文提取、多語翻譯以及觀點識别等應用。業界 NLP 相關的公司都意識到了,處理非結構文本資料時,不僅要看正确率,還需要注意是否能快速得到想要的結果。

在這篇文章中,我會将 spaCy —— 這個現在最強大、最先進的 NLP python 庫分享給你們。

spaCy 簡介及安裝方法

spaCy 的管道與屬性

Tokenization

詞性标注

實體識别

依存句法分析

名詞短語

內建詞向量計算

使用 spaCy 進行機器學習

與 NLTK 和 CoreNLP 對比

spaCy 由 cython(Python 的 C 語言拓展,旨在讓 python 程式達到如同 C 程式一樣的性能)編寫,是以它的運作效率非常高。spaCy 提供了一系列簡潔的 API 友善使用者使用,并基于已經訓練好的機器學習與深度學習模型實作底層。

spaCy 及其資料和模型可以通過 pip 和安裝工具輕松地完成安裝。使用下面的指令在電腦中安裝 spaCy:

如果你使用的是 Python3,請用 “pip3” 代替 “pip”。

在安裝好 spacy 之後,請運作下面的指令以下載下傳所有的資料集和模型:

一切就緒,現在你可以自由探索、使用 spacy 了。

下面,我們會加載預設的子產品(english-core-web 子產品)。

這個 document 現在是 spacy.english 模型的一個 class,并關聯上了許多的屬性。可以使用下面的指令列出所有 document(或 token)的屬性:

它會輸出 document 中各種各樣的屬性,例如:token、token 的 index、詞性标注、實體、向量、情感、單詞等。下面讓我們會對其中的一些屬性進行一番探究。

spaCy 的 document 可以在 tokenized 過程中被分割成單句,這些單句還可以進一步分割成單詞。你可以通過周遊文檔來讀取這些單詞:

詞性标注即标注文法正确的句子中的詞語的詞性。這些标注可以用于資訊過濾、統計模型,或者基于某些規則進行文本解析。

來看看我們的 document 中所有的詞性标注:

來看一看 document 中的最常用詞彙。我已經事先寫好了預處理和文本資料清洗的函數。

spaCy 擁有一個快速實體識别模型,這個實體識别模型能夠從 document 中找出實體短語。它能識别各種類型的實體,例如人名、位置、機構、日期、數字等。你可以通過“.ents”屬性來讀取這些實體。

下面讓我們來擷取我們 document 中所有類型的命名實體:

spaCy 最強大的功能之一就是它可以通過調用輕量級的 API 來實作又快又準确的依存分析。這個分析器也可以用于句子邊界檢測以及區分短語塊。依存關系可以通過“.children”、“.root”、“.ancestor”等屬性讀取。

解析所有居中包含“hotel”單詞的句子的依存關系,并檢查對于 hotel 人們用了哪些形容詞。我建立了一個自定義函數,用于分析依存關系并進行相關的詞性标注。

依存樹也可以用來生成名詞短語:

讓我們建立一些詞向量,然後對其做一些有趣的操作吧:

将 spaCy 內建進機器學習模型是非常簡單、直接的。讓我們使用 sklearn 做一個自定義的文本分類器。我們将使用 cleaner、tokenizer、vectorizer、classifier 元件來建立一個 sklearn 管道。其中的 tokenizer 和 vectorizer 會使用我們用 spaCy 自定義的子產品建構。

現在讓我們使用 spaCy 的解析器和一些基本的資料清洗函數來建立一個自定義的 tokenizer 函數。值得一提的是,你可以用詞向量來代替文本特征(使用深度學習模型效果會有較大的提升)

現在可以建立管道,加載資料,然後運作分類模型了。

Spacy 是一個非常強大且具備工業級能力的 NLP 包,它能滿足大多數 NLP 任務的需求。可能你會思考:為什麼會這樣呢?

讓我們把 Spacy 和另外兩個 python 中有名的實作 NLP 的工具 —— CoreNLP 和 NLTK 進行對比吧!

功能

Spacy

NLTK

Core NLP

簡易的安裝方式

Y

Python API

N

多語種支援

分詞

分句

依存性分析

詞向量計算內建

情感分析

共指消解

Tokenizer

Tagging

Parsing

spaCy

0.2ms

1ms

19ms

CoreNLP

2ms

10ms

49ms

4ms

443ms

準确率

Recall

F-Score

0.72

0.65

0.69

0.79

0.73

0.76

0.51

0.58

本文讨論了 spaCy —— 這個基于 python,完全用于實作 NLP 的庫。我們通過許多用例展示了 spaCy 的可用性、速度及準确性。最後我們還将其餘其它幾個著名的 NLP 庫 —— CoreNLP 與 NLTK 進行了對比。

如果你能真正了解這篇文章要表達的内容,那你一定可以去實作各種有挑戰的文本資料與 NLP 問題。

希望你能喜歡這篇文章,如果你有疑問、問題或者别的想法,請在評論中留言。

<b>原文釋出時間為:2017年7月21日</b>

<b>本文來自雲栖社群合作夥伴掘金,了解相關資訊可以關注掘金網站。</b>