“返回值”到底是什么语言.py卑鄙?

2024-05-29 02:50:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在正确的语言ID旁边langid.py返回一个特定的值-“返回的值是语言的分数。它不是一个概率esimate,因为它不是文档概率标准化的,因为这对于分类是不必要的。” 但是这个值意味着什么??在


Tags: 文档py语言id分类概率分数langid
3条回答

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

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

看起来像一个值,它告诉您引擎有多确定它猜测了文档的正确语言。我认为一般来说,这个数字越接近0,就越有把握,但是你应该能够通过混合语言来测试这一点,然后把它们传入,看看你得到了什么值。它允许您在使用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.sum()让我很困惑,因为它通常规范化类似概率的值(而不是日志概率值);另外,文档中的示例(('en', -55.106250761034801))看起来并不像它们已经被规范化了——也许它们是在添加规范化行之前生成的?在

总之,简单的回答是这个值,pd[cl]是一个置信度。根据当前的代码,我的理解是它们的值应该在0到1/97之间(因为有97种语言),较小的值表示更高的置信度。在

相关问题 更多 >

    热门问题