2013-05-29 66 views
5

所以我一直在研究一個自然語言處理項目,在這個項目中我需要對不同風格的文字進行分類。假設已經爲我提取了文本的語義特徵,我打算在Java中使用Weka來使用這些特徵來訓練SVM分類器,這些特徵可以用於分類其他不同的文本。自然語言處理 - 將文本特徵轉換成特徵向量

我遇到麻煩的部分是要訓練SVM,必須將要素轉換爲特徵向量。我不確定如何將詞彙豐富性,n-gram,標點符號,段落數量和段落長度等功能表示爲向量中的數字。如果有人能指出正確的方向,那將不勝感激。

+0

不確定你在找什麼,但希望我的小例子能幫助你。祝你好運。 –

回答

5

我不知道什麼值的屬性可以承擔,但也許這個例子可以幫助你:

假設我們現在進行監督學習的實驗嘗試,以確定是否一個週期標誌着一個句子的末尾或者不是,分別爲EOSNEOS。從段落樣式的格式一般的句子的訓練數據來了,但轉化爲以下矢量模型:

  • 1列:類別:
  • 列不-結束句結束句子或2-8:圍繞所述時期的+/- 3個字
  • 列9,10:分別在下一個可靠句子分隔符之前的時間段的左/右字數(例如,?,!或段落標記)。
  • 第11列:該時段後的空格數。

當然,這不是一個非常複雜的問題要解決,但這是一個很好的介紹Weka。我們不能僅僅將這些詞作爲特徵(真正的高維空間),但我們可以將他們的POS(詞性)標籤。我們還可以提取單詞的長度,不管單詞是否大寫等。

因此,只要您能夠將任何內容作爲測試數據進行提供,只要您能夠將其轉換爲上面的矢量模型並提取.arff中使用的功能。

.arff文件以下(非常小的部分)被用於確定一個句子中的週期是否標記的端部或不:

@relation period 

@attribute minus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_three_length real 
@attribute minus_three_case {'UC','LC','NA'} 
@attribute minus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_two_length real 
@attribute minus_two_case {'UC','LC','NA'} 
@attribute minus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_one_length real 
@attribute minus_one_case {'UC','LC','NA'} 
@attribute plus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_one_length real 
@attribute plus_one_case {'UC','LC','NA'} 
@attribute plus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_two_length real 
@attribute plus_two_case {'UC','LC','NA'} 
@attribute plus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_three_length real 
@attribute plus_three_case {'UC','LC','NA'} 
@attribute left_before_reliable real 
@attribute right_before_reliable real 
@attribute spaces_follow_period real 
@attribute class {'EOS','NEOS'} 

@data 

VBP, 2, LC,NP, 4, UC,NN, 1, UC,NP, 6, UC,NEND, 1, NA,NN, 7, LC,31,47,1,NEOS 
NNS, 10, LC,RBR, 4, LC,VBN, 5, LC,?, 3, NA,NP, 6, UC,NP, 6, UC,93,0,0,EOS 
VBD, 4, LC,RB, 2, LC,RP, 4, LC,CC, 3, UC,UH, 5, LC,VBP, 2, LC,19,17,2,EOS 

正如你可以看到,每一個屬性可以採取任何你想讓它:

  • real表示實數
  • 我提出了LCUC表示大寫和小寫,分別
  • 大多數其他值都POS標籤

你需要弄清楚你的特點是什麼,以及什麼樣的價值觀,你會用它來代表/分類。然後,您需要將您的數據轉換爲由.arff定義的格式。

爲了解答您的標點問題,我們假設我們的句子全部以.?結尾。你可以有一個名爲PUNC的屬性,它有兩個值:

@attribute punc {'p','q'} 

我沒有用?,因爲這是爲(傳統)數據點丟失時分配。我們可以有布爾屬性來表明一個角色或者你是否存在(用0,1或者false,true)。另外一個例子,但是對於質量:

@attribute quality {'great','good', 'poor'} 

你如何確定表示分類是你的,但上面的應該讓你開始。祝你好運。

+0

我試圖儘可能詳細,但我在平板電腦上 - 這很難。 –