我觉得这个关键是理解思想,因为实现还是比较简单的。说说我对VSM的理解吧,每个文档对应一个向量,向量的维度是一定范围的词项(有两种选取方法),对应的值为tf-idf。将查询也看作一个文档,构造向量后与向量空间中的每个向量计算余弦相似度,进行排序,即可得到结果。
基本步骤
- 对文档进行分词处理,去除停用词等
- 计算每个文档中词项的tf值,计算公式:
- 计算文档集中所有词项的idf值,计算公式:
- 计算每个文档中词项的tf-idf值,计算公式:
- 对查询进行上述处理
- 构造向量,有两种向量维度的选取方法:
(1)整个文档集合有n个词,那么向量就已Vn表示,即涉及整个词汇
(2)取q和d的合集词汇形成Vx,x=|q|+|d|
这里要提醒一句,对于大规模的向量空间,方法1将会极为耗时,方法二可能几秒搞定的事,方法一要运行个几小时(亲身经历)。 - 计算余弦相似度,进行排序。
注意点
- 没有出现的词tf-idf一般不取0,而是取一个很小的值
- 可进行优化,如设置闸值,将小于某个合适tf-idf值的词项删去
我将课程资料和代码都放到百度云了,要者自取。
链接:https://pan.baidu.com/s/1Fr94yOt_5l4rgkqCv517Dw
提取码:eenc