PyText基于PyTorch进行语言识别


PyText基于PyTorch进行语言识别

文章插图
尽管深度神经网络风靡一时,但主要框架的复杂性已经成为新机器学习用户的障碍 。提出了几种改进和简化高级应用编程接口来构造神经网络模型的建议 , 这些建议从远处看都很相似 , 但仔细研究就会发现有所不同 。
Keras是领先的高级神经网络API之一 。它用Python编写,支持多个后端神经网络计算引擎 。
鉴于TensorFlow项目已经采用Keras作为TensorFlow2.0的高级API,Keras似乎是赢家,如果不一定是赢家的话 。在本文中,我们将讨论Keras的原理和实现,重点理解为什么它是低级深度学习API的改进 。
即使在TensorFlow中,官方的TensorFlow入门教程也使用了TensorFlow中嵌入的高级KerasAPITF. Keras 。相比之下,tensorFlowCoreAPI需要使用TensorFlow来计算图形、TensorFlow、操作和会话,其中一些在您刚开始使用TensorFlow时很难理解 。使用低级别的TensorFlowCoreAPI有一些优势 , 主要是在调试期间,但幸运的是 , 您可以根据需要混合使用高级和低级别的TensorFlowAPI 。
喀拉斯原理
Keras被创建为用户友好、模块化、易于扩展,并与Python一起使用 。该API是“为人类设计的,而不是为机器设计的”,“遵循减少认知负荷的最佳实践” 。
【PyText基于PyTorch进行语言识别】神经层、代价函数、优化器、初始化方案、激活函数和正则化方案都是独立的模块 , 可以组合在一起创建新的模型 。新模块可以作为新的类和函数轻松添加 。模型是用Python代码定义的,而不是单独的模型配置文件 。
为什么是Keras?
使用Keras最大的原因是它的指导原则,主要是关于用户友好的原则 。Keras除了易于学习和简化模型构建之外,还具有被广泛采用、支持广泛的生产部署选项、集成至少5个后端引擎(TensorFlow、CNTK、antao、MXNet和PlaidML)以及强大支持多个GPU和分布式训练等优势 。此外,Keras还获得了谷歌、微软、亚马逊、苹果、英伟达、优步等公司的支持 。
Keras本身不执行自己的低级运算,如张量积和卷积;这取决于后端引擎 。虽然Keras支持多个后端引擎,但它的主要(也是默认)后端是TensorFlow,它的主要支持者是Google 。KerasAPI封装在TensorFlow中,如前所述,它将成为TensorFlow2.0的主要TensorFlowAPI 。
要更改后端 , 只需编辑$HOME/ 。keras/文件 , 并指定另一个后端名称,如anano或CNTK 。或者,您可以通过在shell或Python代码中使用OS. environ[' KERAS_后端']属性定义环境变量来覆盖配置的后端 。
Keras模型
该模型是Keras的核心数据结构 。Keras中有两种主要类型的模型:顺序模型,以及模型与功能API一起使用的类 。
Keras序列模型
顺序模型是层的线性堆叠,可以非常简单地描述层 。以下是Keras文档中的一个示例,它用于()来定义顺序模型中的两个密集层:
脸书已经开放了PyText项目 , 这是一个用于自然语言处理(NLP)的机器学习库,旨在使实验项目与生产系统更容易结合 。
PyText是用脸书现有的机器学习PyTorch库构建的,公司内部使用,旨在解决如何使用神经网络(如NLP)进行机器学习 。他们在一篇文章中说,这些库通常是“为实验优化的框架和为生产优化的框架之间的权衡” 。
脸书的工程师写道,为实验构建的框架允许快速原型制作 , 但会遭受“生产延迟和内存使用增加”的困扰 。另一方面,为生产而构建的框架在负载下工作得更好,但更难快速开发 。
PyText的主要区别在于它的工作流程 , 脸书声称它可以针对实验或生产用途进行优化 。框架的组件可以拼接在一起以创建一个完整的NLP管道,或者部分可以分解并在其他上下文中重用 。
新的训练模型可以分布在多个节点上,可以同时训练多个模型 。PyText也可以使用很多现有的模型进行文本分类,在这些情况下不需要训练 。
PyText还通过上下文模型提高理解能力,这是一种丰富模型对先前输入文本理解的方法 。例如,聊天机器人可以在讨论中重用早期消息中的信息来塑造他们的答案 。
PY中的一个函数展示了如何找到一个Python驱动的机器学习系统 。
避免语言可能出现的性能问题的方法 。PyText模型可以以优化的ONNX格式导出,以便使用Caffe2进行快速推理 。这样,推理过程不受Python运行时的限制,但Python仍然用于组装管道和编排模型训练 。
PyTorch本身最近获得了正式的1.0版本,其自身的功能部分旨在加速训练和推理 , 而不受Python的限制 。其中之一,Torch Script,及时编译Python代码以加速其执行,但它只能用于语言的一个子集 。
PyText的近期计划包括“支持多语言建模和其他建模功能,使模型更易于调试,并为分布式培训添加进一步优化”,Facebook的工程师说 。
上面代码中的注释值得一读 。还有一点值得注意的是,与低级TensorFlow API相比 , 实际代码中有多少 。每个层定义需要一行代码 , 编译(学习过程定义)需要一行代码,拟合(训练),评估(计算损失和度量),以及预测训练模型的输出每行需要一行代码 。
Keras功能API
Keras Sequential模型很简单,但在模型拓扑中受到限制 。所述Keras功能API是用于与共享层创建复杂的模型,如多输入/多输出模式,有向非循环图(DAG) , 和模型是有用的 。
功能API使用与Sequential模型相同的层,但在将它们组合在一起时提供了更大的灵活性 。在功能API中 , 首先定义图层,然后创建模型,编译它 , 然后拟合(训练)它 。评估和预测与Sequential模型基本相同,因此在下面的示例代码中已省略 。
在前面的例子中 , 我们只使用了Dense图层 。Keras有多种预定义的图层类型 , 还支持编写自己的图层 。
核心层包括Dense(点积加偏差),Activation(传递函数或神经元形状),Dropout(在每次训练更新时随机将输入单位的一部分设置为0以避免过度拟合),Lambda(将任意表达式包装为Layer对象),以及其他几个 。卷积层(使用滤波器创建要素图)从1D到3D运行,包括最常见的变体 , 例如每个维度的裁剪和转置卷积层 。2D卷积受到视觉皮层功能的启发,通常用于图像识别 。
池(缩减)层从1D到3D运行并包括最常见的变体 , 例如最大和平均池 。局部连接的层就像卷积层一样 , 除了权重是非共享的 。循环层包括简单(完全连接的重复) , 门控 , LSTM等; 这些对于语言处理以及其他应用程序非常有用 。噪声层有助于避免过度拟合 。
Keras通过ets课程提供了七个常见的深度学习样本数据集 。这包括cifar10和cifar100小彩色图像,IMDB电影评论,路透社新闻专题,MNIST手写数字 , MNIST时尚图片和波士顿房价 。
Keras还提供十种着名的模型,称为Keras应用程序,预先针对ImageNet:Xception,VGG16 , VGG19,ResNet50,InceptionV3,InceptionResNetV2,MobileNet,DenseNet,NASNet , MobileNetV2TK 。您可以使用它们来预测图像的分类,从中提取特征,以及在不同的类集上微调模型 。
顺便说一句,微调现有模型是加速培训的好方法 。例如,您可以根据需要添加图层,冻结基础图层以训练新图层,然后解冻一些基础图层以微调培训 。您可以通过设置冻结图层able = False 。
该Keras实例库包含超过40个样本模型 。它们涵盖了视觉模型,文本和序列以及生成模型 。