时下机器学习和大数据可谓是互联网行业炙手可热的术语,Viktor Mayer在Big Data一书中提到大数据时代我们需要的是混杂性而不是精确性,统计意义在大数据下给了我们更多空间。既然不过分追求精确性,那么字符串完全比配也就不那么重要了,字符串的相似度将会扮演更重要的角色。相似度评价在信息检索系统中也有非常广泛的使用,那么我们可以用那些方法评价字符串的相似度呢,换个说法就是求字符串之间的距离。
1. 欧氏相似度
假设有字符串X和Y,经分词(中文)去停用词之后得到了字符串的词,并统计得到各个词的数量记为:[X1,X2,...,Xn];[Y1,Y2,...,Yn]。
d(X, Y) = sqrt(sum(Xi-Yi)2)
我们也可以为每个词根据词的重要性加一个权重,比如:如果我们有一个文本集,我们可以根据TF-IDF进行词的权重计算。
2. Jaccard相似度
将字符串X中的词看成集合S,将Y中的词看成集合Y,Jsccard(X,Y) = |S∩Y|/|SυY|。
我们也可以灵活设定集合中的元素,可以将分词后的词作为集合元素,也可以将字符串的子串(i<=Len<=j)作为集合的元素。
3. 余弦相似度
采用和计算欧氏相似度相同的方法得到字符串X和Y的向量,然后计算向量的余弦即可,余弦相似度对应于字符串X和Y向量的夹角,夹角越小说明两字符串越相似。吴军在数学之美里描述了如何使用余弦相似度进行新闻文本分类,有兴趣的同学百度之。
4. 编辑距离
编辑距离指的是通过插入/删除操作将X变为Y的步数,网上有很多关于编辑距离计算算法的介绍,感兴趣的同学请自行百度。
5. 海明距离
Hamming距离是指两个向量中不同分量的个数,根据字符串得到各个分量为0/1的向量,然后便可以计算Hamming距离了。
6. LCS
用最长公共子序列长度或最长公共子串长度来衡量字符串的相似度也是一个不错的选择。
小结,以上的字符串相似度评价方法单独使用时不一定能够很准确的评价相似度,但是如果作为机器学习训练集中的一维特征值,应该还是一个不错的选择,如开篇所言,大数据时代不追求精确,但是我们需要更多维表征事物的特征。