【问题标题】:Mallet: Alphabets don't match exceptions木槌:字母不匹配例外
【发布时间】:2016-05-16 19:50:41
【问题描述】:

我尝试用 Java 中的 Mallet 实现一个文档分类器。我已经有一个基本包含特征值的文件。所以我不想运行整个raw text 处理管道。

我的特征文件中的一行现在看起来像这样(2 个特征,ID 和 NrOfToken,文档标签是“A”)

ID=3 NrofTokens=279.0 A

我尝试读入这个文件并将其放入这样的分类器中:

Pipe instancePipe = new SerialPipes(new Pipe[] {
                new CharSequence2TokenSequence(),
                new TokenSequence2FeatureSequence(),
                new Target2Label(),
        });

        InstanceList trainData = new InstanceList(instancePipe);
        InstanceList testData = new InstanceList(instancePipe);

        Reader trainFileReader = new InputStreamReader(new FileInputStream(fileTrain), "UTF-8");
        trainData.addThruPipe(new LineGroupIterator(trainFileReader, Pattern.compile("^\\s*$"), true));

        Reader testFileReader = new InputStreamReader(new FileInputStream(fileTest), "UTF-8");
        testData.addThruPipe(new LineGroupIterator(testFileReader, Pattern.compile("^\\s*$"), true));

        // Create a classifier trainer, and use it to create a classifier
        @SuppressWarnings("rawtypes")
        ClassifierTrainer naiveBayesTrainer = new NaiveBayesTrainer();
        Classifier classifier = naiveBayesTrainer.train(trainData);

目前我收到此异常:

java.lang.IllegalArgumentException: Alphabets don't match: Instance: [6, null], InstanceList: [6, 0]
    at cc.mallet.types.InstanceList.add(InstanceList.java:335)
    at cc.mallet.types.InstanceList.addThruPipe(InstanceList.java:267)
    at 

有人知道字母表为什么会坏吗?

【问题讨论】:

  • 有人可以帮忙解决这个问题吗?在运行来自mallet.cs.umass.edu 的主题建模代码时,我也面临这个问题。
  • 有人在 2020 年使用木槌版本 3.0.8 面临同样的问题吗?我发现它发生在极少数情况下。我也找了官方文档,但没有找到任何解决方案。

标签: java mallet


【解决方案1】:

这不是一个真正的答案,但我发现 Mallet 中的异常到目前为止信息量不是很大。我也遇到了这个错误,更改了解析数据行的正则表达式并在最后删除了一个空行,使它消失了。

即这部分的正则表达式

CsvIterator reader = new CsvIterator(new FileReader(tempTrainPath), "(\\w+)\\s+(\\S+)\\s+(.*)", 3, 2, 1);
testInstances.addThruPipe(reader);

一整天的调试结束后,我太恼火了,无法确定这两者中的哪一个是真正的罪魁祸首。但也许这些信息可以帮助其他人。

【讨论】:

    【解决方案2】:

    我在尝试从命令行评估分类器时遇到了同样的错误。如https://mallet-dev.cs.umass.narkive.com/NFtumW1r/mallet-2-0-7-ge-maxent-alphabets-don-t-match 所述添加--use-pipe-from train_input.mallet 选项解决了该问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多