2014-02-06 49 views
4

我有以下兩組。這個想法是能夠基於我提供的幾個meta標籤對新聞文章進行分類。例如,當我得到了「法官」,「5年」,那麼它應該被歸類爲一個犯罪故事的文章NLTK分類和WordNet與文字Blob

train = [ 
      ('Honda', 'cars'), 
      ('Ford', 'cars'), 
      ('Volkswagen', 'cars'), 
      ('Courthouse', 'crime'), 
      ('Police', 'crime'), 
      ('Taurus', 'cars'), 
      ('Chevrolet', 'cars'), 
      ('Sonic', 'cars'), 
      ('Judge', 'crime'), 
      ('Jail', 'crime') 
      ] 
    test = [ 
      ('Porsche', 'cars'), 
      ('Toyota', 'cars'), 
      ('Arrest', 'crime'), 
      ('Prison', 'crime') 
      ] 

    cl = NaiveBayesClassifier(train) 

的問題是,當我運行此:

for a, b in test: 
     print a, cl.classify(a) 

它分類一切都像「汽車」

我相信我在這裏缺少語義相似性比較。我嘗試通過文本blob使用WordNet。

我跑

word = Word("Volkswagen") 
for each in word.definitions: 
    print each 

,但它並沒有給我任何結果。現在

的問題是:

我如何共發現地說,大衆汽車是一輛汽車,即融入分類,使其認識到Hyndai也是一輛汽車,正確分類呢?

回答

1

WordNet®是一個大型的英語詞彙數據庫,汽車品牌名稱不是WordNet的一部分,因此您無法知道大衆汽車是從WordNet購買的汽車。爲了將一個詞分類到類別中,您必須爲每個列車和測試示例構建一個特徵向量。

1

有幾個方面你的問題,你可能應該採取逐一:

「我相信,我在這裏失蹤的語義相似性對比」

「語義相似性」只是您可能考慮的許多可能改進之一。請注意,即使對於「語義相似性」,您也可以通過許多不同的方式將其包含在模型中,但並非所有方法都可能足夠簡單,只需對當前基於NaiveBayes的解決方案進行一些小修改即可。但最重要的是,您在這裏犯了一個「過早優化」的錯誤。在開始使用WordNet匹配構建複雜模型的業務之前,請確保您當前的解決方案確實不足。

您發現的是,如果您在數據集上訓練NaiveBayes分類器,並且不存在單詞「Arrest」,則生成的模型將在未來對這個單詞進行分類。然而,很可能,通過一個體面的現實訓練集,您不會發現自己處於測試文章絕對沒有常見標籤的情況下。

一旦你開始使用真實的數據集,你會很快發現,在深入研究之前,你可能會發現許多簡單的實際操作可以嘗試改進分類器(首先固定標籤的拼寫) 「語義相似性」業務,這將使您的模型在許多方面複雜化,而不必提高性能。

但它沒有給我任何結果。

正如在另一個答案中提到的,WordNet根本沒有關於「大衆汽車」這個詞的信息。即使是這樣,你也不應該期望你輸入的所有單詞都是「熟悉的」,「無打字的」,「格式良好的」等等。在你正在做的事情的背景下,你應該希望新聞文章有足夠的「熟悉的」標籤來認識它的整體主題。

我如何共發現地說,大衆汽車是一輛汽車,即融入分類,使其認識到Hyndai還提供汽車和正確的一個可能的答案歸類

本特別的問題是:製作你自己的單詞關聯圖,添加「Hyunday」 - 「Volkswagen」等關聯關係,併爲你的分類器使用類似「k-nearest neighbors」模型。

然而,這樣做你會感動從最初宣稱的「通過標籤分類的新聞報道」的任務了,和你的分類仍然會失敗單詞「Hynday」)