Я связался с разработчиками TNTSearch.Классификатор на самом деле не возвращает вероятность, а "наивысший балл".И только для лучшего соответствия.
Как советовали, я внес некоторые изменения в код.
В классе TeamTNT\TNTSearch\Classifier\TNTClassifier
Я изменил биты в методе predict
(функция softmax на основе здесь ):
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']
.