2012-10-18 44 views
6

Scikit-learn具有用於機器學習的相當用戶友好的Python模塊。如何使用scikit-learn的SVM使用非整數字符串標籤? Python

我正在嘗試爲自然語言處理(NLP)訓練SVM標記器,其中我的標籤和輸入數據是單詞和註釋。例如。標記,而不是使用雙/整數數據作爲輸入元組[[1,2], [2,0]]部分的詞性,我的元組看起來就像這樣[['word','NOUN'], ['young', 'adjective']]

誰能給的,我怎麼可以使用SVM用繩子元組的例子嗎?這裏給出的教程/文檔是針對整數/雙輸入的。 http://scikit-learn.org/stable/modules/svm.html

回答

12

大多數機器學習算法處理輸入樣本是漂浮的載體中,使得小(通常歐幾里得)一個之間的距離一對樣本意味着該2個樣本是類似以與當前問題相關的方式。

機器學習從業人員有責任找到一組好的浮點特徵進行編碼。 這種編碼是域特定的因此,沒有通用的方法來構建可用於所有應用程序域(各種NLP任務,計算機視覺,事務日誌分析...)的原始數據。這部分機器學習建模工作被稱爲特徵提取。當涉及大量手動工作時,通常將其稱爲功能工程

現在針對您的具體問題,可以通過使用scikit-learn的DictVectorizer feature extraction helper class來適當編碼句子中圍繞感興趣詞語(例如,用於諸如命名實體檢測的序列標籤)的單詞窗口的POS標籤。

+0

+1。請注意,對於POS標記,POS窗口只能朝一個方向延伸。詞語窗口也可以提供良好的特徵(至少對於NER和WSD來說它們工作得很好)以及正在考慮的單詞的固定長度詞綴。 –

4

這不是一個scikit或python問題,而是更多與SVM有關的常見問題。在支持向量機

數據實例必須被表示爲標量排序,通常,實數載體。因此必須首先將分類屬性映射到某些數值,然後才能將其包含在SVM中。

一些分類屬性可以使它們更自然地/邏輯地映射到某個尺度上(一些鬆散的「度量」)。例如,對於值爲('不急','標準傳送','緊急'和'最緊急')的優先級字段的(1,2,3,5)映射可能是合理的。另一個例子可能是顏色可以映射到3維,每個顏色對應於他們的紅色,綠色,藍色組件等。
其他屬性沒有允許任何甚至近似邏輯映射到刻度的語義。必須爲SVM的一個(或可能多個)維度指定這些屬性的各種值,然後將這些值分配給任意數值。理解的是,如果SVM有許多這些任意的「非度量」維度,那麼它在正確分類項目時可能效率較低,因爲隱含於SVM工作的距離計算和聚類邏輯在語義上較少相關。

這個觀察並不意味着當項目包含非數值或非「度量」維度時,根本不能使用SVM,但它肯定提醒特徵選擇和特徵映射是分類器的非常敏感的參數特別是SVM。

在POS標記的特殊情況下...恐怕我很難被關注,標籤語料庫的哪些屬性需要使用,以及如何將這些屬性映射到數值。我知道SVMTool可以使用SVM生成非常高效的POS標記器,並且還有幾篇學術論文也描述了也基於SVM的標記器。但是我更熟悉的其它方法來標記(例如,使用的HMM或最大熵。)

相關問題