構建命名實體識別應用程式
概述
本指南將引導您構建和執行命名實體識別 (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進行比較。如果匹配,程式會列印 Exiting... 並退出 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 映象的輕量級版本,針對大小和速度進行了最佳化。使用此精簡映象可以減少 Docker 映象的整體大小,從而加快下載速度,並減少安全漏洞的攻擊面。對於基於 Python 的應用程式,這特別有用,因為您可能不需要完整的標準 Python 映象。設定工作目錄。
WORKDIR /appWORKDIR設定 Docker 映象內的當前工作目錄。將其設定為/app,可以確保 Dockerfile 中所有後續命令(如COPY和RUN)都在此目錄中執行。這也有助於組織 Docker 映象,因為所有與應用程式相關的檔案都包含在一個特定目錄中。將 requirements 檔案複製到映象中。
COPY requirements.txt /appCOPY命令將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。標籤是方便地在以後引用映象的方法,尤其是在將它們推送到登錄檔或執行容器時。.:這是命令的最後部分,它指定構建上下文。句點 (.) 表示當前目錄。Docker 會在此目錄中查詢 Dockerfile。構建上下文(在本例中為當前目錄)會發送到 Docker 守護程式以啟用構建。它包含指定目錄中所有檔案和子目錄。
有關更多詳細資訊,請參閱 docker build CLI 參考。
Docker 在構建映象時會在你的控制檯中輸出一些日誌。你會看到它下載並安裝依賴項。根據你的網路連線情況,這可能需要幾分鐘。Docker 確實有一個快取功能,因此後續構建可以更快。當構建完成時,控制檯將返回到提示符。
將映象作為容器執行。
在終端中,執行以下命令。
$ docker run -it basic-nlp 02_name_entity_recognition.py以下是命令的分解
docker run:這是用於從 Docker 映象執行新容器的主要命令。-it:這是兩個選項的組合-i或--interactive:即使沒有附加,這也將保持標準輸入 (STDIN) 開啟。它使容器能夠在前臺執行並保持互動性。-t或--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 設定環境並執行應用程式。
相關資訊
下一步
探索更多 自然語言處理指南。