构建命名实体识别应用程序
概述
本指南将引导您构建和运行命名实体识别 (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 设置环境并运行应用程序。
相关信息
下一步
探索更多 自然语言处理指南。