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