自然語言處理(NLP)是資料科學中最有趣的子領域之一,越來越多的資料科學家希望能夠開發出涉及非結構化文本資料的解決方案。盡管如此,許多應用資料科學家(均具有STEM和社會科學背景)依然缺乏NLP(自然語言處理)經驗。
在這篇文章中,我将探讨一些基本的NLP概念,并展示如何使用日益流行的Python spaCy包來實作這些概念。這篇文章适合NLP初學者閱讀,但前提是假設讀者具備Python的知識。
你是在說spaCy嗎?
spaCy是一個相對較新的包,“工業級的Python自然語言工具包”,由Matt Honnibal在Explosion AI.開發。它在設計時目标使用者以應用資料科學家為主,這也意味着它不需要使用者來決定使用哪個算法來處理常見任務,而且它非常地快—快得難以置信(它用Cython來實作)。如果你熟悉Python資料科學棧,spaCy就是NLP的numpy,它雖然理所當然地位于底層,但是卻很直覺,性能也相當地高。
那麼,它能做什麼呢?
spaCy為任何NLP項目中常用的任務提供一站式服務.包括:
符号化(Tokenizatioin)
詞幹提取(Lemmatization)
詞性标注(Part-of-speech tagging)
實體識别(Entity recognition)
依存句法分析(Dependency parsing)
句子的識别(Sentence recognition)
字-向量變換(Word-to-vector transformation)
許多友善的清除文本和标準化文本的方法(cleaning and normalizing text)
我會對這些功能做一個高層次的概述,并說明如何利用spaCy通路它們。
那我們就開始吧。
首先,我們加載spaCy的管線,按照約定,它存儲在一個名為nlp的變量中。需要花幾秒鐘時間聲明該變量,因為spaCy預先将模型和資料加載到前端,以節省時間。實際上,這樣做可以提前完成一些繁重的工作,使得nlp解析資料時開銷不至于過大。 請注意,在這裡,我們使用的語言模型是英語,同時也有一個功能齊全的德語模型,在多種語言中均可實作标記化(将在下面讨論)。
我們在示例文本中調用NLP來建立Doc對象。Doc 對象是文本本身NLP任務容器,将文本切分成文字(Span 對象)和元素(Token 對象),這些對象實際上不包含資料。值得注意的是Token 和 Span對象實際上沒有資料。相反,它們包含Doc對象中的資料的指針,并且被惰性求值(即根據請求)。絕大多數spaCy的核心功能是通過對Doc (n=33), Span (n=29),和 Token (n=78)對象的方法來實作的。