我们采用更加形式化的定义,并采用稍大一些的例子来展示如何使用基于数据集频率的权重。对应于一个给定的词项,其权重使用IDF(逆文档频率)来计算。
为了给每篇文档建立一个对应的向量,可以考虑如下定义。
![]() |
对于每一篇文档向量,都有n个分量,并且对于整个文档集中每个不同的词项,都包含一个词条。向量中的每个分量为在整个文档集中计算出来的每个词项的权重。在每篇文档中,词项权重基于词项在整个文档集中出现的频率情况以及词项在某一个特定文档中出现的频率自动赋值。词项在一篇文档中出现的频率越高,则权重越大;相反,如果词项在所有文档中出现的频率越高,则权重越小。
仅当词项在文档中出现时,文档向量中词项的权重才为非零值。对于一个包含许多小文档的大文档集,文档向量可能会包含大量的零元素。例如,一篇文档集包含10 000个不同的词项,也就是每个文档中要用10 000维的向量来表示。一个给定的只有100个不同词项的文档向量则包含9 900个零分量。
对于文档中词项的权重因素,主要综合考虑词频和逆文档频率。也就是说,我们使用下面的公式计算文档i对应的向量中第j个词条的值:
下面我们来考虑一个包含D1和D2两篇文档的文档集,在文档D1中词"绿色"出现了十次,而在D2中"绿色"仅出现了5次。如果仅仅查询"绿色",那么在结果中文档D1排在文档D2前面。
当我们在一篇文档检索系统中用文档集中t个不同的词项来查询时,系统将为每个文档计算维度为t的向量D(di1, di2,…,dit)。向量值使用前文所述的词项权重填充。类似地,查询中的词项构建的向量为Q(wq1, wq2,…,wqt)。
查询Q和文档Di的相似度可以简单地定义为两个向量的内积。因为查询向量和和文档向量在长度上是相似的,这种策略也常常被用来计算两篇文档的相似度。我们将在3.2节中讨论将SC应用到文档聚类中。
相似度计算举例
下面我们考虑一个固定的查询和文档集,包含一个查询Q和三篇文档组成的文档集:
Q:"gold silver truck"
D1:"Shipment of gold damaged in a fire"
D2:"Delivery of silver arrived in a silver truck"
D3:"Shipment of gold arrived in a truck"
在这个文档集中,有三篇文档,所以d = 3。如果一个词项仅在三篇文档中的一篇中出现,那么该词项的IDF就是lg(d/dfi) = lg(3/1) = 0.477。类似地,如果一个词项在三篇文档中的两篇中出现,那么该词项的IDF就是lg(d/dfi) = lg(3/2) = 0.176。如果一个词项在三篇文档中都出现了,那么该词项的IDF就是lg(d/dfi) = lg(3/3) = 0。
三篇文档的每个词项的IDF值如下所示:
![]() |
现在就可以构造文档向量了。因为文档集中出现了11个词项,所以我们构造一个11维的文档向量。我们可以用上文给出的按字母顺序排列的词项来构建文档向量,所以t1对应第一个词项"a",t2对应"arrived",依次类推。向量j中词项i的权重计算方式为idfi×tfij。文档向量如表2-1所示。
表2-1 文档向量
docid | a | arrived | damaged | delivery | fire | gold | in | of | shipment | silver | truck |
D1 | 0 | 0 | 0.477 | 0 | 0.477 | 0.176 | 0 | 0 | 0.176 | 0 | 0 |
D2 | 0 | 0.176 | 0 | 0.477 | 0 | 0 | 0 | 0 | 0 | 0.954 | 0.176 |
D3 | 0 | 0.176 | 0 | 0 | 0 | 0.176 | 0 | 0 | 0.176 | 0 | 0.176 |
Q | 0 | 0 | 0 | 0 | 0 | 0.176 | 0 | 0 | 0 | 0.477 | 0.176 |
![]() |