4- 聚类和相似度模型
聚类和相似度: 文档检索
我们想从数据中推断出某种潜在的结构
结构是一组相关观测对于一个实际应用进行研究
检索感兴趣的文档
文件检索
目前正在阅读你喜欢的文章
一种能自动检测出他感兴趣文章的方法
面临的挑战
我们如何衡量相似度
如何在文章中进行搜索, 找出下一篇它可能读的文章呢
用于测量相似度的单词计数表示
文档的单词计数表示
词袋模型
- 忽略单词的顺序
把所有单词拿出来扔进这个口袋摇一摇, 打乱了单词的顺序
- 对单词表中的每一个单词计数
mark
对于上面句子我们进行考虑我们定义了一个向量
我们具有一个
mark
如上图所示的向量表单词与他出现的次数共同构成了一个向量
这是一个稀疏向量因为我们会有的单词只是其中的少数
度量文档的相似度
mark
假设对于这篇关于足球的文章
我们对于两个向量进行点乘这样可以计算出大家都有的单词数值
只要对应位置一方为 0, 那么对应点乘这一项为 0.
1*3 + 5*2 = 13
单词计数的问题 - 文档长度
mark
我们文章的字数如果增加为原来的两倍也就是将复制了一遍的文档加入其中进行比较
那么我们的文档的相似度竟然变成 52 了
内容之间的联系其实没有变, 但是文章变长之后, 联系变得更深了
解决方法 归一化
计算向量的范数
mark
计算出每一项向量值的数的平方的和然后取其平方根
mark
得到的归一化之后的向量如图所示使得我们将不同文章的数量置于同等地位
应用 tf-idf 对于重要单词进行优先级排序
上次的归一化处理, 解决了我们的文档长度对于单词的影响
单词计数的问题 - 生僻字
mark
我们所说的常用词语指语料库中出现频率高的词
语料库: 指我们在检索时查看的所有文档的总和
常用词决定了我们文档间相似度的度量
与之对应的是文档中的生僻词
常用单词会淹没生僻单词
什么是生僻词的特征?
在语料库中看起来出现频率不高
偏重于在少量文档中出现的单词
同样的, 通过他们在以下量值缩放单词 w
包含 w 的文档数量
也就是包含 w 的文档越多, 说明 w 越不重要是一个常用词那么我们对它的次数进行缩放
也就是除以他在多少个文档出现了
关键词
只有生僻词才最重要么?
什么是关键词的特征?
在文档中频繁出现(局部常见)
在语料库中罕见出现(全局罕见)
个人思考: 提取出主题, 与主题相关的
关键词的特征就是 局部常见和全局罕见的平衡
Tf-idf 文档表示
词频 逆向文档频率
词频 考虑局部情况 某人正在阅读的文章
只是简单的统计该词出现的次数
通过逆向文档频率来减少出现在很多文档的词的权重
所以我们要考虑语料库中的所有文档:
mark
语料库中的文档数除以(1 + 包含单词的文档), 再取商的对数
这个数对于一个太多频繁出现的单词, 后面值约为 1, 取了对数就是 0 了
极大的减少在所有文档中都出现的单词的权重直到极端情况 0.
与之相反的是如果我们有一个生僻词, 我们将计算出一个非常大的数
一个非常的数, 除以一个 1 + 较小的数之商的对数结果会较大
之所以数字 1 出现在公式的下方是因为我们无法假设每个单词都会出现在语料库的文档中避免除 0 错误
mark
单词 the 只在其中一篇文档没出现所以单词 the 的权重完全减少到 0.
mark
梅西这个单词出现在 3 篇文档中此时它的逆向文档频率将会是 4
简单的将两个向量相乘即可得到
mark
tf * idf
常用词的权重减少了, 而生僻词的权重增加了
检索相似的文档
来源: http://www.jianshu.com/p/f2ae9451fd58