構建文字摘要應用
概述
在本指南中,您將學習如何構建和執行一個文字摘要應用程式。您將使用 Python 和 Bert Extractive Summarizer 構建該應用程式,然後使用 Docker 設定環境並執行它。
示例文字摘要應用程式使用了 Bert Extractive Summarizer。這個工具利用 HuggingFace Pytorch transformers 庫來執行提取式摘要。它的工作原理是首先嵌入句子,然後執行聚類演算法,找出最接近聚類質心的句子。
先決條件
- 您已安裝最新版本的 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/04_text_summarization.py
檔案中。在接下來的步驟中,用文字或程式碼編輯器開啟 04_text_summarization.py
來探索其內容。
匯入所需的庫。
from summarizer import Summarizer
這行程式碼從
summarizer
包中匯入了Summarizer
類,這對您的文字摘要應用程式至關重要。summarizer 模組實現了 Bert Extractive Summarizer,利用了在自然語言處理(NLP)領域享有盛譽的 HuggingFace Pytorch transformers 庫。該庫提供了對 BERT 等預訓練模型的訪問,這些模型徹底改變了包括文字摘要在內的語言理解任務。BERT 模型,即 Bidirectional Encoder Representations from Transformers(來自 Transformer 的雙向編碼器表示),擅長理解語言中的上下文,使用一種稱為“注意力”的機制來確定句子中單詞的重要性。對於摘要任務,模型會嵌入句子,然後使用聚類演算法來識別關鍵句子,即那些最接近這些聚類質心的句子,從而有效地捕捉文字的主要思想。
指定主執行塊。
if __name__ == "__main__":
這個 Python 慣用法確保了以下程式碼塊僅在該指令碼是主程式時執行。它提供了靈活性,允許該指令碼既可以作為獨立程式執行,也可以作為匯入的模組使用。
建立一個無限迴圈以進行連續輸入。
while True: input_text = input("Enter the text for summarization (type 'exit' to end): ") if input_text.lower() == 'exit': print("Exiting...") break
一個無限迴圈會持續提示您輸入文字,確保了互動性。當您鍵入
exit
時,迴圈會中斷,讓您能有效地控制應用程式流程。建立一個 Summarizer 例項。
bert_model = Summarizer()
在這裡,您建立了一個名為
bert_model
的 Summarizer 類的例項。該例項現在已準備好使用 BERT 模型執行摘要任務,將嵌入句子和聚類等複雜過程簡化為一個易於訪問的介面。生成並列印摘要。
summary = bert_model(input_text) print(summary)
您輸入的文字由 bert_model 例項處理,然後返回一個摘要版本。這展示了 Python 高階庫在用最少的程式碼實現複雜操作方面的強大能力。
建立
requirements.txt
。示例應用程式已包含requirements.txt
檔案,用於指定應用程式匯入的必要模組。用程式碼或文字編輯器開啟requirements.txt
來探索其內容。... # 04 text_summarization bert-extractive-summarizer==0.10.1 ... torch==2.1.2
文字摘要應用程式需要
bert-extractive-summarizer
和torch
模組。summarizer 模組生成輸入文字的摘要。這需要 PyTorch,因為用於生成摘要的底層 BERT 模型是在 PyTorch 中實現的。
探索應用程式環境
您將使用 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 映象,因為所有與應用程式相關的檔案都包含在一個特定目錄中。將 requirements 檔案複製到映象中。
COPY requirements.txt /app
COPY
命令將requirements.txt
檔案從您的本地計算機傳輸到 Docker 映象中。此檔案列出了應用程式所需的所有 Python 依賴項。將其複製到容器中,可以讓下一個命令(RUN pip install
)在映象環境中安裝這些依賴項。在映象中安裝 Python 依賴項。
RUN pip install --no-cache-dir -r requirements.txt
這行程式碼使用 Python 的包安裝程式
pip
來安裝requirements.txt
中列出的包。--no-cache-dir
選項停用了快取,透過不儲存不必要的快取資料來減小 Docker 映象的大小。執行其他命令。
RUN python -m spacy download en_core_web_sm
這一步特定於需要 spaCy 庫的 NLP 應用程式。它會下載
en_core_web_sm
模型,這是一個用於 spaCy 的小型英語語言模型。雖然此應用程式不需要它,但為了與可能使用此 Dockerfile 的其他 NLP 應用程式相容,它被包含在內。將應用程式程式碼複製到映象中。
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
標誌代表 tag(標籤)。它為映象分配一個名稱,在本例中是basic-nlp
。標籤是以後引用映象的便捷方式,尤其是在將它們推送到登錄檔或執行容器時。.
:這是命令的最後一部分,指定了構建上下文。句點 (.
) 表示當前目錄。Docker 將在此目錄中查詢 Dockerfile。構建上下文(在本例中為當前目錄)被髮送到 Docker 守護程序以啟用構建。它包括指定目錄中的所有檔案和子目錄。
有關更多詳細資訊,請參閱 docker build CLI 參考。
在構建映象時,Docker 會向您的控制檯輸出幾條日誌。您會看到它下載並安裝依賴項。根據您的網路連線情況,這可能需要幾分鐘時間。Docker 確實有快取功能,因此後續的構建會更快。完成後,控制檯將返回到提示符。
將映象作為容器執行。
在終端中,執行以下命令。
$ docker run -it basic-nlp 04_text_summarization.py
以下是對該命令的分解:
docker run
: 這是用於從 Docker 映象執行新容器的主要命令。-it
: 這是兩個選項的組合:-i
或--interactive
: 即使未附加,也保持標準輸入 (STDIN) 開啟。它使容器能夠在前臺執行並保持互動。-t
或--tty
: 這會分配一個偽 TTY,本質上是模擬一個終端,如命令提示符或 shell。它讓您能夠與容器內的應用程式進行互動。
basic-nlp
: 這指定了用於建立容器的 Docker 映象的名稱。在本例中,它是您使用 `docker build` 命令建立的名為 `basic-nlp` 的映象。04_text_summarization.py
:這是您想在 Docker 容器內執行的指令碼。它被傳遞給entrypoint.sh
指令碼,該指令碼在容器啟動時執行它。
有關更多詳細資訊,請參閱 docker run CLI 參考。
注意對於 Windows 使用者,在執行容器時可能會出現錯誤。請驗證
entrypoint.sh
中的行尾是LF
(\n
) 而不是CRLF
(\r\n
),然後重新構建映象。更多詳細資訊,請參閱[避免意外的語法錯誤,為容器中的檔案使用 Unix 風格的行尾](/desktop/troubleshoot-and-support/troubleshoot/topics/#Unexpected-syntax-errors-use-Unix-style-line endings-for-files-in-containers)。容器啟動後,您將在控制檯中看到以下內容。
Enter the text for summarization (type 'exit' to end):
測試應用程式。
輸入一些文字以獲得文字摘要。
Enter the text for summarization (type 'exit' to end): Artificial intelligence (AI) is a branch of computer science that aims to create machines capable of intelligent behavior. These machines are designed to mimic human cognitive functions such as learning, problem-solving, and decision-making. AI technologies can be classified into two main types: narrow or weak AI, which is designed for a particular task, and general or strong AI, which possesses the ability to understand, learn, and apply knowledge across various domains. One of the most popular approaches in AI is machine learning, where algorithms are trained on large datasets to recognize patterns and make predictions. Artificial intelligence (AI) is a branch of computer science that aims to create machines capable of intelligent behavior. These machines are designed to mimic human cognitive functions such as learning, problem-solving, and decision-making.
摘要
在本指南中,您學習瞭如何構建和執行文字摘要應用程式。您學習瞭如何使用 Python 和 Bert Extractive Summarizer 構建應用程式,然後使用 Docker 設定環境並執行應用程式。
相關資訊
後續步驟
探索更多自然語言處理指南。