在Java中应用自然语言处理:全部来自命令行


了解更多关于Java中的自然语言处理!

我们都知道机器学习工具和云服务是通过浏览器工作的,它们为我们提供了一个界面,我们可以用它来执行日常数据分析、模型培训、评估和其他不同程度的高效任务。

但是,如果您想在本地计算机或组织中可用的基础架构上运行这些任务,您会怎么做?而且,如果这些可用的资源不能满足先决条件,那么就要做好端到端的数据科学或机器学习任务。那时,就可以访问与云提供商无关的深度学习管理环境,例如Valohai可以帮忙。此外,我们将使用free-tier任何人都可以接触到。

你可能还喜欢:How to Create Java NLP Apps Using Google NLP API

我们将执行构建一个Java应用程序的任务,然后使用它来训练和评估一个自然语言处理模型,我们将在命令行界面上完成所有的工作,减少可用web界面之间的交互——基本上,这将是一个端到端的过程,一直到训练、保存和评估自然语言处理模型。我们不需要太担心设置、配置或管理任何环境。

我们的目标

在这篇文章中,我们将学习做一些事情,特别是涵盖不同层次的抽象(没有特别的顺序):

  • 如何在本地机器上构建和运行自然语言处理模型
  • 如何在云上构建和运行自然语言处理模型
  • 如何构建运行在中央处理器或图形处理器上的自然语言处理Java应用程序
  • 大多数例子都不是基于Java的,更不用说基于Java的了
  • 大多数例子都是基于中央处理器的,更不用说基于图形处理器了
  • 如何根据资源(即图形处理器)的缺失/存在来执行上述操作
  • 如何为Java构建一个CUDA容器
  • 如何从命令行完成以上所有工作
  • 通过单独的命令
  • 通过shell脚本

我们需要什么以及如何需要?

以下是我们需要开始的内容:

  • 在任何操作系统上构建和运行的Java应用程序
  • 允许连接到远程云服务的命令行界面工具
  • Shell脚本和代码配置来管理上述所有内容

怎么这项任务的一部分并不难。一旦我们明确了我们的目标和要求,我们将在下面的章节中对此进行扩展。

面向Java的NLP:DL4J

我们有开始这篇文章所需的所有代码和说明captured for you on GitHub。以下是熟悉该项目所需的步骤。

快速启动

要快速开始,我们需要做的只是:

$ git clone https://github.com/valohai/dl4j-nlp-cuda-example/
$ cd dl4j-nlp-cuda-example
$ vh project create
$ vh project open

### Go to the Settings page > Repository tab and update the git repo address 
### with https://github.com/valohai/dl4j-nlp-cuda-example/
  • 更新Valohaigit回购中具有最新提交的项目
$ vh project fetch

现在,您已经准备好开始使用从命令行执行机器学习任务的能力了。

参见Advanced installation and setup section in the README为了找出我们需要在你的系统上安装和配置什么,以便在你的本地机器上或Docker容器内运行应用程序和实验——这对于这篇文章来说不是必须的,但是你可以在以后尝试一下。

关于valohai.yaml

你会注意到我们有一个valohai.yaml在git回购和我们的valohai.yaml文件包含几个您可以使用的步骤。我们通过他们的名字来招募他们,我们将在运行我们的步骤时使用这些名字:

  • 构建我们的超级jar(包括中央处理器和图形处理器版本)Valohai
  • 运行NLP训练,使用优步jar的中央处理器版本Valohai
  • 运行自然语言处理培训,使用优步jar的图形处理器版本Valohai
  • 评估-模型-linux:从上面的train-*执行步骤之一评估训练好的NLP模型
  • 了解你的GPU:在任何实例上运行以收集该实例上的GPU/Nvidia相关细节,我们运行与上述其他步骤(构建和运行步骤)相同的脚本

从命令行构建一个Java应用程序

假设您都设置好了,我们将从在Valohai平台,这就像运行两个命令之一一样简单:

$ vh exec run build-cpu-gpu-uberjar [--adhoc]

### Run `vh exec run --help` to find out more about this command


然后,系统会提示您执行计数器,该计数器不是数字:

<--snipped-->
��  Success! Execution #1 created. See https://app.valohai.com/p/valohai/dl4j-nlp-cuda-example/execution/016dfef8-3a72-22d4-3d9b-7f992e6ac94d/

注意:使用--adhoc仅当您尚未设置Valohai使用git repo的项目或有未保存的提交,并希望在确定配置之前进行实验。

您可以通过以下方式观看执行过程:

$ vh watch 1

### the parameter 1 is the counter returned by the 
### `vh exec run build-cpu-gpu-uberjar` operation above, 
### it is the index to refer to that execution run


您可以看到,要么我们正在等待分配一个实例,要么当执行开始时,控制台消息越过屏幕。你也可以通过网络界面看到同样的情况。

注意:实例的可用性取决于它们的受欢迎程度,以及您在它们上面还剩多少配额。如果它们是最近才使用的,那么它们很可能是下一个可用的。

一旦这个步骤完成,您可以看到它产生了一些工件,在Valohai术语。我们可以通过以下方式看到它们:

$ vh outputs 1

### Run `vh outputs --help` to find out more about this command

我们需要看起来像datum://[....some sha like notation...]我们接下来的步骤。您可以看到,我们有一个日志文件,它捕获了关于运行实例的图形处理器相关信息。您可以通过以下方式下载该文件:

$ vh outputs --download . --filter *.logs 1

### Run `vh outputs --help` to find out more about this command

从命令行运行中央处理器/图形处理器的自然语言处理培训过程

我们将使用构建好的工件,即用于中央处理器和图形处理器后端的超级震击器来运行我们的训练过程:

### Running the CPU uberjar
$ vh exec run train-cpu-linux --cpu-linux-uberjar=datum://016dff00-43b7-b599-0e85-23a16749146e [--adhoc]

### Running the GPU uberjar
$ vh exec run train-gpu-linux --gpu-linux-uberjar=datum://016dff00-2095-4df7-5d9e-02cb7cd009bb [--adhoc]

### Note these datum:// link will vary in your case
### Run `vh exec run train-cpu-linux --help` to get more details on its usage


注意:看看Inputs with Valohai CLI文档来看看如何编写像上面这样的命令。

如果我们愿意,我们可以观察这个过程,但是可能会很长,所以我们可以换到另一个任务。


上面的执行以将模型保存到${VH_OUTPUTS}文件夹,以便存档Valohai。模型名称有后缀,以记录它们是如何产生的。

在构建、培训或评估步骤的任何时候,我们都可以通过执行以下操作来停止正在进行的执行(排队或运行):

$ vh stop 3
(Resolved stop to execution stop.)
⌛   Stopping #3...
=>   {"message":"Stop signal sent"}
��  Success! Done.


成功培训后下载保存的模型

我们可以查询outputs并使用以下命令下载:

$ vh outputs 2
$ vh outputs --download . --filter Cnn*.pb  2

看看你怎么样can evaluate the downloaded model on your local machine,这两个模型都是由 CPU-还有GPU基于流程(各自的超级罐子)。只需将下载模型的名称作为参数传递给runner shell script提供。

评估先前培训执行中保存的自然语言处理模型

### Running the CPU uberjar and evaluating the CPU-verion of the model
$ vh exec run evaluate-model-linux --uber-jar=datum://016dff00-43b7-b599-0e85-23a16749146e --model=datum://016dff2a-a0d4-3e63-d8da-6a61a96a7ba6 [--adhoc]

### Running the GPU uberjar and evaluating the GPU-verion of the model
$ vh exec run evaluate-model-linux --uber-jar=datum://016dff00-2095-4df7-5d9e-02cb7cd009bb --model=datum://016dff2a-a0d4-3e63-d8da-6a61a96a7ba6 [--adhoc]

### Note these datum:// link will vary in your case
### Run `vh exec run train-cpu-linux --help` to get more details on its usage


在模型评估结束时,在模型上运行测试集后,我们得到以下模型评估指标和混淆矩阵:

注:该source code在不同阶段以内嵌注释的形式包含了与语言学习和自然语言处理相关的解释。

获取英伟达图形处理器和数据自动化系统驱动程序的环境信息

这一步与在云上构建和运行一个Java应用程序以及使用客户端工具远程控制和查看它的整个过程无关。但是,能够知道我们在什么样的系统上运行我们的培训是很有用的,尤其是对于培训的图形处理器方面:

$ vh exec run know-your-gpus [--adhoc]

### Run `vh exec run --help` to get more details on its usage


跟踪你的实验

在写这篇文章的时候,我做了几个实验,为了有效地记录成功和失败的实验,我可以使用Valohai的版本控制设施,通过以下方式融入其设计:

  • 执行筛选
  • 通过“令牌”搜索特定的执行
  • 重新运行成功和失败的执行
  • 确认执行是成功的,失败的原因是正确的
  • 另外,结帐data-cataloguesdata provenance在。。。上Valohai下面的平台是我的项目示例(寻找跟踪按钮):


比较基于中央处理器和基于图形处理器的进程

我们可以从以下几个方面讨论基于中央处理器和基于图形处理器的进程之间的比较:

  • 应用构建性能
  • 模型训练速度
  • 模型评估精度

但是我们不会在这篇文章中讨论这些话题,尽管你可以获得你需要的度量标准,以防你想进一步调查。

必要的配置文件和外壳脚本

所有必要的脚本都可以在GitHub repo在:

  • 项目的根文件夹
  • 文件夹
  • 资源-存档文件夹

也请看看README.md关于它们的用法和其他我们在这篇文章中没有提到的附加信息的更多细节,请存档。

瓦罗海——配器

如果我们注意到以上所有任务都是通过几个不同抽象层次的工具来组织任务的:

  • 负责管理基础设施和平台级配置以及版本控制管理
  • Java能够在任何选择的平台上运行我们的应用
  • 同样,外壳脚本能够以平台无关的方式运行构建和执行命令,并且还能够在没有资源的情况下(例如,在MacOSX上的GPU)做出例外
  • 与远程云服务连接的客户端工具,即Valohai CLI,查看、控制执行,并下载最终结果

您正在从一个点开始编排您的任务,利用可用的工具和技术来完成各种数据和机器学习任务。

结论

我们已经看到自然语言处理是一项耗费资源的任务,掌握正确的方法和工具肯定会有所帮助。再一次,那个DeepLearning4J来自的库Skymind以及Valohai站台已经来帮助我们了。感谢两个平台的创造者!下面,我们可以看到这篇文章提供的好处(以及更多)。

亮点

我们从上述实验中获益匪浅,包括:

  • 不必担心硬件和/或软件配置和版本控制管理docker containers超光速!
  • 能够运行手动一次性构建、培训和评估任务—谢谢,Valohai CLI工具!
  • 自动化您团队经常使用的任务,以便能够在远程云基础架构上运行任务,这得益于infrastructure-as-code
  • 克服旧的或慢的机器或不能使用板载图形处理器的mac的限制CUDA-enabled docker image scripts
  • 克服本地或服务器基础架构资源不足的情况,并且仍然能够运行需要高吞吐量和高性能环境的实验—与云提供商无关的平台,即Valohai environments
  • 运行任务,而不必等待任务完成,并且能够以经济高效的方式在远程资源上同时并行运行多个任务,这是一个与云提供商无关的平台,即Valohai CLI工具。
  • 远程查看和控制配置和执行,甚至在成功执行后下载最终结果—与云提供商无关的平台,即Valohai CLI工具。
  • 和许多其他人一样,你会发现自己!

建议

  • 使用所提供的支持CUDA的docker容器:强烈建议不要开始在本地机器(基于Linux或Windows)上安装Nvidia驱动程序或CUDA或cuDNN搁置此事以备后用
  • 使用提供的外壳脚本和配置文件:尽量不要执行手动命令行界面命令,而是使用外壳脚本来自动执行重复的任务,所提供的示例是一个很好的起点,并使之更进一步
  • 尽可能多地学习:从提供的资源中了解图形处理器、统一数据自动化系统、统一数据网络,并寻找更多(参见文章底部的参考资料部分)
  • 使用版本控制和基础设施代码系统valohai.yaml这是一个很好的例子!

我觉得很有效率,在做上述所有事情的时候,我的时间和资源都得到了有效的利用。但最重要的是,我可以与他人分享,每个人都可以重用我的辛勤工作——只是clone the repo你走吧!

我们没有谈到的,也可能是一个很好的话题是Valohai Pipelines!敬请关注未来的帖子!

资源

瓦罗海资源公司

其他资源

这篇博文最初发表于https://blog.valohai.com