我正在使用 SVM-Light(在网站http://svmlight.joachims.org/)。我想问你一个问题。我有一句话“他很聪明,他是个好学生”。这句话是肯定句。当我从这句话创建一个单词列表时,我将有一个包含每个单词索引的列表,如下所示:{1 - he, 2 - is, 3 - smart, 4 - and, 5 - a, 6 - good, 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” 根据train文件的格式,单词索引必须按递增排序索引号,所以我安排如下“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 回答
同一功能不能有多个值。根据您在问题中所写的内容,我认为,这种情况的解决方案只是忽略某些单词被看到两次的事实,因为本质上这些单词在句子中具有不同的值。
你可以假设你在一个句子中有多少单词就有多少特征。那就是你的第一个特征是句子中第一个词的权重,第二个特征是句子中第二个词的权重,第三个是句子中第三个词的权重,依此类推。因此,对于您的示例,您将有一个特征向量[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: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}
将是:1:0.6 2:0.6 3:0.8 4:0.3 5:0.5 6:0.7 7:0.6