javascript - PCFG(NLP)中的内外算法

标签 javascript algorithm math nlp

我的教授要求我研究并实现 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/

相关文章:

javascript - 求和对的唯一排列 : Javascript Algorithm

c# - 使用具有可分配 Func 委托(delegate)的对象的基于树的数学表达式

javascript - 如何使用 javascript 创建循环 html 更改背景图像

javascript - 检测样式表是否无法加载(不适用于 Firefox)

algorithm - 在 Haskell 中具有良好性能的简单循环

c - 如何在 OS X 上强制执行 64 位整数运算?

algorithm - 三角测量 : Find a 3D point minimizing the Distance from N 3D Lines/Rays

javascript - 递归 Promise 调用 - 内存范围变量问题

JavaScript: var1 == true && (var2 = true)

java - StackOverflowError 计算 BigInteger 的阶乘?