神经网络依赖分析器中的 TreebankLanguagePack 函数
TreebankLanguagePack function in Neural Network Dependency Parser
如果我想为另一种语言训练斯坦福神经网络依赖分析器,则需要 "treebankLanguagePack"(TLP),但关于此 TLP 的信息非常有限:
particularities of your treebank and the language it contains
如果我的 "treebank" 采用与 PTB 格式相同的另一种语言,并且我的数据使用 CONLL 格式。依赖格式遵循 "Universal Dependency" UD。我需要这个 TLP 吗?
从当前的 CoreNLP 版本开始,TreebankLanguagePack 在依赖解析器中仅用于 1) 确定输入文本编码和 2) 确定哪些标记算作标点符号 [1]。
那么,快速解决方案的最佳选择可能是坚持使用 UD 英语 TreebankLanguagePack。您应该通过将 属性 language
指定为 "UniversalEnglish"
来执行此操作(无论您是通过代码还是命令行访问依赖项解析器)。如果你通过 CoreNLP 主入口点使用依赖解析器,这个 属性 键应该是 depparse.language
.
技术细节
接下来是两个非常微妙的细节。如果你一开始只是想把一些东西拼凑在一起,你可能不需要担心这些,但最好提一下,这样你就可以避免将来出现世界末日/令人头疼的错误。
- 评估和标点符号: 如果您确实选择坚持使用 UniversalEnglish,请注意 the evaluation code 中有一个 hack 覆盖了用于英语解析的标点符号集特别的。您对
PennTreebankLanguagePack
(用于 UniversalEnglish 语言的 TLP)中的标点符号所做的任何更改都将被忽略!如果您需要解决这个问题,将 PennTreebankLanguagePack
复制并粘贴到您自己的代码库中并为其命名就足够了。
- 潜在的内存泄漏: 当构建解析结果返回给用户时,依赖解析器draws from a pool of cached
GrammaticalRelation
objects。此缓存不会实时更新。这意味着,如果您的关系未以您通过 language
属性 指定的语言正式定义,只要这些关系出现在解析器预测中,它们就会导致新对象的实例化。 (如果您碰巧将解析对象存储在某处,这在内存方面可能是个大问题。)
[1]:计算时排除标点符号。这是整个依赖项解析文献中使用的标准 "cheat"。
如果我想为另一种语言训练斯坦福神经网络依赖分析器,则需要 "treebankLanguagePack"(TLP),但关于此 TLP 的信息非常有限:
particularities of your treebank and the language it contains
如果我的 "treebank" 采用与 PTB 格式相同的另一种语言,并且我的数据使用 CONLL 格式。依赖格式遵循 "Universal Dependency" UD。我需要这个 TLP 吗?
从当前的 CoreNLP 版本开始,TreebankLanguagePack 在依赖解析器中仅用于 1) 确定输入文本编码和 2) 确定哪些标记算作标点符号 [1]。
那么,快速解决方案的最佳选择可能是坚持使用 UD 英语 TreebankLanguagePack。您应该通过将 属性 language
指定为 "UniversalEnglish"
来执行此操作(无论您是通过代码还是命令行访问依赖项解析器)。如果你通过 CoreNLP 主入口点使用依赖解析器,这个 属性 键应该是 depparse.language
.
技术细节
接下来是两个非常微妙的细节。如果你一开始只是想把一些东西拼凑在一起,你可能不需要担心这些,但最好提一下,这样你就可以避免将来出现世界末日/令人头疼的错误。
- 评估和标点符号: 如果您确实选择坚持使用 UniversalEnglish,请注意 the evaluation code 中有一个 hack 覆盖了用于英语解析的标点符号集特别的。您对
PennTreebankLanguagePack
(用于 UniversalEnglish 语言的 TLP)中的标点符号所做的任何更改都将被忽略!如果您需要解决这个问题,将PennTreebankLanguagePack
复制并粘贴到您自己的代码库中并为其命名就足够了。 - 潜在的内存泄漏: 当构建解析结果返回给用户时,依赖解析器draws from a pool of cached
GrammaticalRelation
objects。此缓存不会实时更新。这意味着,如果您的关系未以您通过language
属性 指定的语言正式定义,只要这些关系出现在解析器预测中,它们就会导致新对象的实例化。 (如果您碰巧将解析对象存储在某处,这在内存方面可能是个大问题。)
[1]:计算时排除标点符号。这是整个依赖项解析文献中使用的标准 "cheat"。