我的教授要求我研究并实现 PCFG(概率上下文无关语法)中的无监督内外学习算法。
说到无监督,我的教授告诉我唯一的输入是一些训练句子和非终端的数量。我的程序应该从他们那里学到的是每个规则的概率(规则是从非终端生成的,实际上所有可能的匹配格式为 A->BC )。
现在假设我们有一个非常简单的情况,我们有一个句子“我爱你”,非终结符的数量是 2。
我假设这两个非终结符是 A 和 B。生成这些规则:
A->AA; A->AB; A->BA; A->BB; A->I; A->love; A->you;
B->AA; B->AB; B->BA; B->BB; B->I; B->love; B->you;
所有具有不同左值的规则的总概率为 1,在此示例中,P(A->AA) + P(A->AB) + P(A->BA) + P(A->BB) + P(A->I) + P(A->爱) + p(A->你) = 1。
我的第一个问题是: 不同的右值之和是否也应该为 1?例如,下面的陈述应该正确吗?
P(A->AB) + P(B->AB) = 1
P(A->love) + P(B->love) = 1
好吧,我不需要精确的数学推导,但如果你能给我一个解释来理解我的意思,那就太好了。
我的第二个问题是:我想用JavaScript来实现这个算法,但是我的同行都在尝试用Java或者Python。我认为 js 比 python 快,并且可以轻松嵌入到 Web 应用程序中。
但是我对这种复杂的算法没有经验,所以我不确定在这里使用 JavaScript 可以吗?有什么优点或缺点吗?
谢谢大家的宝贵时间!
最佳答案
对于第一个问题:
我已经和我的教授确认过,具有单个左值的概率之和应该是 1。像这样: P(A->AA) + P(A->AB) + P(A->BA) + P(A->BB) + P(A->I) + P(A->love) + p(A->you) = 1.
但是具有单个正确值的概率之和可能不是一个,P(A->AB) + P(B->AB) != 1
。
对于第二个问题:
我实际上已经使用 node.js 完成了我的 nlp 夏季项目,我认为它实际上比 python 快得多。
关于javascript - PCFG(NLP)中的内外算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31352623/