nlp的实用机器学习

thinc的Python项目详细描述


thinc:python中nlp的实用机器学习

thinc是机器学习库为spacy供电。 它具有一个经过测试的线性模型,设计用于大型稀疏学习 问题和正在开发的柔性神经网络模型 spacy v2.0

thinc是一个实用的工具包,用于实现遵循 "嵌入、编码、参与、预测" 建筑。它的设计是易于安装,高效的CPU使用和 为NLP和文本深度学习优化-特别是分层的 结构化输入和可变长度序列。

在此处阅读发行说明。

azure pipe管线当前版本pypi versionconda versionpython wheels 在Twitter上关注我们,在Twitter上关注我们,在Twitter上关注我们,在这里,在这里,在这里,在www://warehousecomo.cmh1.psfhosted.org/e8b411f0ab018b67CD318CE6034EE98B7297A87/68747474747470733A322222222F696D676E73686869656C66765656C66767363636363636363636747474747774652F66666F6C6C676565656565656C6676e565656566e5e56565656566e5e5e5e56767676672727272736673f736767676767676f736c676c676cc266c6162656c3d466f6c6f77" />

在哪里(从V7.0.0起)

<表><广告>模块 说明 < /广告><正文>thinc.v2v.型号基类。thinc.v2v将向量转换为向量的层。thinc.i2v将id嵌入到向量的层。thinc.t2v将张量汇集到向量的层。thinc.t2t将张量转换为张量的层(例如CNN、LSTM)。thinc.api高阶函数,用于构建网络。将重新命名为这是额外的数据集和实用程序。thinc.neural.ops数学运算的容器类。将重新组织。thinc.linear.avgtron传统高效平均感知器的实现。

开发状态

thinc的深度学习功能仍在积极开发中:api是 不稳定,我们还没有准备好提供使用支持。但是,如果你 已经很熟悉神经网络了,你可能会发现 很有趣。thinc的概念模型与tensorflow的完全不同。 thinc还实现了一些新颖的特性,例如一个小型dsl 连接模型、嵌入支持预计算的表以及 哈希技巧,动态批处理大小,基于连接的方法 可变长度序列,支持 ADAM解算器(性能非常好)。

没有计算图–只有高阶函数

神经网络实现的核心问题是: 向前传球,你计算的结果将在后面的比赛中有用 通过。如何跟踪这种任意状态,同时确保 层可以干净地组合吗?

大多数库通过声明forward来解决这个问题 计算,然后在幕后的某个地方编译成图形。 Thinc没有"计算图"。相反,我们只使用堆栈, 因为我们把前传球的状态转换成回调。

网络中的所有节点都有一个简单的签名:

f(inputs) -> {outputs, f(d_outputs)->d_inputs}

为了使这一点不那么抽象,这里有一个relu激活,在这个签名之后:

defrelu(inputs):mask=inputs>0defbackprop_relu(d_outputs,optimizer):returnd_outputs*maskreturninputs*mask,backprop_relu

当您调用relu函数时,会返回一个输出变量,并且 回调。这允许您使用输出计算渐变,然后传递它 进入回调以执行向后传递。

这个特征使得用更小的片段构建复杂的网络变得容易, 使用任意的高阶函数,您可以自己编写。这样做 更清楚的是,我们需要一个权重层的函数。通常情况下 作为一个类实现-但是让我们继续使用闭包来保存 简洁,界面简洁明了。

权重层的主要问题是我们现在有一个副作用 管理:我们想更新重量。有几种方法可以处理 这个。在thinc中,我们现在将一个callable传递给backward pass。(我不是) 确信这是最好的。)

importnumpydefcreate_linear_layer(n_out,n_in):W=numpy.zeros((n_out,n_in))b=numpy.zeros((n_out,1))defforward(X):Y=W@X+bdefbackward(dY,optimizer):dX=W.T@dYdW=numpy.einsum('ik,jk->ij',dY,X)db=dY.sum(axis=0)optimizer(W,dW)optimizer(b,db)returndXreturnY,backwardreturnforward

如果我们调用wb=create_linear_layer(5,4),变量wb将是 forward()函数,在创建线性层()的主体中实现。 w b实例将访问在其 外部范围。如果我们再次调用create_linear_layer(),我们将得到一个新实例, 具有自己的内部状态。

wb实例和relu函数具有完全相同的签名。这个 使编写高阶函数来组合它们变得容易。最明显的 要做的就是把它们连在一起:

defchain(*layers):defforward(X):backprops=[]Y=Xforlayerinlayers:Y,backprop=layer(Y)backprops.append(backprop)defbackward(dY,optimizer):forbackpropinreversed(backprops):dY=backprop(dY,optimizer)returndYreturnY,backwardreturnforward

我们现在可以将线性层与relu激活链接到 创建一个简单的前馈网络:

Wb1=create_linear_layer(10,5)Wb2=create_linear_layer(3,10)model=chain(Wb1,relu,Wb2)X=numpy.random.uniform(size=(5,4))y,bp_y=model(X)dY=y-truthdX=bp_y(dY,optimizer)

这个概念模型使thinc非常灵活。取而代之的是 不太方便和高效的工作负载正好适合 Tensorflow等是为设计的。如果你的图表 实际上是静态的,你的输入在大小和形状上都是同质的, keras可能更快、更简单。但如果你想的话 通过网络传递普通的python对象,或者处理序列和 复发无论长度或复杂程度如何,你可能会发现Thinc的设计 更适合您的问题。

快速启动

thinc的安装应该是干净的,同时使用pippip 以及conda的 蟒蛇2.7+和3.5+,在LinuxMacOS/OSXWindows上。它的 只有系统依赖性是编译器工具链(例如build essential)和 python开发标题(例如python dev)。

pip install thinc

对于GPU支持,我们非常感谢使用Chainer的Cupy模块的工作, 它为gpu阵列提供了一个与numpy兼容的接口。但是,安装 当当前没有可用的GPU时,chainer会导致错误。因此,我们不 列表链接器作为显式依赖项-因此为gpu构建thinc需要 一些额外步骤:

exportCUDA_HOME=/usr/local/cuda-8.0 # Or wherever your CUDA isexportPATH=$PATH:$CUDA_HOME/bin
pip install chainer
python -c "import cupy; assert cupy"# Check it installed
pip install thinc_gpu_ops thinc # Or `thinc[cuda]`
python -c "import thinc_gpu_ops"# Check the GPU ops were built

本节的其余部分描述如何从源代码构建thinc。如果你有 结构已安装,您可以使用快捷方式:

git clone https://github.com/explosion/thinc
cd thinc
fab clean env make test

然后,您可以运行以下示例:

fab eg.mnist
fab eg.basic_tagger
fab eg.cnn_tagger

否则,您可以使用:

f(inputs) -> {outputs, f(d_outputs)->d_inputs}
0

然后运行以下示例:

f(inputs) -> {outputs, f(d_outputs)->d_inputs}
1

用法

神经网络api仍然会发生变化,即使是小版本。 您可以通过查看示例来了解当前的api。这里是 一些快速的亮点。

<H3>1。形状推断

可以创建未指定某些维度的模型。缺少的维度是 推断何时加载预先训练的重量或何时开始训练。这个 消除程序员错误的常见来源:

f(inputs) -> {outputs, f(d_outputs)->d_inputs}
2 <H3>2。运算符重载

model.define_operators()类方法允许您绑定任意 python运算符的二进制函数,用于任何模型实例。这个 方法可以(并且应该)用作上下文管理器,以便 仅限于直接块。这使得模型简洁而富有表现力 定义:

f(inputs) -> {outputs, f(d_outputs)->d_inputs}
3

重载在块的末尾被清除。相当专横的动物园 的函数当前已实现。一些最有用的:

  • 链(模型1,模型2):将两个模型f(x)g(x)组合成一个模型计算g(f(x))
  • 克隆(model1,int):创建具有不同权重的模型副本,并将它们链接在一起。
  • 连接(model1,model2):给定两个输出维度为(n,)(m,)的模型,构造一个输出维度为(m+n,)的模型
  • 添加(型号1,型号2)添加(f(x),g(x))=f(x)+g(x)
  • 生成元组(model1,model2):在批处理级别构造两个模型输出的元组。反向过程期望接收一组渐变,这些渐变通过适当的模型路由并求和。

把这些东西放在一起,这里有一种标签模型,thinc是 设计简单。

f(inputs) -> {outputs, f(d_outputs)->d_inputs}
4

并不是所有这些部分都已经实现,但希望这显示了 我们要走了。memoize函数将特别重要:在任何 一批文字中,常见的词会很常见。所以这很重要 要对模型求值,例如每个小批量每个字类型一次的charlstm, 而不是每个令牌一次。

<H3>3。基于回调的反向传播

大多数神经网络库使用计算图抽象。这需要 执行远离你,以便梯度可以自动计算。 thinc遵循的样式更像是autograd库,但是 操作。用法如下:

f(inputs) -> {outputs, f(d_outputs)->d_inputs}
5

将反向传播分为三部分这有很多优点。 所有模型的接口都是完全一致的-没有区别 在用作预测者的顶级模型和 层。我们还通过使begin\u update() 一个纯函数,将梯度的累积和 优化器的操作。

<H3>4。类注释

为了保持类层次结构的浅层次性,thinc使用类装饰器来重用代码。 用于图层定义。具体来说,可以使用以下装饰工具:

  • describe.attributes():允许通过关键字参数指定属性。特别用于尺寸和参数。
  • describe.on_init():允许指定回调,回调将在.py的末尾调用。
  • descripe.on_data():允许指定回调,该回调将在模型上调用。begin_training()

变更日志

<表><广告>版本 日期 说明 < /广告><正文>v7.0.82019-07-11pypi的修复版本v7.0.72019-07-11避免为ngram分配负数形状v7.0.62019-07-11修正线性模型回归v7.0.5版2019-07-10pickle、线程、unflatten和一致性的错误修复v7.0.4版2019-03-19不需要thinc\u gpu操作v7.0.32019-03-15在光束搜索中修复修剪v7.0.2版2019-02-23固定线性模型类中的回归v7.0.1版2019-02-16修复导入错误v7.0.0版2019-02-15大修包依赖项v6.12.1版2018-11-30修复msgpackpinv6.12.0版2018-10-15车轮和单独的GPU操作v6.10.3版2018-07-21python 3.7支持和依赖项更新v6.11.2版2018-05-21改进GPU安装v6.11.1版2018-05-20支持直接链接到BLAS库V6.11.02018-03-16不适用v6.10.2版2017-12-06效率IM验证和错误修复v6.10.1版2017-11-15修复GPU安装和小内存泄漏问题v6.10.0版2017-10-28CPU效率提高,重构v6.9.0版2017-10-03重新组织层,错误修复到层规范化v6.8.2版2017-09-26修复gpu操作的打包v6.8.1版2017-08-23修复Windows支持v6.8.0版2017-07-25selu层,注意,改进了gpu/cpu兼容性v6.7.3版2017-06-05固定gpu上的卷积v6.7.2版2017-06-02序列化的错误修复v6.7.1版2017-06-02改进序列化v6.7.0版2017-06-01对序列化、哈希嵌入和扁平化操作的修复v6.6.0版2017-05-14改进的GPU使用和示例V6.5.22017-03-20不适用v6.5.1版2017-03-20改进的线性类和Windows修复程序v6.5.0版2017-03-11有监督相似性、奇异嵌入和对线性模型的改进V6.4.02017-02-15不适用v6.3.0版2017-01-25提高效率、参数检查和错误消息传递v6.2.0版2017-01-15改进API并引入重载运算符v6.1.3版2017-01-10更多的神经网络功能和训练延续V6.1.22017-01-09不适用V6.1.12017-01-09不适用V6.1.02017-01-09不适用v6.0.0版2016-12-31添加thinc.neural用于面向nlp的深度学习

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java用arraylist中的单词替换txt文件中的单词?   java为ProgressBar提供了一个解决方案。是否接受整数?   java添加鼠标侦听器以删除目标   java删除标点符号的简单程序   java JavaScriptException:(TypeError):无法调用null的方法“getBoundingClientRect”   java我可以在没有对话框的情况下卸载应用程序吗?   执行泛型Java类   如果主线程从不调用线程,那么线程中断的原因是什么。中断()?   导致其他组件不显示的java绘制方法   java ObjectMapper追加文件JSON   Netbeans Java:将我的CSV文件放在哪里?   bouncycastle RSAKeyParameters中的java公钥   java为什么我总是在这个字符串数组中输入a1字符串?   java使用匿名绑定连接到AD并搜索用户DN   从JSP文件向Java应用程序发送socket?