我正在编写一种用于自动成分包围的学习算法。由于算法从头开始,因此包围(嵌入)首先应是随机的。然后通过迭代对其进行改进。我被困在如何做随机包围中。您能否建议使用R或Python编写代码或提出一些编程想法(伪代码)?我还需要有关如何检查随机括号与正确括号的正确性的想法。
这就是我试图通过整个学习过程最终从随机包围中获得的结果。
这是一个句子。
“他”“追逐”了“狗”。
用语法元素代替每个元素,
N,V,D,N
包围(第一阶段)(D,N为组成部分):
(N)(V)(D N)
包围曝光(第二阶段):
(N)((V)(DN))
包围(第三阶段):
((N)((V)(DN)))
请帮忙。谢谢。
最佳答案
我所提供的信息只能说:
一种简单的包围方式是generate some trees(生成所有内容会很快占用大量空间),具有与单词(或成分)一样多的叶子,然后选择一个合适的叶子(随机或根据适当的分区)并将其用作包围模式。为了获得更高的效率,请寻找一种真正的随机树生成算法(目前无法找到一种算法)。
另外,我建议阅读有关genetic algos /进化编程,尤其是fitness fucnctions(这是“检查随机结果的正确性”部分)的内容。据我了解,您希望该程序检测到解析的方式,然后将其作为“学习的”方式保存在内存中。这与遗传算法完全吻合,具有记忆“最适合”模式(并且仅突变作为改变因素)的能力。
一个很棒的,非常复杂的(如果可行的话)但可能非常困难的方法是使用genetic programming。但这可能与您想要的太不同了。
最后,最简单的检查包围式imo正确性的方法是保留一个带有语法/语法规则的表,并与它们进行比较。您还可以通过将它们保持在树中并测量从实际模式((V D) N
)到正确模式(V (D N)
)的距离,来改善此功能以使其具有更好的适应性。 (这只是一个随机的想法,我从未真正做到这一点。)
关于parsing - 如何对元素进行随机嵌入包围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10909271/