短文本聚类

1. 数据预处理

1.1 下载搜狗实验室提供的新闻预料(提取码krbd)

1.2 xml文本解析

extract_text.py : 读取SogouCS_reduced文件夹下的文件,进行xml解析,得到每个新闻的content,并将其放在对应的分类文件夹下;

split_text.py : 读取分类好的新闻预料(SogouCS_reduced_after文件夹下),采用jieba库进行分词,其中停用词表采用的是哈工大停用词表。

 

2. 分析数据

analysize_corpus.py: 统计每类新闻的篇幅数,并统计每条新闻的单词数。

各类别文章数统计如下(总计新闻337,046篇):

奥运房产互联网健康教育军事旅游汽车商业时尚体育文化娱乐招聘
 26,437  69,661  10,736  5,442  10,045  2,889  8,760  6,539  60,790  16,412  83,689  3,225  32,335  86 

其中去除有效词后,词数不超过50的新闻共计70,541篇(这里可认为是短文本,占总新闻的20.9%),具体分布如下:

奥运房产互联网健康教育军事旅游汽车商业时尚体育文化娱乐招聘
 5,860  12,238  1,255  514  4,436  278  2,056  621  4,738  4,816  25,354  349  7,972  54 

 

3. 训练word2vector

3.1 数据准备

concate_multiclass_to_one_filehold.py : 把SogouCS_reduced_after_split文件下的多个文件夹,合并到同一个文件夹下segment,方便训练词向量读取数据。

3.2 模型训练

train_word2vec.py: 利用gensim提供的api训练词向量。

3.3 效果评测

test_w2v.py : 测试训练的词向量的准确性。

与“互联网”最相似的10个单词

单词网络网络媒体广告业电子商务搜索引擎网络广告因特网软件业网站网络营销
相似度0.6459218260.5694613460.5682755710.5618802910.5562822220.541346550.5291527510.5235298870.5228289370.512335718

与“大学生”最相似的10个单词

单词学生毕业生高校学生学子本科生青年村官研究生中小学生中学生
相似度0.6546445490.5983644720.5700311060.5532284980.5405172110.5404921770.5355905290.52388680.5186701420.508000612

与“哈工大”最相似的10个单词

单词哈尔滨工业大学东北大学天津大学北京航空航天大学工学外语系华中农业大学河南大学工程系吉林大学
相似度0.6325361730.6030319930.6017299290.5879361630.5776840450.5771455760.5714995860.5516983870.5476149920.546033502

 

4.得到短文本表示向量

4.1 提取短文本

get_short_corpus.py : 从segment文件夹下读取语料,把单词数不差过max_word_count(这里设置为50)的新闻提取出来作为短文本,放置到short_corpus文件夹下。

4.2 获得文本表示向量

get_short_corpus_vector.py: 从short_corpus文件夹下读取文件,计算文本表示向量,这里一共提供两种方式:一种是直接把文档中单词的词向量求平均值,一种是指数加权平均。

visual_word_vector.py: 随机抽取200个文本,通过t-SNE进行降维,然后得到可视化结果。

简单平均效果图如下:

指数加权平均效果图如下:

 

5.聚类

5.1 基于word embedding的聚类

选择sklearn提供的kmeans进行聚类,聚类前的文本分类情况如下:

 奥运  房产  互联网  教育  旅游  商业  时尚  体育  娱乐  总计 
 5,860  12,238  1,255  4,436  2,056  4,738  4,816  25,354  7,972  68,725 

cluster_use_sklearn.py: 使用sklearn提供的kmeans api进行聚类,采用Fscore进行评测。

 

5.2 基于传统特征的聚类(tf-idf/LDA)

get_tf_idf.py: 读取short_corpus文件夹下的文本,利用sklearn提供的TfidfVectorizer计算tf_idf,并保存到文件夹short_corpus_with_tfidf下,其中tf_idf维度为1984。

注:运行速度特别慢。

 

lda_test.py : 读取short_corpus文件夹下的文本,利用gensim提供的lda api训练模型并评测聚类的效果。

注:无。

 

get_doc2_vec.py :  读取short_corpus文件夹下的文本,利用gensim提供的doc2vec api训练模型并评测聚类的效果。

注:样本量小的话,效果非常差(先在大样本下训练,再在小样本进行测试,效果依然不理想,这里猜测原因可能是由于短文本的词过于少,致使训练的参数过拟合了)。

 

聚类结果如下所示:

特征提取方法F值
tf-idf64.38%
lda51.48%
doc_vector36.27%

不同参数对应的聚类结果如下所示:

特征提取方法Fscore
word_vector_average67.48%
word_vector_average_with_exp_weight
(beta=0.9)
59.20%
word_vector_average_with_exp_weight
(beta=dynamic) 
61.73%
word_vector_average_with_exp_weight
(beta=min(dynamic,0.9)) 
62.79%
word_vector_average_with_exp_weight
(beta=min(dynamic,0.95)) 
69.23%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值