文本相似计算是进行文本聚类的基础,和传统结构化数值数据的聚类方法类似,文本聚类是通过计算文本之间"距离"来表示文本之间的相似度并产生聚类。文本相似度的常用计算方法有余弦定理和Jaccard系数。但是文本数据与普通的数值数据或类属数据不同,文本数据是一种半结构化数据,在进行文本挖掘之前必须要对文本数据源进行处理,如分词、向量化表示等,其目的就是使用量化的数值来表达这些半结构化的文本数据。使其适用于分析计算。
进行文本数据挖掘或信息检索的时候,会对文本进行分词处理,经过分词处理以后,一个文本的表示就变为由若干关键词(Token)来表示的多维向量。可表示为: d(t1,t2,…,tn),d表示被处理的文档,tn表示在d中出现过至少一次的关键词。在文本挖掘过程中会处理大量的文档,记为d1,d2,…,dm。经分词后,这些文档的向量表示就变为:dm(t1,t2,…,tn),m表示文档个数、n表示某个文档中关键词的个数。下面的例子中有两个包含若干关键词的文档,在本文的后面会一直使用这个例子所提供的数据。
d1 (A, B, C, C, S, D, A, B, T, S, S, S, T, W, W)
d2(C, S, S, T, W, W, A, B, S, B)
在了解了文档的向量表示以后再来看看TFIDF加权统计方法(在一些简单的处理方法中,可以只通过词频来计算文本间的相似度,不过当某个关键词在两篇长度相差很大的文本中出现的频率相近时会降低结果的准确性)。TFIDF是一种加权技术,它通过统计的方法来计算和表达某个关键词在文本中的重要程度。TFIDF是由两部分组成,一部分是TF(Token Frequency),表示一个词在文档中出现的次数,即词频。另一部分是IDF(Inverse Document Frequency),表示某个词出现在多少个文本中(或者解释为有多少个文本包含了这个词),即逆向文档频率,通常由公式IDFt=log((1+|D|)/|Dt|),其中|D|表示文档总数,|Dt|表示包含关键词t的文档数量。TFIDF的值就是由这两部分相乘得到的,还要指出的是TFIDF不是指某一个特定的公式,而是表示了一系列基于基本TFIDF方法变形(分别对TF和IDF这两部分进行处理)的公式的集合,而TFIDFtd=tftd*ln(idft)(t关键词在文本d中的词频乘以t的逆向文档频率的自然对数)是被多数系统证明是最有效的一个公式。现在来看看上面那个例子中给出的数据,由例子给出的数据可得到词频矩阵如下:
d1 | d2 | |
A | 2 | 1 |
B | 2 | 2 |
C | 2 | 1 |
D | 1 | 0 |
S | 4 | 3 |
T | 2 | 1 |
W | 2 | 2 |
通常需要把词频数据正规化,以防止词频数据偏向于关键词较多即较长的文本。如某一个词在文档d1中出现了100次,在d2中出现了100次,仅从词频看来这个词在这两个文档中的重要性相同,然而再考虑另一个因素,就是d1的关键词总数是1000,而d2的关键词总数是100000,所以从总体上看,这个词在d1和d2中的重要性是不同的。因此就需要对词频做正规化处理。正规化处理的方法是用词频除以所有文档的关键词总数,将上面的词频矩阵进行正规化处理后,结果如下表:
d1 | d2 | |
A | 0.08 | 0.04 |
B | 0.08 | 0.08 |
C | 0.08 | 0.04 |
D | 0.04 | 0.00 |
S | 0.16 | 0.12 |
T | 0.08 | 0.04 |
W | 0.08 | 0.08 |
文档中关键词总数=25 |
然后再计算每个关键词对应的逆向文档频率即IDF的值。如下表所示:
ln | |
A | 0.4 |
B | 0.4 |
C | 0.4 |
D | 1.1 |
S | 0.4 |
T | 0.4 |
W | 0.4 |
最后将正规化后的词频与IDF值相乘,结果如下:
| ||
d1 | d2 | |
A | 0.032 | 0.016 |
B | 0.032 | 0.032 |
C | 0.032 | 0.016 |
D | 0.044 | 0.000 |
S | 0.064 | 0.048 |
T | 0.032 | 0.016 |
W | 0.032 | 0.032 |
在得到TFIDF权值以后就可以利用这些数据利用余弦定理或Jaccard系数来计算文本之间的相似度以实现文本聚类等标准的文本挖掘算法了。