我正在嘗試在項目中使用MALLET機器學習庫來進行詞義消歧。我的特徵向量包含一個x令牌的固定大小的令牌窗口,位於目標令牌的左側和右側。槌訓練實例被創建這樣的:使用Mallet進行樸素貝葉斯分類:Alphabets如何以及在哪裏設置?
// Create training list
Pipe pipe = new TokenSequenceLowercase();
InstanceList instanceList = new InstanceList(pipe);
Instance trainingInstance = new Instance(data, senseID, instanceID, text);
instanceList.add(trainingInstance);
...
// Training
ClassifierTrainer classifierTrainer = new NaiveBayesTrainer();
Classifier classifier = classifierTrainer.train(trainingList);
其中
- 「數據」是一個ArrayList <字符串>與特徵令牌
- 「senseID」是相應單詞的類別標籤意義
- 「instanceID」只是一個字符串來標識訓練實例
- 「text」是原始源文本
我會期望InstanceList的dataAlphabet和targetAlphabet屬性是隨着訓練實例的添加而建立的,但事實並非如此。因此,由於NB教練的targetAlphabet屬性爲NULL,因此我的代碼在NPE的最後一行中失敗。
查看MALLET代碼(感謝開源),我可以看到非字符串構造的根本原因是我的數據和標籤沒有實現AlphabetCarrying接口。因此,返回NULL在這裏的實例類:
我覺得這相當混亂,因爲文檔中說,數據和標籤可以是任何對象類型。但是,上面的這個錯誤似乎表明相反,我需要構造一個實現AlphabetCarrying的特定數據/標籤類。
我覺得我是錯過了關於這些字母在概念層面上的重要東西。另外,我不清楚,如果數據字母表應該來自所有的訓練實例或只有一個。 有人可以在這裏解釋錯誤嗎?
乾杯,
馬丁
您可能遇到的問題是導入本指南應該幫助的數據:http://mallet.cs.umass.edu/import-devel.php –