2022年3月22日 星期二

SpaCy 學習筆記 (三) : 在 Colab 上安裝執行 SpaCy

前兩篇的 SpaCy 測試都是在本機或其官網上執行, 本篇則是要在谷歌 Colab 平台上安裝 SpaCy 與語言統計模型後利用 Google 雲端計算資源來執行自然語言處理管線, 好處是完全不需要擔心本機安裝時可能會遇到的問題, 且可將執行 NLP 任務的過程紀錄下來或分享到 GitHub. 

本系列之前的文章參考 :


Colab 是整合於谷歌雲端硬碟上的免費線上運算平台, 用法可參考這篇 : 



一. 在雲端硬碟建立資料夾與 Colab : 

在谷歌雲端硬碟上安裝 SpaCy 套件與模型之前, 基於資料整理歸檔考量, 最好先建立一個資料夾來收納 ipynb 等相關檔案, 首先按雲端硬碟左上角的 " + 新增" 鈕, 點選 "資料夾" :




在彈出視窗中輸入資料夾名稱, 例如 "SpaCy NLP", 按 "建立" 鈕 :




如此便在雲端硬碟下建立了 "SpaCy NLP" 這個資料夾, 點選進入此資料夾後, 再次按左上角的 "+新增" 鈕, 點選選單中最底下的 "更多", 於次選單中點選 "Google colaboratory" : 




 這樣會新增並開啟一個 Colab 筆記本, 也就是一個 Jupyter Notebook 頁面 (.ipynb 檔) :




接著就可以在此 .ipynb 檔案上安裝 SpaCy 套件與其語言模型了. 


二. 安裝或升版 SpaCy 套件 : 

在 Colab 筆記本的程式碼欄位內輸入下列指令安裝 SpaCy :

!pip install spacy    

按欄位前面的 Play 鍵執行安裝, 結果顯示之前已安裝過 2.2.4 版 :




若要升級到最新版, 按左上角 "+程式碼" 鈕新增一個儲存格, 輸入升版指令 : 

!pip install -U spacy 




可見下載安裝了最新的 SpaCy 3.2.3 版. 

可再新增儲存格輸入如下指令檢查 SpaCy 版本 : 

import spacy  
spacy.__version__    

結果如下 : 




可見確實是 SpaCy 3.2.3 版.


三. 安裝語言的統計模型 : 

在 Colab 安裝 SpaCy 的語言模型必須使用 pip 指令線上安裝, 每個語言模型的下載網址可在 SpaCy 官網查詢 :


例如英文與中文的模型網址如下 : 


以體積最小的英文模型 en_core_web_sm 為例, 其模型之 whl 檔或 gz 檔查詢方式如下 :






其模型網址為 :

https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.2.0/en_core_web_sm-3.2.0-py3-none-any.whl   (13.3 MB)

於 Colab 筆記本新增一儲存格, 輸入如下指令安裝此英文模型 : 

!pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.2.0/en_core_web_sm-3.2.0-py3-none-any.whl     

結果如下 : 





中文模型 zh_core_web_sm 的 whl 檔網址為 :

https://github.com/explosion/spacy-models/releases/download/zh_core_web_sm-3.2.0/zh_core_web_sm-3.2.0-py3-none-any.whl    (47.2 MB)

於 Colab 筆記本新增一儲存格, 輸入如下指令安裝此英文模型 : 

!pip install https://github.com/explosion/spacy-models/releases/download/zh_core_web_sm-3.2.0/zh_core_web_sm-3.2.0-py3-none-any.whl    

結果如下 : 




這樣就可以開始在 Colab 上執行 NLP 管線任務了, 依序新增儲存格輸入如下指令 : 

import spacy
nlp=spacy.load('en_core_web_sm')
doc=nlp('I am going to visit the White House.')
print(f'text\tlemma_\ttag_\tpos_\tdep_\thead')  
for token in doc:
    fstr=(f'{token.text}\t{token.lemma_}\t{token.tag_}\t{token.pos_}\t'
          f'{token.dep_}\t{token.head}')
    print(fstr)

結果如下 : 




注意, 此例中因為 f 字串太長了, 所以將其分兩列放在小括號 () 中. 


四. 語法相依關係與命名實體視覺化 :

在 Colab 執行視覺化與在本機使用 Jupyter Notebook 一樣必須呼叫 doc.render() 而不是 doc.serve(), 而且必須傳入參數 jupyter=True 才能在網頁中繪製圖形. 為了簡單起見, 下面改為分析 'I live in Taiwan' 這個句子來分析, 新增儲存格輸入如下指令 :

doc=nlp('I live in Taiwan.')    
spacy.displacy.render(doc, jupyter=True)       

參考 : 


結果如下 : 




可見 displaycy.render() 不傳入 style 參數時預設是 'dep', 即繪製語法相依圖. 若傳入 style='ent' 則顯示命名實體標記圖, 例如 : 

spacy.displacy.render(doc, style='ent', jupyter=True)

結果如下 : 




上面也安裝了中文模型 zh_core_web_sm, 所以最後來試試中文的視覺化, 輸入如下指令 :

nlp=spacy.load('en_core_web_sm')    
text='''戴笠, 浙江省江山縣人, 中華民國陸軍中將, 生於清光緒 23 年,
國民政府軍統局少將副局長, 蔣介石愛將, 民國 35 年 3 月 17 日於南京上空飛機失事身亡.'''   
doc=nlp(text)   
spacy.displacy.render(doc, style='ent', jupyter=True)    

結果如下 : 




與前一篇測試使用 SpaCy 線上視覺化的輸出有些不一樣, 例如 '蔣介石愛將' 被標記為 ORG (很奇怪), 以及 '南京' 未被辨識出來等, 其餘相同. 

在 Colab 上執行 SpaCy 最方便的地方就是會自動記錄執行過程為 ipynb 檔, 以上測試過程我分享於 GitHub, 開啟後可點選 "檔案/在雲端硬碟另存複本" 複製到個人的雲端硬碟上 :


沒有留言:

張貼留言