1. 程式人生 > 其它 >Language Processing Pipelines

Language Processing Pipelines

技術標籤:nlpspacynlp

spaCy學習記錄


Language Processing Pipelines


前言

例如:今天在學習用到了spaCy庫,以前也經常遇到這個庫,但是沒有系統記下問題,以後用這個文章系列當作筆記,省的以後遇到相同問題還要再去查。

一、spaCy是什麼?

示例:spaCy是一個號稱工業級的自然語言處理工具包,詳細介紹可以在這裡檢視link ,這裡先記下處理文字的第一部分,以後看到後面再做記錄。

二、Processing Text

1.概念介紹

當在文字上呼叫nlp時,spaCy首先將tokenizes化文字生成一個Doc物件,這個Doc,通過幾個不同的步驟來處理文件-這也稱為處理管道(processing pipeline)。預設模型使用的pipeline由標記器,解析器和實體識別器組成( tagger, parser,entity recognizer),每個pipeline元件都返回已處理的Doc,然後將其傳遞給下一個元件。
在這裡插入圖片描述
processing pipeline 始終取決於統計模型及其功能,例如,一個pipeline模型如果只包含用實體標籤進行預測的資料,那麼pipeline只能包含entity recognizer元件。這就是每個模型都將在其元資料中指定要使用的管道的原因

這是一個樣例,包含簡單元件列表:

"pipeline": ["tagger", "parser", "ner"]

注意:上面這些是相互獨立的,如果自己寫的一些元件無依賴關係,元件不必全部匯入

tokenizer是特殊的元件,它不是常規管道的一部分,使用nlp.pipe_name 它不會出現。它只是一個分詞器,所有Doc都會返回它。也可以自定義生成分詞器,nlp.tokenizer是可寫的

2.Processing text

對文字上呼叫nlp時,spaCy將對其進行標記化(tokenize),然後依次呼叫文件上的每個元件。 然後,返回可以使用的已處理文件。

程式碼如下(示例):

doc = nlp("This is a text")

這時候doc表示已經處理過的 “This is a text”

在處理大量文字時,如果讓統計模型處理成批文字,通常它們會更高效。 spaCy的nlp.pipe方法採用可迭代的文字,並生成已處理的Doc物件。 批處理在內部完成。

下面是兩種處理方式,第二種更高效

texts = ["This is a text", "These are lots of texts", "..."]
- docs = [nlp(text) for text in texts]
+ docs = list(nlp.pipe(texts))

這裡有一個命名實體識別示例,解釋

import spacy
​
texts = [
    "Net income was $9.4 million compared to the prior year of $2.7 million.",
    "Revenue exceeded twelve billion dollars, with a loss of $1b.",
]
​
nlp = spacy.load("en_core_web_sm")
for doc in nlp.pipe(texts, disable=["tagger", "parser"]):
    # Do something with the doc here
    print([(ent.text, ent.label_) for ent in doc.ents])
    
-----------------------------------------------------------------------------------
[('$9.4 million', 'MONEY'), ('the prior year', 'DATE'), ('$2.7 million', 'MONEY')]
[('twelve billion dollars', 'MONEY'), ('1b', 'MONEY')]

總結

今天有一次用到了spaCy這個庫,先進行第一次總結,以後是有時間會翻譯一些其他的guide 今天看的地址在這裡 https://spacy.io/usage/processing-pipelines#plugins