建置一個文字摘要應用程式

概覽

在本指南中,您將學習如何建置並執行一個文字摘要應用程式。您將使用 Python 與 Bert Extractive Summarizer 建置該應用程式,然後設定環境並使用 Docker 執行該應用程式。

此範例文字摘要應用程式使用 Bert Extractive Summarizer。此工具利用 HuggingFace Pytorch transformers 函式庫來執行抽取式摘要。其運作方式是先對句子進行嵌入(embedding),接著執行分群演算法,找出最接近群集中心(centroids)的句子。

先決條件

  • 您已安裝最新版本的 Docker Desktop。Docker 定期新增功能,本指南的部分內容可能僅適用於最新版本的 Docker Desktop。
  • 您擁有一個 Git 用戶端。本節中的範例使用命令列 Git 用戶端,但您可以使用任何用戶端。

取得範例應用程式

  1. 開啟終端機,並使用下列指令複製範例應用程式的儲存庫。

    $ git clone https://github.com/harsh4870/Docker-NLP.git
    
  2. 驗證您是否已成功複製儲存庫。

    您應該會在 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,以便在接下來的步驟中探索其內容。

  1. 匯入所需的程式庫。

    from summarizer import Summarizer

    這行程式碼從 summarizer 套件中匯入了 Summarizer 類別,這是文字摘要應用程式的核心。summarizer 模組實作了 Bert Extractive Summarizer,利用在 NLP(自然語言處理)領域中聞名的 HuggingFace Pytorch transformers 函式庫。此函式庫提供了對預訓練模型(如 BERT)的存取權,這些模型徹底改變了語言理解任務,包括文字摘要。

    BERT 模型(Bidirectional Encoder Representations from Transformers)擅長理解語言中的上下文,它使用一種稱為「注意力(attention)」的機制來判斷句子中詞彙的重要性。對於摘要任務,該模型會對句子進行嵌入,然後使用分群演算法來識別關鍵句子(即最接近這些群集中心的句子),從而有效地擷取文本的主要概念。

  2. 指定主執行區塊。

    if __name__ == "__main__":

    此 Python 慣用語確保只有在該腳本作為主程式執行時,才會執行以下程式碼區塊。它提供了靈活性,允許該腳本既能作為獨立程式運作,也能作為已匯入的模組使用。

  3. 建立一個無限迴圈以進行連續輸入。

       while True:
          input_text = input("Enter the text for summarization (type 'exit' to end): ")
    
          if input_text.lower() == 'exit':
             print("Exiting...")
             break

    一個無限迴圈會持續提示您輸入文字,以確保互動性。當您輸入 exit 時迴圈會中斷,讓您可以有效地控制應用程式流程。

  4. 建立 Summarizer 的執行個體。

          bert_model = Summarizer()

    在此,您建立了一個名為 bert_model 的 Summarizer 類別執行個體。該執行個體現在已準備好使用 BERT 模型執行摘要任務,將句子嵌入和分群的複雜過程簡化為一個易於使用的介面。

  5. 產生並列印摘要。

    summary = bert_model(input_text)
    print(summary)

    您的輸入文字會由 bert_model 執行個體處理,隨後回傳摘要版本。這展示了 Python 高階函式庫強大之處,能以最少的程式碼完成複雜的操作。

  6. 建立 requirements.txt。範例應用程式中已包含 requirements.txt 檔案,用以指定應用程式匯入所需的模組。請在程式碼或文字編輯器中開啟 requirements.txt 以探索其內容。

    ...
    
    # 04 text_summarization
    bert-extractive-summarizer==0.10.1
    
    ...
    
    torch==2.1.2

    文字摘要應用程式需要 bert-extractive-summarizertorch 模組。summarizer 模組用於產生輸入文字的摘要。這需要 PyTorch,因為用於產生摘要的底層 BERT 模型是使用 PyTorch 實作的。

探索應用程式環境

您將使用 Docker 在容器中執行應用程式。Docker 讓您能夠將應用程式容器化,為執行它提供一致且隔離的環境。這意味著無論基礎系統有何差異,應用程式都能在 Docker 容器內按預期運作。

若要在容器中執行應用程式,需要一個 Dockerfile。Dockerfile 是一個文字文件,其中包含您在命令列上執行以組裝映像檔的所有指令。映像檔 (image) 是一個唯讀範本,其中包含建立 Docker 容器的說明。

範例應用程式中已經包含了 Dockerfile。在程式碼或文字編輯器中開啟 Dockerfile 以探索其內容。

下列步驟說明 Dockerfile 的每個部分。如需更多詳細資料,請參閱 Dockerfile 參考

  1. 指定基礎映像檔。

    FROM python:3.8-slim

    此指令設定了建置的基礎。python:3.8-slim 是 Python 3.8 映像檔的輕量級版本,針對大小和速度進行了最佳化。使用此精簡映像檔可縮減 Docker 映像檔的整體大小,從而加快下載速度並減少安全漏洞的暴露面。這對於 Python 應用程式特別有用,因為您可能不需要完整的標準 Python 映像檔。

  2. 設定工作目錄。

    WORKDIR /app

    WORKDIR 設定 Docker 映像檔內目前的工作目錄。透過將其設定為 /app,您可以確保 Dockerfile 中後續的所有指令(例如 COPYRUN)都在此目錄中執行。這也有助於組織您的 Docker 映像檔,因為所有與應用程式相關的檔案都包含在特定目錄中。

  3. 將需求檔案複製到映像檔中。

    COPY requirements.txt /app

    COPY 命令會將 requirements.txt 檔案從您的本機機器傳輸到 Docker 映像中。此檔案列出了應用程式所需的所有 Python 相依套件。將其複製到容器中,以便下一個命令(RUN pip install)能在映像環境中安裝這些相依套件。

  4. 在映像檔中安裝 Python 相依套件。

    RUN pip install --no-cache-dir -r requirements.txt

    此行使用 Python 的套件安裝程式 pip 來安裝 requirements.txt 中列出的套件。--no-cache-dir 選項會停用快取,這透過不儲存不必要的快取資料來縮減 Docker 映像檔的大小。

  5. 執行額外指令。

    RUN python -m spacy download en_core_web_sm

    此步驟專門針對需要 spaCy 程式庫的 NLP 應用程式。它會下載 en_core_web_sm 模型,這是一個適用於 spaCy 的小型英語語言模型。雖然本應用程式不需要它,但為了與可能使用此 Dockerfile 的其他 NLP 應用程式相容而包含在內。

  6. 將應用程式程式碼複製到映像檔中。

    COPY *.py /app
    COPY entrypoint.sh /app

    這些指令將您的 Python 腳本和 entrypoint.sh 腳本複製到映像檔的 /app 目錄中。這點至關重要,因為容器需要這些腳本才能執行應用程式。entrypoint.sh 腳本特別重要,因為它決定了應用程式如何在容器內啟動。

  7. 設定 entrypoint.sh 腳本的權限。

    RUN chmod +x /app/entrypoint.sh

    此指令會修改 entrypoint.sh 的檔案權限,使其可執行。此步驟是必要的,以確保 Docker 容器能夠執行此腳本來啟動應用程式。

  8. 設定進入點 (Entry point)。

    ENTRYPOINT ["/app/entrypoint.sh"]

    ENTRYPOINT 指令將容器配置為執行 entrypoint.sh 作為其預設可執行檔。這意味著當容器啟動時,它會自動執行該腳本。

    您可以透過在程式碼或文字編輯器中開啟 entrypoint.sh 腳本來探索它。由於範例包含多個應用程式,該腳本讓您可以指定容器啟動時要執行哪個應用程式。

執行應用程式

若要使用 Docker 執行應用程式

  1. 建置映像檔。

    在終端機中,於 Dockerfile 所在的目錄內執行下列指令。

    $ docker build -t basic-nlp .
    

    以下是該指令的詳細解析

    • docker build:這是用於從 Dockerfile 和內容 (context) 建置 Docker 映像檔的主要指令。內容通常是指定位置的一組檔案,通常是包含 Dockerfile 的目錄。
    • -t basic-nlp:這是用於標記映像檔的選項。-t 旗標代表標籤 (tag)。它會為映像檔指定名稱,在此例中為 basic-nlp。標籤是稍後參考映像檔的方便方式,特別是在將它們推送到登錄檔或執行容器時。
    • .:這是指令的最後一部分,指定建置內容。句點 (.) 表示目前目錄。Docker 將在此目錄中尋找 Dockerfile。建置內容(在此例中為目前目錄)會發送到 Docker 常駐程式 (daemon) 以進行建置。它包含指定目錄中的所有檔案和子目錄。

    如需更多詳細資料,請參閱 docker build CLI 參考

    Docker 在建置映像檔時會向您的主控台輸出多則日誌。您會看到它下載並安裝相依套件。根據您的網路連線狀況,這可能需要幾分鐘的時間。Docker 確實有快取功能,因此後續的建置速度可能會更快。完成後,主控台將會回到提示字元。

  2. 將映像檔作為容器執行。

    在終端機中,執行下列指令。

    $ 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):
    
  3. 測試應用程式。

    輸入一些文字以取得文字摘要。

    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 執行該應用程式。

相關資訊

下一步

探索更多 自然語言處理指南

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.