"返回的值究竟是什么"在langid.py是什么意思?

时间:2012-05-08 13:59:13

标签: python

除了正确的语言ID langid.py旁边的

返回一定的值 - “返回的值是语言的分数。它不是概率估计,因为它没有被文档概率标准化,因为这不是必需的分类。” 但这个值意味着什么呢?

3 个答案:

答案 0 :(得分:4)

我认为这是langid.py代码的重要组成部分:

def nb_classify(fv):
  # compute the log-factorial of each element of the vector
  logfv = logfac(fv).astype(float)
  # compute the probability of the document given each class
  pdc = np.dot(fv,nb_ptc) - logfv.sum()
  # compute the probability of the document in each class
  pd = pdc + nb_pc
  # select the most likely class
  cl = np.argmax(pd)
  # turn the pd into a probability distribution
  pd /= pd.sum()
  return cl, pd[cl]

在我看来,作者正在为每种可能的语言计算类似multinomial数据后跟的内容。 logfv计算PMF分母的对数(x_1!...x_k!)。 np.dot(fv,nb_ptc)计算 p_1^x_1...p_k^x_k项的对数。因此,pdc看起来像语言条件对数似然列表(除了它缺少n!项)。 nb_pc看起来像先前的概率,因此pd将是对数后验。归一化线pd /= pd.sum()使我感到困惑,因为通常会将类似概率的值(不是对数概率值)标准化;此外,文档中的示例(('en', -55.106250761034801))看起来并不像它们已经标准化 - 可能它们是在添加标准化行之前生成的?

无论如何,简短的回答是这个值,pd[cl]是一个置信度分数。我基于当前代码的理解是它们应该是介于0和1/97之间的值(因为有97种语言),较小的值表示更高的置信度。

答案 1 :(得分:4)

我实际上是langid.py的作者。不幸的是,我刚刚问到这个问题差不多一年了。自从提出这个问题以来,我已经整理了规范化的处理,所以所有的README示例都已经更新,以显示实际的概率。

您在那里看到的值(并且您仍然可以通过关闭标准化来获得)是文档的非标准化日志概率。因为log / exp是单调的,所以我们实际上不需要计算决定最可能类的概率。该log-prob的实际值实际上对用户没有任何用处。我可能从未包含它,我将来可能会删除它的输出。

答案 2 :(得分:0)

看起来像一个值,告诉您引擎是多么确定它猜测文档的正确语言。我认为一般来说,数字越接近0,它就越有把握,但是你应该能够通过将语言混合在一起并将它们传入以查看你得到的值来测试它。它允许您在使用langid时微调您的程序,具体取决于您认为“足够接近”的数量作为匹配。