一. 背景
1. 算法应用
短文本, 长文档, 网页以及新闻的相似度, 购物网站的协同过滤推荐算法
2. problem
找到所有相互距离在s以内的vector pairs, 设我们有n个vector.
naive solution takes O(n^2)
我们的目标是O(n).
今天的例子以document similarity为例子.
3. Jaccard distance/similarity
sim(C1, C2) = |C1∩C2| / |C1∪C2|
d(C1, C2) = 1 - sim
比如: {a, a, a, b} 和 {a, a, b, b, c}的相似度 sim = {a, a, b} / 9 = 3/9 = 1/3, 注意有重复元素的话, 交集中a要取出现在两个集合中的最小次数2, 并集中a要取在两个出现的次数之和5.
一般我们对距离函数的要求: 距离值非负, 一个点/向量自己到自己的距离必须为0, 值的对称性.
Jaccard similarity可以应用在镜像网站的检查, 相似新闻稿的挖掘. (这个可以做毕设!!!)
4. 相似发掘的三个关键技巧
(1) Shingling: Convert doc to sets
(2) Min-Hashing: Convert larges sets to short signatrues while preserving similarity characters.
(3) Locality-Sensitive Hashing(LSH): Focus on pairs of signatures likely to be similar
二. k-shingle
1. k - Shingle(k-gram) for a doc
我们把