我是R的初学者。这是我正在尝试编码的公式,以找到最大化某些双字母的对数可能性的lambda。当找不到双字节时,P_b(bigram)函数失败,但P_u(unigram)函数应该提供unigram结果(lambda = 0)。
适用于找到的双胞胎。当他们找不到时,我只得到数字(0),而不是单字结果。
p.mix <- function(w2, w1) {
(1-lambda) * uni.dfrm$prob[uni.dfrm$token==w2] + lambda * p.bi(w2,w1)
}
由于索引,p.bi()函数看起来很复杂,所以我不愿意发布它,但是当找到bigrams时它确实有效。它只是查看w后出现的次数w并将其除以w出现的次数,但是我必须通过另一个词汇量的向量来使它看起来很难看。
当在w之后从未发现w'时,而不是零计数,根本没有行,这显然导致数字(0)结果。这就是混合模型应该解决的问题,但我无法让它发挥作用。任何想法如何运作?
答案 0 :(得分:1)
您可以为w2
为numeric(0)
的案例添加测试,例如:
p.mix <- function(w2, w1) {
if(length(w2)>0){
res <- (1-lambda) * uni.dfrm$prob[uni.dfrm$token==w2] +
lambda * p.bi(w2,w1)
}else res <- 0
res
}
修改强>
p.mix <- function(w2, w1) {
if(length(w2) && length(uni.dfrm$prob[uni.dfrm$token==w2]) > 0)
(1-lambda) * uni.dfrm$prob[uni.dfrm$token==w2] + lambda * p.bi(w2,w1)
else 0
}