伯克利神经分析器
benepar的Python项目详细描述
伯克利神经分析器
一个高精度的解析器,有11种语言的模型,用python实现。基于2018年美国公民自由联盟(ACL)中使用自我关注编码器进行的选区分析,以及在自我关注和培训前进行的多语种选区分析。IN/< A/P>
内容
如果您主要对培训自己的解析模型感兴趣,请跳到本自述文件中的培训部分。
安装
要安装解析器,请运行以下命令:
$ pip install cython numpy $ pip install benepar[cpu]
Cython和Numpy应在安装Benepar之前单独安装。注意,pip install benepar[cpu]
依赖于tensorflow
pip包,它是tensorflow的一个只有cpu的版本。使用pip install benepar[gpu]来引入对tensorflow gpu的依赖性。安装启用GPU的TensorFlow版本可能需要其他步骤;有关详细信息,请参见TensorFlow官方安装说明。
BenePar与两个用于Python的NLP库之一集成:NLTK或SPAcy
如果使用nltk,则应安装nltk语句和单词标记器:
>>>importnltk>>>nltk.download('punkt')
如果使用spacy,则应为您的语言安装spacy模型。对于英语,安装命令是:
$ python -m spacy download en
解析模型需要单独下载,使用以下命令:
>>>importbenepar>>>benepar.download('benepar_en2')
请参见下面的"可用型号"部分,以获取完整的型号列表。
用法
与NLTK一起使用
>>>importbenepar>>>parser=benepar.Parser("benepar_en2")>>>tree=parser.parse("Short cuts make long delays.")>>>print(tree)(S(NP(JJShort)(NNScuts))(VP(VBPmake)(NP(JJlong)(NNSdelays)))(..))
速度说明:第一次调用parse
将比随后的调用花费更长的时间,因为缓存正在预热。
解析器还可以解析预先标记的文本。对于某些语言(包括中文),由于缺少内置的标记器,这是必需的。
>>>parser.parse(['Short','cuts','make','long','delays','.'])
使用parse-sents
来分析多个句子。它接受整个文档作为字符串或句子列表。
>>>parser.parse_sents("The time for action is now. It's never too late to do something.")>>>parser.parse_sents(["The time for action is now.","It's never too late to do something."])>>>parser.parse_sents([['The','time','for','action','is','now','.'],['It',"'s",'never','too','late','to','do','something','.']])
返回的所有解析树都使用nltk.tree
对象表示。
Spacy使用
Benepar还附带了一个与Spacy集成的组件:
>>>importspacy>>>frombenepar.spacy_pluginimportBeneparComponent>>>nlp=spacy.load('en')>>>nlp.add_pipe(BeneparComponent("benepar_en2"))>>>doc=nlp(u"The time for action is now. It's never too late to do something.")>>>sent=list(doc.sents)[0]>>>print(sent._.parse_string)(S(NP(NP(DTThe)(NNtime))(PP(INfor)(NP(NNaction))))(VP(VBZis)(ADVP(RBnow)))(..))>>>sent._.labels('S',)>>>list(sent._.children)[0]Thetimeforaction
由于spacy不提供正式的选区解析api,因此可以通过扩展名称空间 以下扩展属性可用: 当对不是解析树的组成部分的跨度调用时,这些方法将引发异常。这种错误可以通过遍历从语句级别开始的解析树(通过遍历 提供以下经过培训的解析器模型: 用于训练解析模型的代码目前与上述发行版中用于解析句子的代码不同,尽管它们都存储在这个存储库中。培训代码使用pytorch,可以通过从github克隆此存储库获得。发行版改用tensorflow,因为它允许将解析模型序列化为磁盘上的单个文件,从而最小化软件依赖性并减小磁盘上的文件大小。span.\u
和令牌访问所有方法。
目录中运行span."标签"
:给定范围的一组标签。当分析树中有一元链时,跨度可能有多个标签。span.\uParse\u字符串
:给定范围的分析树的字符串表示形式。span."components"
:在解析树的预先顺序遍历中,对子components的span
对象进行迭代器。span.。parent
:解析树中的parentspan
。span."children"
:解析树中childspan
s上的迭代器。令牌。
令牌。
令牌。
doc.sents
)或使用单独的token
对象来避免。可用型号
< /广告><正文>型号
语言
信息 benepar_en2
英语 华尔街日报测试集95.17 F1,磁盘94 MB。 benepar_en2_large
英语 华尔街日报测试集95.52 F1,磁盘274 MB。当在CPU上运行时,此模型比 benepar en2
慢3倍;我们建议在GPU上运行它。benepar_zh
中文 91.69 F1,在CTB 5.1测试装置上。与nltk一起使用需要标记化的句子(不支持未标记的原始文本)。请使用一个包,例如jieba进行标记化。使用spacy首先需要在spacy中实现中文支持。在撰写本文时,Spacy没有中国官方的支持,但是非官方的软件包,比如这个软件包可能可以工作。 benepar_ar
阿拉伯语 使用nltk需要标记化的句子(不支持未标记的原始文本)。使用spacy首先需要在spacy中实现阿拉伯语支持。接受Unicode作为输入,但受过音译文本方面的培训(请参见src/transliterate.py);如果有任何错误,请告诉我们。 效益
德语 完全支持nltk和spacy;使用 python-m spacy download de
下载德语spacy模型。benepar_eu
巴斯克语 使用nltk需要标记化的句子(不支持未标记的原始文本)。首先使用spacy需要在spacy中实现巴斯克支持。 benepar_fr
法语 完全支持nltk和spacy;使用 python-m spacy download fr
下载法语的spacy模型。好处
希伯来语 使用nltk需要标记化的句子(不支持未标记的原始文本)。使用spacy首先需要在spacy中实现希伯来语支持。接受Unicode作为输入,但受过音译文本方面的培训(请参见src/transliterate.py);如果有任何错误,请告诉我们。 benepar_hu
匈牙利语 使用nltk需要标记化的句子(不支持未标记的原始文本)。首先使用spacy需要在spacy中实现匈牙利语支持。 benepar_ko
韩语 使用nltk需要标记化的句子(不支持未标记的原始文本)。首先使用spacy需要在spacy中实现韩语支持。 benepar_pl
波兰语 完全支持nltk(包括对原始文本的解析)。首先使用spacy需要在spacy中实现波兰语支持。 benepar_sv
瑞典语 完全支持nltk(包括对原始文本的解析)。使用spacy首先需要在spacy中实现瑞典语支持。 好处
英语 无词性标记功能:建议改用 benepar_en2
。使用此模型时,部分语音标记将继承自nltk(需要nltk.download('average_perceptron_tagger')
)或spacy;但是,我们发现在benepar_ EN2
给出了更好的结果。该模型是随我们的acl 2018论文发布的,为了兼容而保留。华尔街日报测试集95.07 F1。小收益
英语 无词性标记功能:建议改用 benepar_en2
。该模型是随我们的acl 2018论文发布的,为了兼容而保留。在CPU上运行时比benepar_en
快3-4倍的更小型号,因为它使用的是更小版本的elmo。华尔街日报测试集94.65 F1。benepar_en_集成
英语 无词性标记功能:建议改用 benepar_en2_large
。该模型是随我们的acl 2018论文发布的,为了兼容而保留。两个解析器的集合:一个使用原始elmo嵌入,另一个使用5.5b elmo嵌入。强烈建议使用GPU来运行集成。华尔街日报测试集95.43 F1。培训
培训的软件要求
make
。
预先培训的模型(pytorch)
以下预训练的解析器模型可供下载:
en廑charlstm廑dev.93.61.pt
:我们最好的英语单系统解析器,不依赖外部单词表示en廑elmo廑u dev.95.21.pt
:我们的ACL 2018论文中的最佳英语单系统解析器。使用此解析器需要elmo权重,必须单独下载。
要使用elmo嵌入,请将以下文件下载到data/
文件夹(保留其名称):
当前没有用于配置elmo文件的位置/名称的命令行选项。
预训练的伯特权重将根据需要由pytorch pre trained bert
包自动下载。
培训说明
可以使用命令python src/main.py train…
训练新模型。一些可用参数是:
--模型路径库
--evalb dir
evalb/
--列车路径
数据/02-21.10路。清洁
--开发路径
数据/22.自动清洗
--批量大小
每次培训更新的示例数
--按历元检查
每个历元的开发评估次数
--子批次最大标记
--评估批量大小
--numpy seed
--使用单词
--使用标记
--使用字符lstm
--使用elmo
使用预先训练过的elmo单词表示法 不要使用elmo
--使用伯特
--bert模型
如果--use bert
通过,则使用预先训练的bert模型
bert base未加保护
--没有bert do小写
--预测标记
其他超参数可以使用其他参数;请参见src/main.py
中的make_hparams()
。这些可以在命令行中指定,例如--num layers 2
(对于数值参数)、--use tags
(对于默认为false的布尔参数)或--no partitioned
(对于默认为true的布尔参数)。
如果通过了--use tags
,则假定训练树和开发树预测了部分语音标记。如果传递了predict tags,则假定数据具有ground truth标记。因此,这两个选项不能同时使用。请注意,我们在data/
文件夹中提供的文件具有预测标记,必须单独获取带有金标记的数据。
对于每个开发评估,计算开发集上的F分数,并与以前的最佳值进行比较。如果当前模型更好,将删除以前的模型并保存当前模型。新文件名将从提供的模型路径库和开发F-score中派生出来。
例如,要使用默认超参数训练英语解析器,可以使用以下命令:
python src/main.py train --use-words --use-chars-lstm --model-path-base models/en_charlstm --d-char-emb 64
要训练使用elmo嵌入的英语解析器,命令是:
$ pip install cython numpy $ pip install benepar[cpu]0
要训练使用bert的英语解析器,命令是:
$ pip install cython numpy $ pip install benepar[cpu]1
评估说明
使用命令python src/main.py test…可以在测试语料库上对保存的模型进行求值,参数如下:
<表><广告>--模型路径库
--evalb dir
evalb/
--测试路径
数据/23.自动清洗
--原始测试路径
--测试路径中的树进行比较
--评估批量大小
如果解析器被训练为将预测的部分语音标记作为输入(通过--use tags
标志),则假设测试树具有预测的部分语音标记。否则,测试树中的标记不会用作解析器的输入。
例如,提取预训练模型后,可以使用以下命令在测试集中对其进行评估:
$ pip install cython numpy $ pip install benepar[cpu]2
使用charlstm嵌入的预训练模型在开发集上获得了93.61的f分数,在测试集上获得了93.55的f分数。带有elmo嵌入的预训练模型在开发集上的f得分为95.21,在测试集上的f得分为95.13。
使用经过培训的车型
请参阅src/main.py
中的run-parse
函数,以获取如何从磁盘加载解析器并使用pytorch代码库解析句子的示例。
export/export.py
文件包含用于将基于elmo的解析器转换为tensorflow图(用于解析器的发行版)的代码。对于我们基于bert的解析器,请参考export/export_bert.py。此导出代码硬编码某些超参数选择,因此您可能需要对其进行调整以导出自己的模型。将模型导出到tensorflow可以将其存储在单个文件中,包括所有elmo/bert权重。我们还使用TensorFlow的图形转换来缩小磁盘上的模型大小,但对解析精度的影响很小:压缩的Elmo模型在测试集上的F1分数为95.07,而未压缩的模型的F1分数为95.13。
再现实验
我们的acl 2018论文使用的代码在git中标记为acl2018
。该版本的代码中的experiments.md
文件包含有关我们用于执行acl 2018论文中报告的实验的命令行参数的附加说明。
此存储库中当前的代码版本增加了新功能(如bert支持和部分语音标记预测),消除了一些性能较差的解析器变体(如charconcat单词表示),并已更新为pytorch的新版本。experiments.md
文件现在描述了用于为我们评估的每种语言训练性能最佳的单系统解析器的命令。
引文
如果您使用本软件进行研究,请引用我们的论文如下:
$ pip install cython numpy $ pip install benepar[cpu]3
学分
此存储库中的代码和本自述文件的某些部分基于https://github.com/mitchellstern/minimal-span-parser" rel="nofollow">https://github.com/mitchellstern/minimal-span-parser