我正在编写一个自动成分括号化的学习算法。由于算法是从零开始的,括号化(嵌入式)最初应该是随机的。然后通过迭代进行改进。我在如何进行随机括号化上遇到了困难。您能否建议一个R或Python的代码,或者提供一些编程思路(伪代码)?我还需要关于如何检查随机括号化与正确括号化的正确性的想法。
这是我通过学习过程,最终希望达到的目标,从随机括号化开始。
这是一个句子。’他’ ‘追’ ‘那’ ‘狗。’
将每个元素替换为语法元素,N,V,D,N。
括号化(第一阶段)(D,N是成分):(N) (V) (D N)
括号化(第二阶段):(N) ((V) (D N))
括号化(第三阶段):((N) ((V) (D N)))
请帮助我。谢谢你。
回答:
根据提供的信息,我能说的就是这些:
一种简单的括号化方法是生成一些树(生成所有树很快就会变得非常占用空间),树的叶子数量与单词(或组件)数量相同,然后随机选择一个合适的树(或根据适当的分区选择),并将其应用为括号化模式。为了提高效率,可以寻找真正的随机树生成算法(目前我没有找到)。
此外,我建议阅读关于遗传算法/进化编程的资料,特别是适应度函数(这是“检查随机结果的正确性”部分)。据我理解,您希望程序能够检测解析方式,然后将它们作为“学习”内容保存在内存中。这与带有“最适合”模式记忆(且仅以变异作为变化因素)的遗传算法非常匹配。
一个非常详细(如果有效的话),但可能极其困难的方法是使用遗传编程。但这可能与您想要的相差太大。
最后,我认为检查括号化正确性的最简单方法是保持一个包含语法/句法规则的表格,并与之进行比较。您还可以通过将它们保存在树中,并测量实际模式((V D) N
)与正确模式(V (D N)
)之间的距离,来改进这点以获得更好的适应度函数。(这只是一个随机的想法,我从未实际这样做过..)