当一个单词在一个句子中多次出现时,如何为svm light创建训练文件

时间:2016-04-07 04:47:45

标签: svmlight

我正在使用SVM-Light(在网站http://svmlight.joachims.org/)。我想问你一个问题。 我有句“他很聪明,他是个好学生”。这句话是一个积极的句子。当我从这个句子创建一个单词列表时,我将得到一个列表,其中每个单词的索引如下:{1 - 他,2 - 是,3 - 智能,4 - 和,5 - a,6 - 良好,7 - 学生}。然后我用词语索引重写句子如下:“1 2 3 4 1 2 5 6 7”。每个单词的值是“1:0.4 2:0.2 3:0.8 4:0.3 1:0.2 2:0.4 5:0.5 6:0.7 7:0.6” 根据列车档案的格式,单词索引必须通过增加索引号来排序,所以我安排如下“1 1:0.4 1:0.2 2:0.2 2:0.4 3:0.8 4:0.3 5:0.5 6:0.7 7 :0.6" 。 但是,我收到一个错误“功能必须按递增顺序!!!”当我运行svm_learn时。我注意到这个错误,因为我的句子有两个“他”字和两个“是”字。在您的列车文件中,每个功能只出现一次。 我该如何解决这个问题?你帮我解释一下吗? 我非常感谢你。

1 个答案:

答案 0 :(得分:0)

您不能为同一功能提供多个值。 从你在问题中所写的内容来看,我认为,这个案例的解决方案只是忽略了一些词被看到两次的事实,因为这些词在句子中基本上有不同的值。

您可以假设您拥有与句子中的单词一样多的功能。这是你的第一个特征是句子中第一个单词的权重,第二个特征是句子中第二个单词的权重,第三个是句子中第三个单词的权重,依此类推。因此,对于您的示例,您将拥有一个特征向量[1:0.4 2:0.2 3:0.8 4:0.3 5:0.2 6:0.4 7:0.5 8:0.7 9:0.6]。这种方法的问题是不同的句子会有不同的长度。在这种情况下,SVMlight将假设每个句子的长度都是最长的,其余的值只是零(这基本上是为输入中的特征提供索引的理念:在稀疏数据的情况下,这仅允许提及具有非零值的功能)。说到这一点,如果数据中的第二句恰好是“他不仅聪明但他也是一个好学生”,第一个句子的特征向量将被解释为:{{1 }}

另一种解决方案是像你一样创建一个'字典',然后如果在一个句子中多次看到这个单词,则组合同一个单词的值。这可以通过获取最大/最小值,平均值,总和,乘积等来完成。您可能希望组合这些功能的方式取决于应用程序的域。例如,如果您决定获取单词的所有值的总和,则字典[1:0.4 2:0.2 3:0.8 4:0.3 5:0.2 6:0.4 7:0.5 8:0.7 9:0.6 10:0.0 11:0.0 12:0.0]的要素向量将为:{1 - he, 2 - is, 3 - smart, 4 - and, 5 - a, 6 - good, 7 - student}