如何使用scikit learn中支持向量机的非整数字符串标签?Python

2024-04-19 07:53:47 发布

您现在位置:Python中文网/ 问答频道 /正文

Scikit learn具有相当友好的python模块,可用于机器学习。

我正在尝试训练一个支持向量机的自然语言处理(NLP)标记,其中我的标签和输入数据是文字和注释。E、 g.词性标注的一部分,而不是使用双/整数数据作为输入元组[[1,2], [2,0]],我的元组将如下[['word','NOUN'], ['young', 'adjective']]

有谁能举个例子说明我如何使用支持向量机与字符串元组?此处提供的教程/文档用于整数/双输入。http://scikit-learn.org/stable/modules/svm.html


Tags: 模块数据标记机器nlp整数标签scikit
2条回答

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

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

现在针对您的具体问题,可以使用scikit learn的DictVectorizer feature extraction helper class对句子中感兴趣的单词周围的单词窗口的POS标记(例如,用于序列标记,例如命名实体检测)进行适当编码。

这与其说是一个scikit或python问题,不如说是一个SVMs的一般问题。

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

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

这种观察并不意味着支持向量机在包含非数值或非“度量”维时根本不能使用,但它无疑提醒我们,特征选择和特征映射通常是分类器,特别是支持向量机非常敏感的参数。

在词性标注的特殊情况下。。。恐怕我现在有点困惑了,该使用哪些标记语料库的属性,以及如何将这些属性映射到数值。我知道SVMTool可以使用支持向量机生成非常有效的POS标记,而且一些学术论文也描述了基于支持向量机的标记。不过,我更熟悉其他标记方法(例如,使用HMMs或最大熵)

相关问题 更多 >