【自然語言處理 - spaCy】善用ChatGPT幫我們訓練出自訂的Name Entity Recognition實體

閱讀時間約 8 分鐘

回顧上一個篇章「【自然語言處理NLP】初探強大的工具庫spaCy, 讓機器讀懂我們的語言」我們初步學習spaCy這套工具,在尾端進行NER時我們也發現到現有的NER模型並沒有辦法滿足我們的需求, 導致有一些實體未被識別出來, 因此這次的任務就是設法進行訓練, 讓我們想要被識別的實體可以被進行識別。

這個篇章主要在示範如何利用spaCy進行訓練,過程中也由於🔥ChatGPT的出現,讓我們可以藉由它來快速產生例句,順利進行訓練,但並非真正要準確做到滿分的NER,因此過程中將以「最簡短的例句」及「CPU」訓練方式完成。

安裝相關套件及下載模型

以下幾個步驟我們先將該準備的模型及語句準備好, 再進行調優與訓練。

# 安裝spacy
%pip install spacy

# 下載Transfromer技術的中文語言模型
!python -m spacy download zh_core_web_trf

載入模型並解析

import spacy

# 載入模型
nlp_zh = spacy.load('zh_core_web_trf')

# 對中文語句進行解析
doc = nlp_zh('台灣是一個位於亞洲東部的島嶼國家。')

NER實體識別

我們可以看到實體僅被識別出「台灣」、「亞洲」, 但我們更希望「東部」跟「國家」也可以被識別出來, 那麼可以怎麼做呢?

from spacy import displacy

# 台灣是一個位於亞洲東部的島嶼國家。
displacy.render(doc, style="ent", jupyter=True)
圖片來源

圖片來源

設計訓練資料

假設: 其中「亞洲東部」我們期望實體為「LOC」, 而「國家」為「ORG」。

小技巧

  • 利用🔥ChatGPT幫我們列出「東部國家」的一些例句, 如何給予提示(Prompt),就讓大家創意發揮囉,例如: 請幫我列出5句關於「亞洲東部國家的一些特色」。
  • 將這些例句藉由「spacynerannotate」這套工具幫我快速人工標出實體並轉換成spaCy訓練NER的格式, 雖然有點不太好用, 但為了快速Demo我們就將就點使用吧,另一套更好用的工具是「prodigy」,下次再獨立開一個篇章來玩玩這個標注套件。
  • 將轉換格式後的語句以train儲存起來。

P.S spacynerannotate這套工具轉出來之後,記得要把entities欄位拿掉,留下陣列的值,避免新版spaCy格式錯誤。

錯誤的格式:
("在亞洲東部國家,教育非常重要,其高水平的教育體系吸引著世界各地的學生前來留學。",{"entities":[(3,5,"LOC"),(5,7,"ORG")]})

正確的格式:
("在亞洲東部國家,教育非常重要,其高水平的教育體系吸引著世界各地的學生前來留學。",[(3,5,"LOC"),(5,7,"ORG")])
training_data = [
("台灣的風景都非常美麗",[(0,2,"GPE")]),
("亞洲東部國家的一些特色包括擁有豐富多彩的文化遺產和傳統習俗。",[(0,4,"LOC"),(4,6,"ORG")]),
("在亞洲東部國家,食品文化有著獨特的地位,其美食吸引著眾多遊客前來品嚐。",[(1,5,"LOC"),(5,7,"ORG")]),
("亞洲東部國家的經濟以製造業和出口為主,是全球經濟中的關鍵角色。",[(0,4,"LOC"),(4,6,"ORG")]),
("在亞洲東部國家,教育非常重要,其高水平的教育體系吸引著世界各地的學生前來留學。",[(3,5,"LOC"),(5,7,"ORG")]),
# ("亞洲東部國家的一些城市,如東京、首爾和上海等,擁有先進的科技和發達的城市建設,是現代化的代表。",[(2,4,"LOC"),(4,6,"ORG"),(13,15,"ORG"),(16,18,"ORG"),(19,21,"ORG")]),
]

轉換成spaCy的格式

請參考官方文件: https://spacy.io/usage/training#training-data

以下的程式碼僅進行訓練集(train.spacy)的製作,開發集(dev.spacy)就得自行依樣畫葫蘆做一份,以便後續的訓練過程能夠順利完成。

當然我們也可以在後續的參數配置上將訓練集與開發集設定為同一份,雖然結果會造成自我感覺良好,但這邊只是概念的展示,就不多加著墨了。

import spacy
from spacy.tokens import DocBin
from tqdm import tqdm

nlp = spacy.blank("zh")

# the DocBin will store the example documents
db = DocBin()
for text, annotations in tqdm(training_data):
_doc = nlp(text)
ents = []
for start, end, label in annotations:
span = _doc.char_span(start, end, label=label)
ents.append(span)
_doc.ents = ents
db.add(_doc)
db.to_disk("./train.spacy")

配置訓練檔

我們先從官方勾選需要配置的訓練方式:

P.S 這邊記得將vectors="zh_core_web_lg"改成vectors="zh_core_web_trf"

圖片來源

圖片來源

填充完整的配置

我們使用spacy init來進行填充。

!python -m spacy init fill-config base_config.cfg config.cfg

進行訓練

!python -m spacy train config.cfg --output ./output --paths.train ./train.spacy --paths.dev ./train.spacy

載入訓練完的模型

這邊就載入最好的模型來看看吧

best_model = spacy.load(r"./output/model-last") #load the best model

重新進行NER辨識

結果如我們預期,分別將「台灣」、「亞洲東部」、「國家」這些實體給標示出來。

但目前是作弊方式,小資料量相似語句進行訓練當然能夠順利辨識,真實的標注方式可是很多狀況的,相似詞語標注不同的實體時,這些模糊資料如何訓練出較為精準的實體,就是NER的真正精髓所在。

from spacy import displacy

new_doc = best_model("台灣是一個位於亞洲東部的島嶼國家。")


# 台灣是一個位於亞洲東部的島嶼國家。
displacy.render(new_doc, style="ent", jupyter=True)
圖片來源

圖片來源

今天的範例都在這裡「📦 spacy_1.ipynb」歡迎自行取用。

如何使用請參閱「【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?」。

結語

這邊我們只是示範如何運用spaCy進行NER的模型訓練,實際上的訓練工法是有一套理論跟邏輯存在的,絕非我們範例中幾句例句就能夠標出準確的NER標籤,下次將嘗試介紹NER的訓練語句該如何設計,這樣一來才能真正的結合實務與理論,完成一個真正可用的系統。

------------------------------------------------------------------------------------------------

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

avatar-img
118會員
263內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
上一篇章我們有提到「【AI幫幫忙】機器如何識別我們的特徵?關鍵的Named Entity Recognition(NER)技術」, 而NER是NLP自然語言處理的一部分, 而這一個篇章我們會以實作的形式來介紹自然語言處理中非常好用的一套工具「spaCy」,spaCy被廣泛用於各種NLP任務,包括自然
QA問答是自然語言處理NLP中蠻困難的一項任務, 必須從一段文本中識別出使用者的提問,像搜尋引擎就是一種QA的應用, 從眾多的問題中找答案, 那就讓我們親手來打造一下自己專屬的QA系統吧! 找看看有哪些可用模型 在「【Hugging Face】Ep.3 前往Dataset掏金趣」我們有介紹過Hu
這次來介紹一下NLP自然語言處理中重要的一個任務「命名實體識別(Named Entity Recognition)」, 這個任務主要識別出「人名」、「地名」、「公司」…等實體, 透過這些實體辨識結果, 可以近一步的理解意圖, 甚至判斷出該文章主要在講什麼重點…等。 關於更多NER的細節歡迎閱讀: 「
前面我們介紹了「【Hugging Face】Ep.1 平凡人也能玩的起的AI平台」, 我們都知道「詞」是NLP世界中的最小單元, 關於詞的知識歡迎參考: 簡單來說,主要的目的是將文本轉換為模型可以處理的數據, But…, 他主要的任務並不是像jieba…等斷詞器一樣, 而是很單純的扮演文字與模型的橋
Part-of-Speech Tagging, POS是詞性標注的全名, 主要為詞彙標上語言中的語法類別或用途, 再進行後續的分析與處理, 就想像成文件歸檔的動作, 每個文件貼上一個標籤類別, 而透過這些標籤類別進行關聯性的分類歸檔。 一個句子最基本的組成單位是「詞」這在我們之前幾個篇章都有談過,如
我們有想過嗎? 一句簡單的話語, 竟然隱含著豐富的句法結構與規則, 而句法就是依著這樣的規則組合而成, 形成一個完整的句子, 隨著資料量越大, 透過規則與關聯性, 機器就能夠根據我們的話語進行拆解, 並試圖理解我們的意圖進行更貼心的服務, 隨著Chatgpt的興起, 我們也見證到AI的新里程碑, 資
上一篇章我們有提到「【AI幫幫忙】機器如何識別我們的特徵?關鍵的Named Entity Recognition(NER)技術」, 而NER是NLP自然語言處理的一部分, 而這一個篇章我們會以實作的形式來介紹自然語言處理中非常好用的一套工具「spaCy」,spaCy被廣泛用於各種NLP任務,包括自然
QA問答是自然語言處理NLP中蠻困難的一項任務, 必須從一段文本中識別出使用者的提問,像搜尋引擎就是一種QA的應用, 從眾多的問題中找答案, 那就讓我們親手來打造一下自己專屬的QA系統吧! 找看看有哪些可用模型 在「【Hugging Face】Ep.3 前往Dataset掏金趣」我們有介紹過Hu
這次來介紹一下NLP自然語言處理中重要的一個任務「命名實體識別(Named Entity Recognition)」, 這個任務主要識別出「人名」、「地名」、「公司」…等實體, 透過這些實體辨識結果, 可以近一步的理解意圖, 甚至判斷出該文章主要在講什麼重點…等。 關於更多NER的細節歡迎閱讀: 「
前面我們介紹了「【Hugging Face】Ep.1 平凡人也能玩的起的AI平台」, 我們都知道「詞」是NLP世界中的最小單元, 關於詞的知識歡迎參考: 簡單來說,主要的目的是將文本轉換為模型可以處理的數據, But…, 他主要的任務並不是像jieba…等斷詞器一樣, 而是很單純的扮演文字與模型的橋
Part-of-Speech Tagging, POS是詞性標注的全名, 主要為詞彙標上語言中的語法類別或用途, 再進行後續的分析與處理, 就想像成文件歸檔的動作, 每個文件貼上一個標籤類別, 而透過這些標籤類別進行關聯性的分類歸檔。 一個句子最基本的組成單位是「詞」這在我們之前幾個篇章都有談過,如
我們有想過嗎? 一句簡單的話語, 竟然隱含著豐富的句法結構與規則, 而句法就是依著這樣的規則組合而成, 形成一個完整的句子, 隨著資料量越大, 透過規則與關聯性, 機器就能夠根據我們的話語進行拆解, 並試圖理解我們的意圖進行更貼心的服務, 隨著Chatgpt的興起, 我們也見證到AI的新里程碑, 資
本篇參與的主題活動
在生成式AI與大型語言模型(Large Language Model, LLM)蓬勃發展下,有許多工具可以幫助我們學習與撰寫程式,這篇文章提供了實作範例與一些經驗,分享如何使用ChatGPT(免費的GPT-3.5)協助程式語言的學習,並且完成屬於自己的程式。
前幾個禮拜,AWS 舉行 Startup Day Taiwan。想當然爾,最熱門的主題非生成式 AI (Generative AI) 莫屬。既然 AWS 有現成的工具,身為一名工程師,自然看看無妨,這篇文章算是新手開箱文,會說明如何部署一套基礎模型,並使用 AWS SDK 與其互動。
前言 我在工作中沒有什麼機會接觸到機器學習,學生時期也沒有學習過相關知識。 作為一個業餘小白,我對機器學習非常感興趣。在自學的過程中,我逐漸意識到利用機器學習可以做很多有趣的事情。 因此,我決定嘗試使用 AWS SageMaker JumpStart 來實驗文字生成式繪圖 AI ,以了解機
最近玩到了一個我覺得很新奇有趣的軟體,叫做SillyTavern。 SillyTavern是專用於創建虛擬角色的AI聊天軟體,SillyTavern是TavernAI的分支,但SillyTavern走上了自己的路,加進了許多額外功能,並且仍在積極的持續更新中。 然後,可以色色!
「Prompt」這個詞是提示的意思,但為什麼需要提示呢? 當AI不理解我們的時候,勢必給出的回應並非準確的為我們解答,因此一個好的提示是非常重要的,就如同我們人與人之間的溝通一樣,如何將自己心裡的疑惑轉化成好的問題來提問對方,讓對方理解,進而給出一個明確的答案,這就是提示(Prompt)的重要性,對
在生成式AI與大型語言模型(Large Language Model, LLM)蓬勃發展下,有許多工具可以幫助我們學習與撰寫程式,這篇文章提供了實作範例與一些經驗,分享如何使用ChatGPT(免費的GPT-3.5)協助程式語言的學習,並且完成屬於自己的程式。
前幾個禮拜,AWS 舉行 Startup Day Taiwan。想當然爾,最熱門的主題非生成式 AI (Generative AI) 莫屬。既然 AWS 有現成的工具,身為一名工程師,自然看看無妨,這篇文章算是新手開箱文,會說明如何部署一套基礎模型,並使用 AWS SDK 與其互動。
前言 我在工作中沒有什麼機會接觸到機器學習,學生時期也沒有學習過相關知識。 作為一個業餘小白,我對機器學習非常感興趣。在自學的過程中,我逐漸意識到利用機器學習可以做很多有趣的事情。 因此,我決定嘗試使用 AWS SageMaker JumpStart 來實驗文字生成式繪圖 AI ,以了解機
最近玩到了一個我覺得很新奇有趣的軟體,叫做SillyTavern。 SillyTavern是專用於創建虛擬角色的AI聊天軟體,SillyTavern是TavernAI的分支,但SillyTavern走上了自己的路,加進了許多額外功能,並且仍在積極的持續更新中。 然後,可以色色!
「Prompt」這個詞是提示的意思,但為什麼需要提示呢? 當AI不理解我們的時候,勢必給出的回應並非準確的為我們解答,因此一個好的提示是非常重要的,就如同我們人與人之間的溝通一樣,如何將自己心裡的疑惑轉化成好的問題來提問對方,讓對方理解,進而給出一個明確的答案,這就是提示(Prompt)的重要性,對
你可能也想看
Google News 追蹤
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
本文介紹了流行的Python套件NLTK(Natural Language Toolkit)的主要特點、功能和在中文和英文語料上的應用。從安裝到實際應用,深入介紹了分詞、停用詞去除、詞性標註、命名實體識別等NLP任務的具體實現和步驟,幫助讀者理解和應用NLTK。
Thumbnail
這篇文章討論了自然語言處理技術的發展歷程,從語言模型的引入到深度學習的應用。作者觀察到現今GPT在產出中文國學內容時的深度不足,並提出了自然語言處理領域的倫理使用和版權問題,以及對大眾的影響。最後,作者探討了個人在自然語言領域的發展可能性。
Thumbnail
臺灣立法委員葛如鈞等人表示,臺灣AI訓練所需的繁體中文資料不足,可能影響文化發展。本文探討臺灣AI戰略的法規調適方向,以及臺版ChatGPT繁體中文資料的重要性和法律問題。特別提出建議,臺灣應制定《人工智慧基本法》草案,並調適《著作權法》,希望能否因此提升臺灣AI在國際的競爭力及話語權。
Thumbnail
ChatGPT(全名:聊天生成預訓練轉換器)是一個由 OpenAI 開發的人工智慧聊天機器人程式。它於 2022 年 11 月推出,使用了基於 GPT-3.5、GPT-4 和 GPT-4o 架構的大型語言模型,並以強化學習進行訓練。
大語言模型,例如OpenAI提供的ChatGPT,是過去幾年發展的深度神經網路模型,開啟自然語言處理的新紀元。
Thumbnail
本文透過 Cloud Native Taiwan User Group 之 Infra Labs 雲端主機進行深度學習環境部署,包含 Nvidia GPU driver、PyTorch、Jupyter Lab 等,並進行相關安裝過程說明。
Thumbnail
目前,有50多個國家全球採用GDPR標準,但在亞洲僅有日本和韓國兩個國家採用。民眾黨在立法院提倡,台灣應該成為亞洲第三個採用...
Thumbnail
前言 上一篇討論到如何訓練出模型,此篇將說明Streamlit建立的簡單Web應用程式的解說 Streamlit網頁App_貓狗辨識 連結 程式碼Github連結 [機器學習]CNN學習MNIST 手寫英文字母資料,用網頁展現成果_模型訓練篇 如何連動github與stramlit可以參考
Thumbnail
streamlit與github連動程式庫,呈現即時預測手寫英文字母 整理了一下,先前學的機器學習利用Colab來訓練出能辨識手寫A~Z英文字母的模型,使用的模型是CNN(Convolutional Neural Network,CNN)模型 訓練好的模型,當然是要拿來應用,成果呈現
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
本文介紹了流行的Python套件NLTK(Natural Language Toolkit)的主要特點、功能和在中文和英文語料上的應用。從安裝到實際應用,深入介紹了分詞、停用詞去除、詞性標註、命名實體識別等NLP任務的具體實現和步驟,幫助讀者理解和應用NLTK。
Thumbnail
這篇文章討論了自然語言處理技術的發展歷程,從語言模型的引入到深度學習的應用。作者觀察到現今GPT在產出中文國學內容時的深度不足,並提出了自然語言處理領域的倫理使用和版權問題,以及對大眾的影響。最後,作者探討了個人在自然語言領域的發展可能性。
Thumbnail
臺灣立法委員葛如鈞等人表示,臺灣AI訓練所需的繁體中文資料不足,可能影響文化發展。本文探討臺灣AI戰略的法規調適方向,以及臺版ChatGPT繁體中文資料的重要性和法律問題。特別提出建議,臺灣應制定《人工智慧基本法》草案,並調適《著作權法》,希望能否因此提升臺灣AI在國際的競爭力及話語權。
Thumbnail
ChatGPT(全名:聊天生成預訓練轉換器)是一個由 OpenAI 開發的人工智慧聊天機器人程式。它於 2022 年 11 月推出,使用了基於 GPT-3.5、GPT-4 和 GPT-4o 架構的大型語言模型,並以強化學習進行訓練。
大語言模型,例如OpenAI提供的ChatGPT,是過去幾年發展的深度神經網路模型,開啟自然語言處理的新紀元。
Thumbnail
本文透過 Cloud Native Taiwan User Group 之 Infra Labs 雲端主機進行深度學習環境部署,包含 Nvidia GPU driver、PyTorch、Jupyter Lab 等,並進行相關安裝過程說明。
Thumbnail
目前,有50多個國家全球採用GDPR標準,但在亞洲僅有日本和韓國兩個國家採用。民眾黨在立法院提倡,台灣應該成為亞洲第三個採用...
Thumbnail
前言 上一篇討論到如何訓練出模型,此篇將說明Streamlit建立的簡單Web應用程式的解說 Streamlit網頁App_貓狗辨識 連結 程式碼Github連結 [機器學習]CNN學習MNIST 手寫英文字母資料,用網頁展現成果_模型訓練篇 如何連動github與stramlit可以參考
Thumbnail
streamlit與github連動程式庫,呈現即時預測手寫英文字母 整理了一下,先前學的機器學習利用Colab來訓練出能辨識手寫A~Z英文字母的模型,使用的模型是CNN(Convolutional Neural Network,CNN)模型 訓練好的模型,當然是要拿來應用,成果呈現