建構命名實體辨識應用程式
概觀
本指南將引導您建構和執行命名實體辨識 (NER) 應用程式。您將使用 Python 和 spaCy 建構應用程式,然後設定環境並使用 Docker 執行應用程式。
應用程式會處理輸入文字,以識別並列印命名實體,例如人物、組織或地點。
先決條件
- 您已安裝最新版本的 Docker Desktop。Docker 會定期新增新功能,本指南的某些部分可能僅適用於最新版本的 Docker Desktop。
- 您有一個 Git 用戶端。本節中的範例使用基於命令列的 Git 用戶端,但您可以使用任何用戶端。
取得範例應用程式
開啟終端機,並使用以下命令複製範例應用程式的儲存庫。
$ git clone https://github.com/harsh4870/Docker-NLP.git
驗證您已複製儲存庫。
您應該在
Docker-NLP
目錄中看到以下檔案。01_sentiment_analysis.py 02_name_entity_recognition.py 03_text_classification.py 04_text_summarization.py 05_language_translation.py entrypoint.sh requirements.txt Dockerfile README.md
瀏覽應用程式程式碼
名稱辨識應用程式的原始程式碼位於 `Docker-NLP/02_name_entity_recognition.py` 檔案中。在文字或程式碼編輯器中開啟 `02_name_entity_recognition.py` 以在下列步驟中瀏覽其內容。
導入所需的程式庫。
import spacy
此行導入了 `spaCy` 程式庫。 `spaCy` 是 Python 中常用的自然語言處理 (NLP) 程式庫。
載入語言模型。
nlp = spacy.load("en_core_web_sm")
這裡,`spacy.load` 函式載入了一個語言模型。 `en_core_web_sm` 模型是一個小型英文語言模型。您可以將此模型用於各種 NLP 任務,包括分詞、詞性標記和命名實體辨識。
指定主要執行區塊。
if __name__ == "__main__":
這個 Python 語法確保以下程式碼區塊僅在此腳本是主程式時才運行。它提供了靈活性,允許腳本既可以作為獨立程式運行,也可以作為導入的模組運行。
建立一個無限迴圈以進行連續輸入。
while True:
這個 while 迴圈會無限期地運行,直到被明確中斷為止。它允許使用者持續輸入文字以進行實體辨識,直到他們決定退出為止。
取得使用者輸入。
input_text = input("Enter the text for entity recognition (type 'exit' to end): ")
此行程式碼提示使用者輸入文字。然後,程式將對此文字執行實體辨識。
定義退出條件。
if input_text.lower() == 'exit': print("Exiting...") break
如果使用者輸入任何內容,程式會將輸入轉換為小寫並將其與 `exit` 進行比較。如果它們相符,程式會列印 **正在退出...** 並跳出 while 迴圈,有效地結束程式。
執行命名實體辨識。
doc = nlp(input_text) for ent in doc.ents: print(f"Entity: {ent.text}, Type: {ent.label_}")
- `doc = nlp(input_text)`:在此,nlp 模型會處理使用者輸入的文字。這會建立一個 Doc 物件,其中包含各種 NLP 屬性,包括已識別的實體。
- `for ent in doc.ents:`:此迴圈會迭代文字中找到的實體。
- `print(f"Entity: {ent.text}, Type: {ent.label_}")`:對於每個實體,它會列印實體文字及其類型(例如 PERSON、ORG 或 GPE)。
建立 `requirements.txt`。
範例應用程式已包含 `requirements.txt` 檔案,用於指定應用程式導入所需的套件。在程式碼或文字編輯器中開啟 `requirements.txt` 以瀏覽其內容。
# 02 named_entity_recognition spacy==3.7.2 ...
命名辨識應用程式僅需要 `spacy` 套件。
瀏覽應用程式環境
您將使用 Docker 在容器中運行應用程式。Docker 允許您將應用程式容器化,提供一致且隔離的環境來運行它。這表示應用程式將在其 Docker 容器內按預期運行,無論底層系統差異如何。
要在容器中運行應用程式,需要一個 Dockerfile。Dockerfile 是一個文字文件,其中包含您在命令列上呼叫以組裝映像的所有命令。映像是一個唯讀範本,其中包含用於建立 Docker 容器的說明。
範例應用程式已包含一個 `Dockerfile`。在程式碼或文字編輯器中開啟 `Dockerfile` 以瀏覽其內容。
以下步驟說明 `Dockerfile` 的每個部分。如需更多詳細資訊,請參閱 Dockerfile 參考。
指定基礎映像。
FROM python:3.8-slim
此命令設定建構的基礎。 `python:3.8-slim` 是 Python 3.8 映像的輕量級版本,針對大小和速度進行了最佳化。使用此 slim 映像可以減少 Docker 映像的整體大小,從而加快下載速度並減少安全漏洞的表面積。這對於您可能不需要完整標準 Python 映像的基於 Python 的應用程式特別有用。
設定工作目錄。
WORKDIR /app
`WORKDIR` 設定 Docker 映像中的目前工作目錄。將其設定為 `/app`,可以確保 Dockerfile 中的所有後續命令(例如 `COPY` 和 `RUN`)都在此目錄中執行。這也有助於組織您的 Docker 映像,因為所有與應用程式相關的檔案都包含在特定目錄中。
將需求檔案複製到映像中。
COPY requirements.txt /app
`COPY` 命令將 `requirements.txt` 檔案從您的本機電腦傳輸到 Docker 映像中。此檔案列出了應用程式所需的所有 Python 依賴項。將其複製到容器中允許下一個命令(`RUN pip install`)在映像環境中安裝這些依賴項。
在映像中安裝 Python 依賴項。
RUN pip install --no-cache-dir -r requirements.txt
此行使用 `pip`(Python 的套件安裝程式)來安裝 `requirements.txt` 中列出的套件。 `--no-cache-dir` 選項會停用快取,這可以透過不儲存不必要的快取資料來減少 Docker 映像的大小。
執行其他命令。
RUN python -m spacy download en_core_web_sm
此步驟特定於需要 spaCy 程式庫的 NLP 應用程式。它會下載 `en_core_web_sm` 模型,這是一個適用於 spaCy 的小型英文語言模型。
將應用程式程式碼複製到映像中。
COPY *.py /app COPY entrypoint.sh /app
這些命令將您的 Python 腳本和 `entrypoint.sh` 腳本複製到映像的 `/app` 目錄中。這一點至關重要,因為容器需要這些腳本來運行應用程式。 `entrypoint.sh` 腳本尤其重要,因為它指示應用程式如何在容器內啟動。
設定 `entrypoint.sh` 腳本的權限。
RUN chmod +x /app/entrypoint.sh
這個指令會修改
entrypoint.sh
的檔案權限,使其可執行。這個步驟是必要的,以確保 Docker 容器可以執行此腳本來啟動應用程式。設定進入點。
ENTRYPOINT ["/app/entrypoint.sh"]
ENTRYPOINT
指令將容器設定為以entrypoint.sh
作為其預設可執行檔。這表示當容器啟動時,它會自動執行此腳本。您可以使用程式碼或文字編輯器開啟
entrypoint.sh
腳本來查看其內容。由於範例包含多個應用程式,此腳本允許您指定容器啟動時要執行的應用程式。
執行應用程式
要使用 Docker 執行應用程式
建置映像檔。
在終端機中,於
Dockerfile
所在的目錄下執行以下指令。$ docker build -t basic-nlp .
以下是指令的詳細說明
docker build
:這是用於根據 Dockerfile 和一個上下文來建置 Docker 映像檔的主要指令。上下文通常是一組位於指定位置的檔案,通常是包含 Dockerfile 的目錄。-t basic-nlp
:這是用於標記映像檔的選項。-t
旗標代表標記。它會為映像檔指定一個名稱,在本例中為basic-nlp
。標記是一種方便日後參考映像檔的方式,尤其是在將映像檔推送至 registry 或執行容器時。.
:這是指令的最後一部分,用於指定建置上下文。句點 (.
) 表示目前目錄。Docker 將會在此目錄中尋找 Dockerfile。建置上下文(在本例中為目前目錄)會傳送至 Docker daemon 以啟用建置。它包含指定目錄中的所有檔案和子目錄。
更多詳細資訊,請參閱 docker build CLI 參考。
Docker 在建置映像檔時會在您的終端機輸出多個日誌。您將會看到它下載並安裝相依性。根據您的網路連線速度,這可能需要幾分鐘的時間。Docker 具有快取功能,因此後續的建置速度會更快。完成後,終端機將會返回提示符號。
以容器的形式執行映像檔。
在終端機中,執行以下指令。
$ docker run -it basic-nlp 02_name_entity_recognition.py
以下是指令的詳細說明
docker run
:這是用於從 Docker 映像檔執行新容器的主要指令。-it
:這是兩個選項的組合-i
或--interactive
:即使未附加,也會保持標準輸入 (STDIN) 開啟。它允許容器保持在前台執行並進行互動。-t
或--tty
:這會配置一個偽終端 (pseudo-TTY),基本上是模擬一個終端機,例如命令提示字元或 shell。它讓您可以與容器內的應用程式進行互動。
basic-nlp
:這指定了用於建立容器的 Docker 映像檔名稱。在本例中,它是您使用docker build
指令建立的名為basic-nlp
的映像檔。02_name_entity_recognition.py
:這是您要在 Docker 容器內執行的腳本。它會被傳遞給entrypoint.sh
腳本,該腳本會在容器啟動時執行它。
更多詳細資訊,請參閱 docker run CLI 參考。
注意事項
對於 Windows 使用者,執行容器時可能會發生錯誤。請確認
entrypoint.sh
中的換行字元為LF
(\n
) 而不是CRLF
(\r\n
),然後重新建置映像檔。更多詳細資訊,請參閱 避免非預期的語法錯誤,請在容器中的檔案使用 Unix 樣式的換行字元。容器啟動後,您將會在終端機中看到以下內容。
Enter the text for entity recognition (type 'exit' to end):
測試應用程式。
輸入一些資訊以取得命名實體辨識結果。
Enter the text for entity recognition (type 'exit' to end): Apple Inc. is planning to open a new store in San Francisco. Tim Cook is the CEO of Apple. Entity: Apple Inc., Type: ORG Entity: San Francisco, Type: GPE Entity: Tim Cook, Type: PERSON Entity: Apple, Type: ORG
摘要
本指南示範了如何建置和執行命名實體辨識應用程式。您學習了如何使用 Python 和 spaCy 建置應用程式,然後使用 Docker 設定環境並執行應用程式。
相關資訊
後續步驟
探索更多 自然語言處理指南。