捐赠饮料以帮助我保持Seq2Seqsharp的最新状态:)
[注意:RNNSHARP处于维护状态,不再具有新功能。有关新的神经网络框架,请尝试SEQ2SEQSHARP(https://github.com/zhongkaifu/seq2seqsharp)]
RNNSHARP是深层复发神经网络的工具包,该工具包被广泛用于许多不同类型的任务,例如序列标记,序列到序列等。它由C#语言编写,并基于.NET Framework 4.6或更高版本。
此页面介绍了什么是rnnsharp,它的工作方式以及如何使用它。要获取演示包,您可以访问发布页面。
RNNSHARP支持许多不同类型的深层神经网络(又名Deeprnn)结构。
对于网络结构,它支持正向RNN和双向RNN。但是,RNN在当前令牌之前考虑了Hisorcial信息,但是,双向RNN将来考虑了Hisorcial信息和信息。
对于隐藏层结构,它支持LSTM和辍学。与BPTT相比,LSTM非常擅长保留长期记忆,因为它有一些大门可以解决Contorl信息流。辍学用于在训练过程中添加噪音,以避免过度拟合。
就输出层结构而言,支持简单的,软磁性,采样软磁性和复发性CRF [1]。 SoftMax是一种典型类型,在多种任务中广泛使用。采样的软max特别用于具有较大输出词汇的任务,例如序列生成任务(序列到序列模型)。简单类型通常与复发性CRF一起使用。对于复发性CRF,基于简单的输出和标签过渡,它为整个序列计算CRF输出。对于离线序列标记任务,例如单词分割,命名实体识别等,循环CRF的性能比SoftMax,采样SoftMax和线性CRF更好。
这是深双向RNN-CRF网络的一个示例。它包含3个隐藏层,1个本机RNN输出层和1个CRF输出层。 
这是一个双向隐藏层的内部结构。 
这是用于序列到序列任务的神经网络。 “ Tokenn”来自源序列,“ Elayerx-Y”是自动编码器的隐藏层。自动编码器在功能配置文件中定义。 <s>始终是目标句子的开始,“ dlayerx-y”是指解码器的隐藏层。在解码器中,它一次生成一个令牌,直到生成</s>。 
RNNSHARP支持许多不同的功能类型,因此以下段落将介绍这些Feaures的工作方式。
模板功能由模板生成。通过给定的模板和语料库,可以自动生成这些功能。在RNNSHARP中,模板功能是稀疏功能,因此,如果该功能存在于当前令牌中,则功能值将为1(或功能频率),否则,它将为0。它与CRFSHARP功能相似。在rnnsharp中,tfeaturebin.exe是生成此类功能的控制台工具。
在模板文件中,每行描述一个由前缀,ID和规则弦组成的模板。前缀指示模板类型。到目前为止,RNNSHARP支持U型功能,因此前缀始终为“ U”。 ID用于区分不同的模板。规则弦是特征主体。
#UMIGRAM
U01:%x [-1,0]
U02:%x [0,0]
U03:%x [1,0]
U04:%x [-1,0]/%x [0,0]
U05:%x [0,0]/%x [1,0]
U06:%x [-1,0]/%x [1,0]
U07:%x [-1,1]
U08:%x [0,1]
U09:%x [1,1]
U10:%x [-1,1]/%x [0,1]
U11:%x [0,1]/%x [1,1]
U12:%x [-1,1]/%x [1,1]
U13:C%X [-1,0]/%X [-1,1]
U14:C%X [0,0]/%X [0,1]
U15:C%X [1,0]/%X [1,1]
规则弦有两种类型,一种是常数字符串,另一个是可变的。最简单的变量格式是{“%x [row,col]”}。行指定当前焦点令牌和生成功能令牌的偏移。 COL指定语料库中的绝对列位置。此外,还支持可变组合,例如:{“%x [Row1,col1]/%x [Row2,col2]”}。当我们构建功能集时,变量将扩展到特定的字符串。这是指定实体任务的培训数据中的一个示例。
| 单词 | pos | 标签 |
|---|---|---|
| 呢 | 双关语 | s |
| 东京 | NNP | s_location |
| 和 | CC | s |
| 新的 | NNP | b_location |
| 约克 | NNP | e_location |
| 是 | VBP | s |
| 主要的 | JJ | s |
| 金融的 | JJ | s |
| 中心 | nns | s |
| 。 | 双关语 | s |
| ---空线--- | ||
| 呢 | 双关语 | s |
| p | FW | s |
| ' | 双关语 | s |
| y | nn | s |
| h | FW | s |
| 44 | 光盘 | s |
| 大学 | NNP | b_ormanization |
| 的 | 在 | m_ormanization |
| 德克萨斯州 | NNP | m_ormanization |
| 奥斯丁 | NNP | e_ormanization |
根据上述模板,假设当前的焦点令牌是“ York NNP E_Location”,则生成以下功能:
U01:新
U02:约克
U03:是
U04:新/约克
U05:约克/是
U06:新/是
U07:NNP
U08:NNP
U09:是
U10:NNP/NNP
U11:NNP/VBP
U12:NNP/VBP
U13:CNEW/NNP
U14:cyorc/nnp
U15:护理/VBP
尽管U07和U08,U11和U12的规则弦是相同的,但我们仍然可以通过ID字符串区分它们。
上下文模板功能基于模板功能,并与上下文结合使用。在此示例中,如果上下文设置为“ -1,0,1”,则该功能将将当前令牌的功能与其前令牌和下一个令牌相结合。例如,如果该句子是“你怎么样”。生成的功能集将为{feature(“如何”),功能(“ are”),feature(“ you”)}。
RNNSHARP支持两种验证的特征。一个是嵌入功能,另一个是自动编码器功能。他们俩都能够通过fixd-Length向量提供给定的令牌。此功能是rnnsharp中的密集功能。
对于嵌入功能,通过Text2Vec项目对它们进行了培训。 Rnnsharp将它们用作每个给定令牌的静态功能。但是,对于自动编码器功能,它们也经过RNNSHARP培训,然后可以用作其他培训的密集功能。请注意,代币在预审计的功能中的粒度应与主训练中的训练语料库一致,否则,某些令牌会与据预读的功能匹配。
喜欢模板功能,嵌入功能还支持上下文功能。它可以将给定上下文的所有功能组合到单个嵌入功能中。对于自动编码器功能,它尚不支持。
与离线生成的其他功能相比,此功能是在运行时间中生成的。它使用以前的令牌作为当前令牌的运行时间功能。此功能仅适用于正向RNN,双向RNN不支持它。
此功能仅用于序列到序列任务。在序列到序列的任务中,RNNSHARP编码给定源序列为固定长度向量,然后将其作为密集的特征传递以生成目标序列。
配置文件描述了模型结构和功能。在控制台工具中,将-cfgfile用作参数来指定此文件。这是序列标签任务的示例:
#working目录。它是以下相对路径的父目录。
current_directory =。
#network类型。支持四种类型:
#对于序列标记任务,我们可以使用:向前,双向,双向ALAVERAGE
#对于序列到序列任务,我们可以使用:forwardSeq2Seq
#Bidirectional类型将向前层和向后层的输出作为最终输出
#bidirectionalaverate类型的平均向前层和向后层的输出作为最终输出
network_type =双向
#Model文件路径
model_filepath = data model parseorg_chs model.bin
#Hidden层设置。支持LSTM和辍学。这是这些层类型的示例。
#Dropout:辍学:0.5-脱离比为0.5,层大小与上一层相同。
#如果模型具有多个隐藏层,则每个图层设置都通过逗号分隔。例如:
#“ LSTM:300,LSTM:200”表示该模型具有两个LSTM层。第一层大小为300,第二层大小为200。
hidden_layer = lstm:200
#Output层设置。支持简单的软磁性和采样软磁性。这是采样SoftMax的示例:
#“ SampledSoftMax:20”表示输出层是采样软磁层,其负样本量为20。
#“简单”是指输出是从输出层产生的。 “ SoftMax”是指结果基于“简单”结果并运行SoftMax。
output_layer =简单
#CRF层设置
#如果此选项为真,则输出层类型必须为“简单”类型。
crf_layer = true
#模板功能集的文件名
tfeature_filename = data models parseorg_chs tfeatures
#模板功能集的上下文范围。在下面,上下文是当前的令牌,下一个令牌和接下来的下一个令牌
tfeature_context = 0,1,2
#功能重量类型。支持二进制和FREQ
tfeature_weight_type =二进制
#Pretrented功能类型:“嵌入”和“自动编码器”。
#对于“嵌入”,预验证的模型由Text2Vec培训,该模型看起来像词嵌入模型。
#对于“自动编码器”,预处理的模型由RNNSHARP本身训练。对于序列到序列任务,需要“自动编码器”,因为首先需要在该模型上对源序列进行编码,然后将目标序列由解码器生成。
PROTRAIN_TYPE =嵌入
#以下设置用于“嵌入”类型中的预审计模型。
#由TXT2VEC(https://github.com/zhongkaifu/txt2vec)生成的嵌入模型。如果是原始文本格式,我们应该使用Wordembedding_raw_filename而不是Wordembedding_filename作为关键字
wordembedding_filename = data wordembedding wordvec_chs.bin
#单词嵌入的上下文范围。在下面的示例中,上下文是当前的令牌,前令牌和下一个令牌
#如果将多个令牌组合在一起,则此功能将使用大量内存。
Wordembedding_context = -1,0,1
#列索引应用单词嵌入功能
Wordembedding_column = 0
#以下设置用于“自动编码器”类型中的预读模型。
#用于验证模型的功能配置文件。
autoencoder_config = d: rnnsharpdemopackage config_autoencoder.txt
#以下设置是源序列编码器的配置文件,该文件仅适用于模型_type等于seq2seq的序列到序列任务。
#在此示例中,由于model_type是seqlabel,因此我们将其评论。
#seq2seq_autoencoder_config = d: rnnsharpdemopackage config_seq2seq_autoencoder.txt
#运行时间功能的上下文范围。在下面的示例中,rnnsharp将使用以前的令牌作为当前令牌的运行时间功能
#注意,双向模型不支持运行时间功能,因此我们将其评论。
#rtfeature_context = -1
在培训文件中,每个序列被表示为功能矩阵,并以空线结束。在矩阵中,每一行都适用于序列的一个令牌及其特征,每列均适用于一种特征类型。在整个培训语料库中,必须固定列数。
序列标记任务和序列到序列任务具有不同的培训语料库格式。
对于序列标记任务,第一个N-1列是用于训练的输入功能,第n列(又称最后一列)是当前令牌的答案。这是命名实体识别任务的示例(完整的培训文件在发行部分,您可以在此处下载):
| 单词 | pos | 标签 |
|---|---|---|
| 呢 | 双关语 | s |
| 东京 | NNP | s_location |
| 和 | CC | s |
| 新的 | NNP | b_location |
| 约克 | NNP | e_location |
| 是 | VBP | s |
| 主要的 | JJ | s |
| 金融的 | JJ | s |
| 中心 | nns | s |
| 。 | 双关语 | s |
| ---空线--- | ||
| 呢 | 双关语 | s |
| p | FW | s |
| ' | 双关语 | s |
| y | nn | s |
| h | FW | s |
| 44 | 光盘 | s |
| 大学 | NNP | b_ormanization |
| 的 | 在 | m_ormanization |
| 德克萨斯州 | NNP | m_ormanization |
| 奥斯丁 | NNP | e_ormanization |
它的两个记录被Blandet Line拆分。对于每个令牌,它都有三列。前两列是输入功能集,它们是令牌的单词和pos-tag。第三列是模型的理想输出,该输出称为令牌的实体类型。
命名的实体类型看起来像“ tocus_nameDentityType”。 “位置”是命名实体中的单词位置,而“命名entityType”是实体的类型。如果“命名entityType”是空的,则意味着这是一个常见的词,而不是命名实体。在此示例中,“位置”具有四个值:
S:命名实体的单词
B:指定实体的第一个单词
M:这个词在指定实体的中间
E:指定实体的最后一句话
“ newentityType”有两个值:
组织:一个组织的名称
位置:一个位置的名称
对于序列到序列任务,训练语料库格式不同。对于每个序列对,它具有两个部分,一个是源序列,另一个是目标序列。这是一个示例:
| 单词 |
|---|
| 什么 |
| 是 |
| 你的 |
| 姓名 |
| ? |
| ---空线--- |
| 我 |
| 是 |
| 智凯 |
| fu |
在上面的示例中,“你叫什么名字?”是源句子,“我是Zhongkai fu”是由rnnsharp seq-to-seq模型生成的目标句子。在源句子中,除了单词功能之外,还可以将其他feautes应用于培训,例如上面的序列标记任务中的Postag功能。
测试文件具有与培训文件相似的格式。对于序列标记任务,它们之间唯一的不同是最后一列。在测试文件中,所有列都是用于模型解码的功能。对于序列到序列任务,它仅包含源序列。目标句子将通过模型生成。
对于序列标记任务,此文件包含输出标签集。对于序列到序列任务,它的输出词汇文件。
rnnsharpconsole.exe是用于复发神经网络编码和解码的控制台工具。该工具具有两个运行模式。 “火车”模式用于模型训练,“测试”模式用于通过给定编码模型从测试语料库预测的输出标签。
在此模式下,控制台工具可以通过给定的功能集和训练/经过验证的语料库编码RNN模型。用法如下:
rnnsharpconsole.exe -mode火车
基于培训RNN的模型的参数。 -Trainfile:培训语料库文件
-Validfile:经过验证的培训语料库
-cfgfile:配置文件
-tagfile:输出标签或词汇文件
- 成分:增量培训。从在配置文件中指定的输出模型开始。默认值为false
-Alpha:学习率,默认值为0.1
- 示例:训练的最大迭代。 0是不明智的,默认值为20
-savestep:在每个句子之后保存临时模型,默认为0
-VQ:模型向量量化,0是禁用的,1是启用。默认值为0
-minibatch:更新每个序列的权重。默认值为1
示例:rnnsharpconsole.exe -mode train -trainfile train.txt -validfile录音.txt -cfgfile config.txt -tagfile tags.txts.txt -alpha 0.1 -maxiter 20 -savestep 200K -vq 200
在此模式下,给定的测试语料文件,RNNSHARP预测序列标记任务的输出标签或在序列到序列任务中生成目标序列。
rnnsharpconsole.exe -mode Test
从给定语料库预测ITAGID标签的参数
-testfile:测试语料库文件
-tagfile:输出标签或词汇文件
-cfgfile:配置文件
-outfile:结果输出文件
示例:rnnsharpconsole.exe -mode test -testfile test.txt -tagfile tags.txt -cfgfile config.txt -outfile result.txt
它用于生成由给定模板和语料库文件设置的模板功能。对于高性能访问并节省内存成本,索引功能集由Advutils在Trie-Tree中构建为Float Array。该工具支持以下三种模式:
tfeaturebin.exe
该工具是从语料库生成模板功能,并将它们索引到文件中
-mode:支持提取,索引和构建模式
提取:从语料库中提取功能,并将其保存为原始文本功能列表
索引:从原始文本功能列表中构建索引功能集
构建:从语料库中提取功能并生成索引功能集
此模式是根据模板从给定语料库中提取功能,然后构建索引功能集。此模式的使用如下:
tfeaturebin.exe -mode构建
此模式是从语料库中提取功能并生成索引功能集
-template:功能模板文件
-InputFile:用于生成功能的文件
-ftrfile:生成的索引功能文件
-minfreq:特征的最小频率
示例:tfeaturebin.exe -mode build -template template.txt -inputfile train.txt -ftrfile tfeature -minfreq 3
在上面的示例中,从train.txt中提取功能集,并将其构建到tfeature文件中,作为索引功能集。
此模式仅是从给定语料库中提取功能并将其保存到原始文本文件中。构建模式和提取模式之间的不同之处在于,提取模式将功能设置为原始文本格式,而不是索引二进制格式。提取模式的使用如下:
tfeaturebin.exe -mode提取物
此模式是从语料库中提取功能并将其保存为文本功能列表
-template:功能模板文件
-InputFile:用于生成功能的文件
-ftrfile:以原始文本格式生成的功能列表文件
-minfreq:特征的最小频率
示例:tfeaturebin.exe -mode提取物-template template.txt -inputfile train.txt -ftrfile功能.txt -minfreq 3
在上面的示例中,根据模板,从train.txt中提取功能集并将其保存到功能.txt中为原始文本格式。输出原始文本文件的格式是“语料库中的特征字符串 t频率”。这是几个例子:
U01:仲恺 t 123
U01:仲文 t 10
U01:仲秋 t 12
U01:仲恺是特征字符串,123是该功能在语料库中的频率。
此模式仅是由给定模板设置的索引功能,并以原始文本格式设置。此模式的使用如下:
tfeaturebin.exe -mode索引
此模式是从原始文本功能列表中构建索引功能集
-template:功能模板文件
-InputFile:原始文本格式的功能列表
-ftrfile:索引功能集
示例:tfeaturebin.exe -mode索引-template template.txt -inputfile features.txt -ftrfile fromate.bin
在上面的示例中,根据模板,将原始文本功能集(trapter.txt)索引为farmation.bin file二进制格式的bin文件。
这是中文命名实体识别任务的质量结果。发行部分的rnnsharp演示包文件中可用语料库,配置和参数文件。结果基于双向模型。第一个隐藏层大小为200,第二个隐藏层大小为100。这是测试结果:
| 范围 | 令牌错误 | 句子错误 |
|---|---|---|
| 1个隐藏层 | 5.53% | 15.46% |
| 1隐藏层 | 5.51% | 13.60% |
| 两层 | 5.47% | 14.23% |
| 2个隐藏层-crf | 5.40% | 12.93% |
RNNSHARP是一个纯C#项目,因此可以通过.NET Core和Mono进行编译,并且可以在Linux/Mac上进行修改。
RNNSHARP还为开发人员提供了一些API,以将其利用其项目。通过下载源代码包并打开RNNSHARPCONSOLE项目,您将看到如何在项目中使用API来编码和解码RNN模型。请注意,在使用RNNSHARP API之前,您应将rnnsharp.dll作为参考添加到项目中。