作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 TNT 搜索文本分类模块, https://github.com/teamtnt/tntsearch ,效果很好,问题是我不知道如何解释结果——更具体地说是正确匹配的可能性。我读过它使用 Naive Bayes classifier但我无法找到结果是哪种概率分布。我有自己的大约 50 个值(50/10 = 5 个类别)的小型测试数据集,猜测相当正确。
但是,此工具提供的似然数是一个负数,范围大约在 -15 到 -25 之间。
问题是,什么值可以被解释为不可信?假设该工具只有 <33% 的把握。这个假设对应什么值?
最佳答案
我已与 TNTSearch 开发人员取得联系。分类器实际上并不返回概率,而是返回“最高分”。并且只为最佳匹配。
根据提示,我对代码做了一些修改。
在 TeamTNT\TNTSearch\Classifier\TNTClassifier
类中,我更改了 predict
方法中的位(softmax 函数灵感来自 here ):
public function predict($statement)
{
$words = $this->tokenizer->tokenize($statement);
$best_likelihoods = [];
$best_likelihood = -INF;
$best_type = '';
foreach ($this->types as $type) {
$best_likelihoods[$type] = -INF;
$likelihood = log($this->pTotal($type)); // calculate P(Type)
$p = 0;
foreach ($words as $word) {
$word = $this->stemmer->stem($word);
$p += log($this->p($word, $type));
}
$likelihood += $p; // calculate P(word, Type)
if ($likelihood > $best_likelihood) {
$best_likelihood = $likelihood;
$best_likelihoods[$type] = $likelihood;
$best_type = $type;
}
}
return [
'likelihood' => $best_likelihood,
'likelihoods' => $best_likelihoods,
'probability' => $this->softmax($best_likelihoods),
'label' => $best_type
];
}
然后可以在 $guess['probability']['$label']
中找到百分比概率。
关于PHP TNTClassifier 似然概率分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54853969/
我正在使用 TNT 搜索文本分类模块, https://github.com/teamtnt/tntsearch ,效果很好,问题是我不知道如何解释结果——更具体地说是正确匹配的可能性。我读过它使用
我是一名优秀的程序员,十分优秀!