词法结构转移的最佳解析器算法?
Best parser algorithm for lexical structure transfer?
作为一个更大项目的一部分,我想实现一个从语言 A 到语言 B 的机器翻译器。由于没有可用的工具自动对这组语言进行机器翻译,并且语言 B 的可用语料库非常小,我正在尝试执行以下操作:
1. 给定一个语言 A 的句子,使用工具获取其语言集 A PoS(词性)标签。
2. 我用于 PoS 标记的工具 (Freeling) 没有 return 解析树,所以我考虑从标签集。
3.解析树完成后,逐层遍历(从根开始),根据语言语法规则对其元素重新排序 B.
在做了一些研究后,我发现了 Earley 解析(它解析任何语言的能力引起了我的注意,因为语言 B 的语法可能会随着时间的推移而改变,所以我不能保证它将始终满足任何特定标准)。
但是,考虑到我的最终目标是进行结构转换,我不确定使用自下而上的解析器并在我将元素与规则匹配时尝试重新排序是否会给我带来更好的性能,或者我是否我走错了路,我的解决方案完全错了。
根据您处理的源语言,FreeLing 确实提供了解析树(例如西班牙语、英语、加泰罗尼亚语、葡萄牙语...)
如果 FreeLing 不支持使用您的语言进行解析,您可以通过编写语法来添加它。 FreeLing 包含一个 CKY 解析器,它将应用您的语法并为您提供解析树。
这样,您就可以实现步骤 2 "building my own parse tree from the set of tags"。
关于转移,我不确定最好的策略是即时重新排序。拥有整棵树并在之后执行传输可能更好。
如果你的目标是基于规则的翻译,你可以看看开源翻译平台https://www.apertium.org/
如果您正在寻找用于划分分析树的 "best" 算法,那么您应该查看 Parsey McParseface。 Google 最近发布的开源解决方案。两者都可以说是最先进的,并且在 README
.
中有非常好的文献综述
使用基于规则的解析器或基于通用词典的方法的问题在于,您将看到的准确性确实非常低。通常,在这里尝试使用无监督技术是一种捷径,它会导致您的算法在大多数情况下失败,甚至语法略微不规则。特别是如果你的目标语言的语法可能会随着时间的推移而改变,它可能有一些普遍的歧义,你将无法使用基于规则的系统来解决这个问题。
就重构解析树的通用自下而上方法而言,很难说这是否是正确的解决方案。这当然是构建解析树的一种非常典型的方法,但传输质量在很大程度上取决于您工作的领域、数据集的大小以及两种语言的语法结构。归根结底,机器学习的一大缺点是没有人可以确定地告诉您一种新方法是否有效。
您必须试一试,根据 appropriate metric 评估性能,然后进行更改以查看是否可以提高性能。可悲的是,如果你拥有的语料库非常小,你不太可能以自动化方式获得任何类型的高质量翻译,只是信号不够,但如果你使用 UN transcripts 作为训练集,你可以与文献相比,至少验证您的基本方法。
作为一个更大项目的一部分,我想实现一个从语言 A 到语言 B 的机器翻译器。由于没有可用的工具自动对这组语言进行机器翻译,并且语言 B 的可用语料库非常小,我正在尝试执行以下操作:
1. 给定一个语言 A 的句子,使用工具获取其语言集 A PoS(词性)标签。
2. 我用于 PoS 标记的工具 (Freeling) 没有 return 解析树,所以我考虑从标签集。
3.解析树完成后,逐层遍历(从根开始),根据语言语法规则对其元素重新排序 B.
在做了一些研究后,我发现了 Earley 解析(它解析任何语言的能力引起了我的注意,因为语言 B 的语法可能会随着时间的推移而改变,所以我不能保证它将始终满足任何特定标准)。 但是,考虑到我的最终目标是进行结构转换,我不确定使用自下而上的解析器并在我将元素与规则匹配时尝试重新排序是否会给我带来更好的性能,或者我是否我走错了路,我的解决方案完全错了。
根据您处理的源语言,FreeLing 确实提供了解析树(例如西班牙语、英语、加泰罗尼亚语、葡萄牙语...)
如果 FreeLing 不支持使用您的语言进行解析,您可以通过编写语法来添加它。 FreeLing 包含一个 CKY 解析器,它将应用您的语法并为您提供解析树。
这样,您就可以实现步骤 2 "building my own parse tree from the set of tags"。
关于转移,我不确定最好的策略是即时重新排序。拥有整棵树并在之后执行传输可能更好。
如果你的目标是基于规则的翻译,你可以看看开源翻译平台https://www.apertium.org/
如果您正在寻找用于划分分析树的 "best" 算法,那么您应该查看 Parsey McParseface。 Google 最近发布的开源解决方案。两者都可以说是最先进的,并且在 README
.
使用基于规则的解析器或基于通用词典的方法的问题在于,您将看到的准确性确实非常低。通常,在这里尝试使用无监督技术是一种捷径,它会导致您的算法在大多数情况下失败,甚至语法略微不规则。特别是如果你的目标语言的语法可能会随着时间的推移而改变,它可能有一些普遍的歧义,你将无法使用基于规则的系统来解决这个问题。
就重构解析树的通用自下而上方法而言,很难说这是否是正确的解决方案。这当然是构建解析树的一种非常典型的方法,但传输质量在很大程度上取决于您工作的领域、数据集的大小以及两种语言的语法结构。归根结底,机器学习的一大缺点是没有人可以确定地告诉您一种新方法是否有效。
您必须试一试,根据 appropriate metric 评估性能,然后进行更改以查看是否可以提高性能。可悲的是,如果你拥有的语料库非常小,你不太可能以自动化方式获得任何类型的高质量翻译,只是信号不够,但如果你使用 UN transcripts 作为训练集,你可以与文献相比,至少验证您的基本方法。