6

Scikit-learn 有相当用户友好的用于机器学习的 python 模块。

我正在尝试为自然语言处理 (NLP) 训练 SVM 标记器,其中我的标签和输入数据是单词和注释。例如词性标记,而不是使用双/整数数据作为输入元组[[1,2], [2,0]],我的元组看起来像这样[['word','NOUN'], ['young', 'adjective']]

谁能举例说明我如何将 SVM 与字符串元组一起使用?此处给出的教程/文档适用于整数/双精度输入。http://scikit-learn.org/stable/modules/svm.html

4

2 回答 2

12

大多数机器学习算法处理作为浮点向量的输入样本,使得一对样本之间的小(通常是欧几里德)距离意味着这两个样本在与手头问题相关的方式上是相似的。

机器学习从业者有责任找到一组好的浮点特征进行编码。这种编码是特定于领域的,因此没有通用的方法可以从适用于所有应用程序领域(各种 NLP 任务、计算机视觉、事务日志分析......)的原始数据构建表示。这部分机器学习建模工作称为特征提取。当涉及大量人工工作时,这通常被称为特征工程

现在,对于您的特定问题,可以使用scikit-learn的DictVectorizer 特征提取帮助器类对句子中感兴趣的单词周围的单词窗口的 POS 标记(例如,用于命名实体检测等序列标记)进行适当编码。

于 2012-10-18T08:46:52.137 回答
4

这与其说是 scikit 或 python 问题,不如说是 SVM 的一个普遍问题。

SVM 中的数据实例必须表示为各种标量的向量,通常是实数。因此,分类属性必须首先映射到一些数值,然后才能包含在 SVM 中。

一些分类属性更自然/更符合逻辑地映射到某种尺度(一些松散的“度量”)。例如,具有 ('no rush'、'standard delivery'、'Urgent' 和 'Most Urgent') 值的 Priority 字段的 (1, 2, 3, 5) 映射可能是有意义的。另一个示例可能是颜色可以映射到 3 个维度,每个维度对应其红色、绿色、蓝色分量等。
其他属性不具有允许任何甚至近似逻辑映射到比例的语义;然后必须在 SVM 的一个(或可能几个)维度上为这些属性的各种值分配任意数值。可以理解,如果 SVM 具有许多这些任意的“非度量”维度,则它在正确分类项目方面的效率可能会降低,因为 SVM 工作中隐含的距离计算和聚类逻辑在语义上相关性较低。

这一观察结果并不意味着当项目包含非数字或非“度量”维度时根本不能使用 SVM,但它肯定提醒我们,特征选择和特征映射通常是分类器特别是 SVM 的非常敏感的参数.

在 POS 标记的特殊情况下……恐怕我现在很难理解要使用标记语料库的哪些属性以及如何将这些属性映射到数值。我知道SVMTool可以使用 SVM 生成非常有效的 POS 标记器,并且还有几篇学术论文描述了也基于 SVM 的标记器。但是我更熟悉其他标记方法(例如使用 HMM 或最大熵。)

于 2012-10-18T03:03:12.577 回答