使用spaCy的NLP – 如何開始自然語言處理
NLP 是人工智能的一個子領域。它專注于使機器能夠理解、解釋和生成人類語言。
在本教程中,我們將探討 NLP 的基本概念,并研究 spaCy 的特定實現(xiàn)。這將展示其徹底改變各個行業(yè)的巨大潛力。
在開始 spaCy 之前,讓我們快速了解一下自然語言處理。
(更|多優(yōu)質(zhì)內(nèi)|容:java567 點 c0m)
什么是自然語言處理?
NLP 涉及語言學、計算機科學和機器學習的交叉領域。其主要目標是彌合人類語言和機器理解之間的差距。
NLP 涵蓋廣泛的任務,包括文本分類、命名實體識別 (NER)、情感分析等。
文本分類
這涉及根據(jù)文本內(nèi)容將文本分類為預定義的類或類別。
這在情感分析、垃圾郵件檢測、主題分類等方面都有應用。
命名實體識別 (NER)
這涉及從文本中識別和提取命名實體,例如名稱、組織、位置和日期。
NER 對于信息提取、問答系統(tǒng)和推薦引擎至關重要。
情感分析
這涉及確定一段文本中表達的情緒或情緒,無論是積極的、消極的還是中性的。
情感分析廣泛用于品牌監(jiān)控、客戶反饋分析和社交媒體監(jiān)控。
自然語言處理的挑戰(zhàn)
盡管 NLP 取得了重大進步,但仍然存在一些挑戰(zhàn):
人類語言本質(zhì)上是模棱兩可的,這使得機器有時很難準確理解和解釋含義。
不同的語言、方言、俚語和文化差異增加了 NLP 任務的復雜性,要求模型針對特定語言且具有適應性。
捕獲上下文信息并理解文本的底層語義仍然是 NLP 算法的重大挑戰(zhàn)。
NLP 模型嚴重依賴訓練數(shù)據(jù),有偏見或低質(zhì)量的數(shù)據(jù)可能會導致有偏見或不準確的預測,從而引發(fā)潛在的道德問題。
什么是spaCy?
在自然語言處理 (NLP) 領域,spaCy 已成為一個強大而高效的庫,徹底改變了開發(fā)人員和研究人員處理文本數(shù)據(jù)的方式。
spaCy 是一個開源 Python 庫,專為詞性標記、命名實體識別、依存解析等 NLP 任務而設計。
它的開發(fā)目標是提供工業(yè)強度的性能,同時仍然易于使用并集成到現(xiàn)有工作流程中。
spaCy 基于最新研究并采用最先進的技術,使其成為初學者和經(jīng)驗豐富的 NLP 從業(yè)者的理想選擇。
spaCy 的主要特點
語言注釋
spaCy 提供了廣泛的預訓練模型,可以快速分析文本并提取各種語言特征。這些功能包括詞性標簽、命名實體、句法依賴、句子邊界等等。
預訓練模型在大型語料庫上進行訓練,具有很高的準確性,使開發(fā)人員能夠?qū)W⒂谄涮囟ǖ?NLP 任務,而不必擔心從頭開始訓練模型。
標記化和句子分割
標記化是 NLP 中的關鍵步驟,它將文本分解為單個單詞或子詞。spaCy 的標記化算法非常高效且特定于語言,可實現(xiàn)準確且可定制的標記化。
spaCy 還可以自動將文本分割成句子,從而可以輕松地在粒度級別上處理文本數(shù)據(jù)。
實體識別
命名實體識別 (NER) 是識別和分類命名實體(例如人員、組織、位置、日期等)的任務。
spaCy 的 NER 功能非常出色,為多種語言提供開箱即用的支持。它允許開發(fā)人員使用自己的標記數(shù)據(jù)訓練自定義 NER 模型,從而實現(xiàn)特定領域的實體識別。
依存分析
依存句法分析涉及通過確定單詞之間的關系來分析句子的語法結(jié)構(gòu)。
spaCy的依存解析基于高效的算法并實現(xiàn)了高精度。它提供了豐富的語法注釋,包括每個詞的詞頭、依存標簽和子樹結(jié)構(gòu)。
這些信息對于信息提取、問答和情感分析等任務非常寶貴。
定制和可擴展性
spaCy 的主要優(yōu)勢之一是其靈活性和可擴展性。開發(fā)人員可以輕松定制和微調(diào) spaCy 的模型,以適應特定領域或提高特定任務的性能。
該庫還提供了一個簡單的 API,用于添加自定義組件,例如新的分詞器、實體識別器或句法解析器,使其成為研究和開發(fā)的多功能工具。
性能和可擴展性
spaCy 以其卓越的性能和可擴展性而聞名。該庫是用 Cython 實現(xiàn)的,Cython 是一種編程語言,可將類似 Python 的代碼編譯為高效的 C/C++ 模塊。這使得 spaCy 能夠極快地處理文本數(shù)據(jù),使其適合大規(guī)模 NLP 應用程序和實時系統(tǒng)。
spaCy 中的命名實體識別示例
讓我們嘗試使用 spaCy 來實現(xiàn) NER。
我將使用 Google Colab。Google Colab 是一項托管的 Jupyter Notebook 服務,無需設置即可使用,并提供對計算資源(包括 GPU 和 TPU)的免費訪問。
如果您愿意,您可以使用 Kaggle 或在您自己的計算機上運行它。由于 spaCy 是一個預先訓練的模型,因此開始時不需要太多的計算能力。
但如果您正在處理機器學習問題,我建議您在計算機上安裝 Anaconda。
導航至colab.research.google點 com并單擊“新建筆記本”按鈕。
Google 協(xié)作控制臺
在標題上,輸入文件的名稱。確保您的文件名以.pynb擴展名結(jié)尾。
更改文件名并創(chuàng)建代碼塊
單擊“+代碼”按鈕創(chuàng)建代碼塊。
默認情況下,Google Colab 預裝了一些機器工具和 Python 庫。因此,我們不必擔心安裝和準備好我們的開發(fā)環(huán)境。
但它不隨spacy庫一起提供。
在代碼塊中運行以下命令來安裝spacy庫。
?!pip install -U spacy
安裝spacy庫的命令
安裝spacy庫
選擇您想要的選項并繼續(xù)。它們之間的主要區(qū)別在于訓練的數(shù)據(jù)量。
小 – en_core_web_sm
中 – en_core_web_md
寬 – en_core_web_lg
變壓器 – en_core_web_trf
我們的下一步是下載其中一個模型。添加代碼塊并從上面的列表中選擇任何代碼塊并運行以下命令。我將下載大模型。
?!python -m spacy download en_core_web_lg
下載預訓練spacy模型的命令
下載預訓練模型
添加代碼塊并運行以下命令來加載模型。
?import spacy
?nlp = spacy.load("en_core_web_lg")
加載spacy模型
好吧。我們都準備好了。
讓我們嘗試從句子中分割實體。添加代碼塊并運行以下代碼塊:
?doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
?
?for ent in doc.ents:
? ? ?print(ent.text, ent.start_char, ent.end_char, ent.label_)
查找并打印給定文本中的實體
在上面的代碼中,我們要求 spaCy 模型從“Apple is考慮以 10 億美元收購英國初創(chuàng)公司”這句話中查找實體。
然后,我們迭代每個實體,并顯示實體、句子中的開始和結(jié)束字符索引以及實體標簽。
您應該看到以下輸出:
命名實體識別示例 1 來自spaCy
上面的輸出描述了“Apple”是一個實體,它出現(xiàn)在給定句子中的索引 0 到索引 5 之間,并且它是一個組織 (ORG)。
如果您對索引感到困惑,請記住它從 0 開始。我們給定輸入文本中的前 5 個字符是“Apple”。所以,它是從0到5。
同樣,它將“英國”視為一個實體,并將其描述為地緣政治實體(GPE)。它將“10 億美元”標記為貨幣 (MONEY) 實體。
這次我們嘗試一個不同的句子。
“印度總理納倫德拉·莫迪在華盛頓特區(qū)會見了美國總統(tǒng)喬·拜登”。
讓我們看看它找到了什么實體。添加代碼塊并運行以下代碼:
?doc = nlp("Prime Minister of India Narendra Modi met US President Joe Biden at Washington DC")
?
?for ent in doc.ents:
? ? ?print(ent.text, ent.start_char, ent.end_char, ent.label_)
從不同的句子中查找實體
命名實體識別示例2來自spaCy
太棒了,不是嗎?
它將“印度”、“美國”和“華盛頓特區(qū)”確定為地緣政治實體 (GPE)。它還將“納倫德拉·莫迪”和“喬·拜登”識別為個人實體 (PERSON)。
嘗試輸入不同的句子并進行嘗試。我相信您會對它識別實體的能力感到驚訝。
結(jié)論
在本教程中,我們通過使用 spaCy 庫的簡單實現(xiàn)了解了 NLP。
自然語言處理在改變我們與機器交互和分析大量文本數(shù)據(jù)的方式方面擁有巨大的潛力。spaCy 因其強大的功能、易用性和卓越的性能而成為許多 NLP 從業(yè)者的首選庫。