技术方案
Word2vec+TextRank+bi_kmeans
1. 经过调研列表内容在语料比较大的时候w2v能够准确的表达词的意义,而越是相关的词之间cos距离越大。
2. 利用词之间的cos距离可以构建text rank算法的转移矩阵,代表各个词之间的转移概率,基于的假设是:如果一个词越重要,那么和它相关的词也是重要的,有此提取文章的关键词和主题。主题的计算依赖text rank返回的重要程度。各个关键词的加权求和向量,代表文章的向量。
3. 在离线部分采用聚类方案可以将相似主题的文章聚在一起,并且确定质心,经过试验二分聚类的效果比简单kmeans效果好。
4. 在线部分通过计算待计算文章到各个质心的距离,可以将文章分类到某个主题,然后在其中寻找相似文章,大大缩小搜索范围,达到实时、准确的目的。
技术细节
- bin文件夹:
a、dict_init.sh :初始化项目
b、dict_update_word2vec.sh :执行word2vec
c、dict_daily.sh :初始化后,crontab按天执行更新文章 - data文件夹
存放当次所有结果文件,其中similar_result是文章相似列表。每跑一次覆盖一次 - model文件夹
存放当次结果文件中重要的部分,不覆盖 - src文件夹
a、Get10.py 读取数据库内容,并分词
b、 fetch_keyword.py textrank提取关键词
c、cal_doc_vec.py 根据关键词向量计算文章的向量
d、merge.py 将结果融合
e、get_similar_card.py 根据文章向量和聚类结果全排序后得到每一个类别的文章相似列表
f、html_filter.py 将html文件转换为文章内容 - stop_words.txt
停用词文件,可以添加 - word2vec
word2vec开源工具,将词转换为向量 - kmeans
kmeans,聚类代码