使用原始方法计算相似度的时候,tf-idf值特别关键,一般用来做对应单词的权重。但是如果数据量较小的时候,tf-idf值就没太多意义。
tf-idf值的时候,
idf值是采用领域内的,还是使用通用的。如果数据量较多,就是用领域内的,否则使用通用的。
我们看一个词是否是关键词的时候,是根据自己对这个词的印象,这个词是不是常见。
1. simhash
simhash的最初应用场景是海量网页去重,通过降维,将一整篇文章,编码成固定的长度。
simhash的计算步骤如下:
- 特征提取。提取文本的feature和weight,其中feature是关键词,weight是重要程度,可以使用频次,也可以使用tfidf值。
- 通过hash函数,计算各个特征向量的hash值,hash值为二进制数01组成的签名,比如110101。
- 单个加权。在hash值的基础上,给所有的hash进行加权,即:w = hash * weight,遇到这时0按照-1算。
- 合并。将上述各个特征向量的加权结果累加,变成只有一个序列串。
- 归一。对合并获取的值,每一位上如果大于0则置1,小于0则置0,举例:“9 -9 1 -1 1 9”降维(某位大于0记为1,小于0记为0),得到的01串为:“1 1 0 1 0 1”。
最后每个文本获取一个fingerprint,计算两个文本fingerprint的汉明距离n,当n小于一个数的时候(通常是3),就认为两个文本是相似的。
说明:在处理小于500字的短文本时,simhash的表现并不是很好。
经过我自己实践,发现短文本的时候确实很不好。长文本的时候保持稳定,我使用了两段相同的长文本,第二段文本里面删了一些东西,汉明距离依然为1,长文本确实不错。
2. sentence vec
直接使用bert句向量。
网友评论