建構文字摘要應用程式

概觀

在本指南中,您將學習如何建構和執行文字摘要應用程式。您將使用 Python 和 Bert 抽取式摘要器建構應用程式,然後設定環境並使用 Docker 執行應用程式。

範例文字摘要應用程式使用 Bert 抽取式摘要器。此工具利用 HuggingFace Pytorch transformers 函式庫來執行抽取式摘要。其運作方式是先嵌入句子,然後執行叢聚演算法,找出最接近叢聚中心點的句子。

先決條件

  • 您已安裝最新版本的 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 抽取式摘要器,它利用了 NLP(自然語言處理)領域中著名的 HuggingFace Pytorch transformers 函式庫。該函式庫提供了存取預先訓練模型(如 BERT)的途徑,BERT徹底改變了語言理解任務,包括文字摘要。

    BERT 模型(即來自 Transformers 的雙向編碼器表示法)擅長理解語言中的上下文,它使用一種稱為「注意力」的機制來確定句子中單詞的重要性。對於摘要,模型會嵌入句子,然後使用叢聚演算法來識別關鍵句子(即最接近這些叢聚中心點的句子),從而有效地擷取文字的主要思想。

  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 是一個文字文件,其中包含您在命令列上呼叫以組合映像的所有命令。映像是一個唯讀範本,其中包含用於建立 Docker 容器的說明。

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

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

  1. 指定基礎映像。

    FROM python:3.8-slim

    此命令設定建構的基礎。 python:3.8-slim 是 Python 3.8 映像的輕量級版本,針對大小和速度進行了最佳化。使用此 slim 映像可以減少 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. 設定進入點。

    ENTRYPOINT ["/app/entrypoint.sh"]

    ENTRYPOINT 指令會將容器設定為以 entrypoint.sh 作為其預設可執行檔來執行。這表示當容器啟動時,它會自動執行此腳本。

    您可以使用程式碼或文字編輯器開啟 entrypoint.sh 腳本來查看其內容。由於範例包含多個應用程式,因此該腳本允許您指定容器啟動時要執行的應用程式。

執行應用程式

使用 Docker 執行應用程式

  1. 建置映像檔。

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

    $ docker build -t basic-nlp .
    

    以下是指令的分解說明

    • docker build:這是用於從 Dockerfile 和一個建置上下文建置 Docker 映像檔的主要指令。建置上下文通常是一組位於指定位置的檔案,通常是包含 Dockerfile 的目錄。
    • -t basic-nlp:這是用於標記映像檔的選項。-t 旗標代表標籤 (tag)。它會為映像檔指定一個名稱,在本例中為 basic-nlp。標籤是稍後參考映像檔的便捷方式,尤其是在將映像檔推送至 registry 或執行容器時。
    • .:這是指令的最後一部分,用於指定建置上下文。句點 (.) 表示目前目錄。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:這會配置一個虛擬終端機 (pseudo-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 樣式的換行字元

    容器啟動後,您將會在終端機中看到以下內容。

    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 設定環境並執行應用程式。

相關資訊