Mallet 中正确的 svmlight 输入格式是什么?
What is the correct svmlight input format in Mallet?
我正在使用 Mallet
和 SVMLight
输入格式来 classification
使用 NaiveBayes
分类器。但是我得到了 NumberFormatException
。我想知道在使用 SVMLight 时如何使用字符串功能。正如我在指南 1 中所读,特征也可以是字符串。
任何人都可以帮我解决我的代码或输入有什么问题吗?
这是我的代码:
public void trainMalletNaiveBayes() throws Exception {
ArrayList<Pipe> pipes = new ArrayList<Pipe>();
pipes.add(new SvmLight2FeatureVectorAndLabel());
pipes.add(new PrintInputAndTarget());
SerialPipes pipe = new SerialPipes(pipes);
//prepare training instances
InstanceList trainingInstanceList = new InstanceList(pipe);
trainingInstanceList.addThruPipe(new CsvIterator(new FileReader("/tmp/featureFiles_svm.csv"), "^(\S*)[\s,]*(.*)$", 2, 1, -1));
//prepare test instances
InstanceList testingInstanceList = new InstanceList(pipe);
testingInstanceList.addThruPipe(new CsvIterator(new FileReader("/tmp/test_set.csv"), "^(\S*)[\s,]*(.*)$", 2, 1, -1));
ClassifierTrainer trainer = new NaiveBayesTrainer();
Classifier classifier = trainer.train(trainingInstanceList);
这是我输入文件的前三行:
No f1:NP f2:NN f3:1 f4:1 f5:0 f6:0 f7:0 f8:0.0 f9:1 f10:true f11:false f12:false f13:false f14:false f15:ROOT f16:NN f17:NOTHING
No f1:NP f2:NN f3:8 f4:4 f5:0 f6:0 f7:1 f8:4.127134385045092 f9:8 f10:true f11:false f12:false f13:false f14:false f15:ROOT f16:DT f17:NOTHING
Yes f1:NP f2:NN f3:4 f4:3 f5:0 f6:0 f7:0 f8:0.0 f9:4 f10:true f11:false f12:false f13:false f14:false f15:NP f16:DT f17:NN
第一列是实例的标签,其余数据包括特征及其值。例如NN
表示词组中心词的POS
。
与此同时,我得到了 NN
(NumberFormatException: For input string: "NN"
) 的异常。我想知道为什么之前的 NP
没有任何问题,但停在 NN
.
所有特征都需要有数值。对于布尔值,您可以使用 true=1 和 false=0。您还必须将 f1:NP 修改为 f1_NP=1.
它没有死在 NP 上的原因是 SvmLight2FeatureVectorAndLabel
class 期望解析整行(标签和数据),但代码正在使用 CsvIterator
将第一个元素拆分为标签。
classify.tui.SvmLight2Vectors
class 将此代码用于迭代器:
new SelectiveFileLineIterator (fileReader, "^\s*#.+")
我正在使用 Mallet
和 SVMLight
输入格式来 classification
使用 NaiveBayes
分类器。但是我得到了 NumberFormatException
。我想知道在使用 SVMLight 时如何使用字符串功能。正如我在指南 1 中所读,特征也可以是字符串。
任何人都可以帮我解决我的代码或输入有什么问题吗?
这是我的代码:
public void trainMalletNaiveBayes() throws Exception {
ArrayList<Pipe> pipes = new ArrayList<Pipe>();
pipes.add(new SvmLight2FeatureVectorAndLabel());
pipes.add(new PrintInputAndTarget());
SerialPipes pipe = new SerialPipes(pipes);
//prepare training instances
InstanceList trainingInstanceList = new InstanceList(pipe);
trainingInstanceList.addThruPipe(new CsvIterator(new FileReader("/tmp/featureFiles_svm.csv"), "^(\S*)[\s,]*(.*)$", 2, 1, -1));
//prepare test instances
InstanceList testingInstanceList = new InstanceList(pipe);
testingInstanceList.addThruPipe(new CsvIterator(new FileReader("/tmp/test_set.csv"), "^(\S*)[\s,]*(.*)$", 2, 1, -1));
ClassifierTrainer trainer = new NaiveBayesTrainer();
Classifier classifier = trainer.train(trainingInstanceList);
这是我输入文件的前三行:
No f1:NP f2:NN f3:1 f4:1 f5:0 f6:0 f7:0 f8:0.0 f9:1 f10:true f11:false f12:false f13:false f14:false f15:ROOT f16:NN f17:NOTHING
No f1:NP f2:NN f3:8 f4:4 f5:0 f6:0 f7:1 f8:4.127134385045092 f9:8 f10:true f11:false f12:false f13:false f14:false f15:ROOT f16:DT f17:NOTHING
Yes f1:NP f2:NN f3:4 f4:3 f5:0 f6:0 f7:0 f8:0.0 f9:4 f10:true f11:false f12:false f13:false f14:false f15:NP f16:DT f17:NN
第一列是实例的标签,其余数据包括特征及其值。例如NN
表示词组中心词的POS
。
与此同时,我得到了 NN
(NumberFormatException: For input string: "NN"
) 的异常。我想知道为什么之前的 NP
没有任何问题,但停在 NN
.
所有特征都需要有数值。对于布尔值,您可以使用 true=1 和 false=0。您还必须将 f1:NP 修改为 f1_NP=1.
它没有死在 NP 上的原因是 SvmLight2FeatureVectorAndLabel
class 期望解析整行(标签和数据),但代码正在使用 CsvIterator
将第一个元素拆分为标签。
classify.tui.SvmLight2Vectors
class 将此代码用于迭代器:
new SelectiveFileLineIterator (fileReader, "^\s*#.+")