word-discovery icon indicating copy to clipboard operation
word-discovery copied to clipboard

total的计算方式,是否有问题

Open vacant2011 opened this issue 3 years ago • 2 comments

up主的博客中提到,可以用n为某个值的ngram总频数来计算total

事实上,根据(对于某个固定的n)ngram的计算方式: [text[i:i + n] for i in range(len(text) - n + 1)] ,就知道每种ngram的总数约等于字数是显然成立的。

而源码中,是对所有ngram的频数的总和来计算total的,是否与博客中的算法不一致,导致pmi计算不正确? for s, n in Progress(ngrams(), 100000, desc=u'loading ngrams'): if n >= self.min_count: self.total += n

vacant2011 avatar Dec 16 '21 13:12 vacant2011

另外,请问这部分 total * v / (ngrams[j].get(w[:j+1], total) * ngrams[i-j-1].get(w[j+1:], total)) 我理解分母的两个乘数,应该是大于等于v的,所以default值理论上应该设为v,为什么这里设为了total呢?

vacant2011 avatar Dec 16 '21 14:12 vacant2011

还有一个问题,加载ngram这里: for j in range(len(c)): self.ngrams[j][c[:j+1]] = self.ngrams[j].get(c[:j+1], 0) + n 是否有重复计算的问题?c的组成部分,应该已经被计算过了吧?为什么还要把它部分的n累加一次?我理解这里应该直接是: self.ngrams[len(c)][c] = n

vacant2011 avatar Dec 16 '21 14:12 vacant2011