1、评估帖子的关联性
衡量文本相似性:编辑距离:假设我们有两个单词,“machine”和“mchiene”,他们之间的相似度可以表示成将一个单词转换为另一个单词所需要的最少编辑次数。在这李自力,编辑距离是2,我们可以在m后加上a并删掉e。
词袋:它基于简单的词频统计,对每一个帖子中的词语,将他出现的次数记录下来并表示成一个向量。这一步也叫作向量化。
在一份给定的文件里,词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(分子一般小于分母 区别于IDF),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)
逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF反文档频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率(另一说:TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数)。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。(另一说:IDF反文档频率(Inverse Document Frequency)是指果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。)但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处.
(1)、对每个帖子提取重要特征,并针对每一个存储为一个向量(2)、在这些向量上进行聚类计算
(3)、确定每个帖子带聚类所在的簇
(4)、对每个簇,获取几个与带聚类帖子不同的帖子,这样可以提升多样性
2、预处理:用相近的公共词语个数来衡量相似性
(1)、将原始文本转化为词袋
Scikit中CountVecorizer可以高效完成这个工作
(2)、统计词语
(3)、词语频次向量的归一化
(4)、删除不重要的词
(5)、词干处理
对于英语,可以使用nltk的SnowballStemmer
拓展词向量
(6)、停用兴奋剂
使用TF_IDF,TF代表统计部分mIDF把权重折扣考虑进来
归纳为如下:
切分文本;扔掉出现过于频繁,而又对检测相关帖子帮助不大的词语;人叼出现频率很低,只有很小可能出现在未来帖子中的词语;统计剩余中的词语;考虑整个预料集合,从词语统计中计算TF-IDF
3、聚类
K-means:当使用所需的簇个数num进行初始化后,该算法把这个值作为簇质心的数目,期初,任意选择num个帖子,并将他们的特征向量作为质心,然后遍历其他帖子,并将离他们最近的质心所在的簇分给他们。在此,将他们每个质心向该簇所有特征向量的中心点,淡然这会改变簇的分配,一些帖子现在距离另一个簇更近了,因此该算法将会更新这些帖子的簇分配。只要将质心移动一段距离,就可以做到这一点,经过一定迭代,当移动量低于一定阈值,我们就认识聚类已经收敛了。
4、解决最初的难题
TF-IDF值越大,词语在帖子中的区分性就越大,若较小,这说明该词语没什么价值
5、调整参数