我是文本分类的新手,我试图创建一些概念的证明,以更好地理解使用PHP的ML概念。所以我得到了这个例子,我尝试添加一个新的小文本来“增强”我的标签(类别)之一,在本例中是Japan
<?php
include_once './vendor/autoload.php';
//source: https://www.softnix.co.th/2018/08/19/naive-bays-text-classification-with-php/
use Phpml\Classification\NaiveBayes;
use Phpml\FeatureExtraction\TokenCountVectorizer;
use Phpml\Tokenization\WhitespaceTokenizer;
use Phpml\Tokenization\WordTokenizer;
use Phpml\FeatureExtraction\TfIdfTransformer;
$arr_text = [
"London bridge is falling down",
"japan samurai Universal Studio spider man",
"china beijing",
"thai Chiangmai",
"Universal Studio Hollywood",
"2020 Olympic games"
];
$arr_label = [
"London","Japan","China","Thailand","USA","Japan"
];
$tokenize = new WordTokenizer();
$vectorizer = new TokenCountVectorizer($tokenize);
$vectorizer->fit($arr_text);
$vocabulary = $vectorizer->getVocabulary();
$arr_transform = $arr_text;
$vectorizer->transform($arr_transform);
$transformer = new TfIdfTransformer($arr_transform);
$transformer->transform($arr_transform);
$classifier = new NaiveBayes();
$classifier->train($arr_transform, $arr_label);
$arr_testset = [
'Hello Chiangmai I am Siam',
'I want to go Universal Studio',
'I want to go Universal Studio because I want to watch spider man',
'Sonic in 2020'
];
$vectorizer->transform($arr_testset);
$transformer->transform($arr_testset);
$result = $classifier->predict($arr_testset);
var_dump($result);问题是,在将日本再次添加到一系列标签之后,结果是:
array (size=4)
0 => string 'Japan' (length=5)
1 => string 'Japan' (length=5)
2 => string 'Japan' (length=5)
3 => string 'Japan' (length=5)但我期待着:
array (size=4)
0 => string 'Thailand' (length=8)
1 => string 'USA' (length=3)
2 => string 'Japan' (length=5)
3 => string 'Japan' (length=5)那么,如何将新的样本添加到同一个标签中呢?
发布于 2019-09-20 21:59:48
培训数据集有两个问题:
Japan标签时,您提供了两次以上的数据。因此,Japan标签的模型被训练成两个句子,它们的单词是完全无关的并且不重复。其他的标签只对一个简短的句子进行了培训。
这导致未装备的 Japan标签模型从培训数据中“学习不够”,无法正确地建模培训数据,也无法推广到新的数据。换句话说,它太笼统了,几乎对任何句子都会触发。Rest标签的模型是超装 --它们将训练数据建模得太好,只触发那些非常接近训练集数据的句子。
因此,Japan标签几乎可以捕捉到任何句子。在标签列表的开头,它会捕捉到所有句子,然后在列表后面的任何标签对一个句子进行评估。当然,您可以在列表的末尾移动Japan标签,但更好的解决方案是--扩大所有标签的培训数据集。
您还可以评估过度贴合的标签模型效果--例如,尝试将“伦敦桥向下”和“伦敦向下”语句添加到测试集中--第一句给你London,第二句给你Japan,因为第一句足够接近London标签的句子训练集,而第二句则不是。
因此,继续以这种方式准确地添加培训集数据,只需使您的培训集足够大和有代表性。
https://stackoverflow.com/questions/57940564
复制相似问题