文本聚类
数据集 THUnews中文新闻文本分类
方法 jieba分词后,使用tf-idf提取特征,提取时使用停用词表删除停用词,最后使用kmeans进行聚类。
优化 优化停用词表,增加max_feature特征,使用minibatchkmeans增加聚类速度
评价标准 外在(已知标签) 兰德基数RI ,调整兰德基数 ARI
内在 轮廓系数
from sklearn.feature_extraction.text import TfidfVectorizer
import paddlenlp
from sklearn.cluster import KMeans
import jieba
读取数据,数据集为THUnews新闻文本分类数据,使用jieba分词
with open('data/data12701/Train.txt','r',encoding='utf-8') as f:
content=f.readlines()
data=[]
label=[]
for i in content:
t=i.split('\t')
t[2]=(" ").join( [w for w in jieba.cut(t[2])] )
data.append(t[2])
label.append(t[1])
print(label[:5])
print(len(label))
Building prefix dict from the default dictionary ...
Dumping model to file cache /tmp/jieba.cache
Loading model cost 0.851 seconds.
Prefix dict has been built successfully.
['财经', '财经', '财经', '财经', '财经']
752476
划分数据集,由于数据过多,测试集增加划分,并乱序
from sklearn.model_selection import train_test_split
train_data,test_data,train_label,test_label=train_test_split(data,label,test_size=0.9,shuffle=True)
print(len(train_data))
print(train_label[:5])
75247
['科技', '股票', '时尚', '体育', '社会']
读取停用词表,在tf-idf提取特征时,选择能表示文本主题的词语作为特征
with open('data/cn_stop.txt','r',encoding='utf-8') as f:
stopwords=f.readlines()
tf_idf=TfidfVectorizer(max_features=20000,stop_words=stopwords)
tf=tf_idf.fit_transform(data)
print(tf.shape)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/feature_extraction/text.py:391: UserWarning: Your stop_words may be inconsistent with your preprocessing. Tokenizing the stop words generated tokens ['exp', 'lex', 'sub', 'sup', '①①', '①②', '①③', '①④', '①⑤', '①⑥', '①⑦', '①⑧', '①⑨', '①a', '①b', '①c', '①d', '①e', '①f', '①g', '①h', '①i', '①o', '②①', '②②', '②③', '②④', '②⑤', '②⑥', '②⑦', '②⑧', '②⑩', '②a', '②b', '②c', '②d', '②e', '②f', '②g', '②h', '②i', '②j', '③①', '③⑩', '③a', '③b', '③c', '③d', '③e', '③f', '③g', '③h', '④a', '④b', '④c', '④d', '④e', '⑤a', '⑤b', '⑤d', '⑤e', '⑤f', '一一', '一下', '一个', '一些', '一何', '一切', '一则', '一则通过', '一天', '一定', '一方面', '一旦', '一时', '一来', '一样', '一次', '一片', '一番', '一直', '一致', '一般', '一起', '一转眼', '一边', '一面', '万一', '三天两头', '三番两次', '三番五次', '上下', '上升', '上去', '上来', '上述', '上面', '下列', '下去', '下来', '下面', '不一', '不下', '不久', '不了', '不亦乐乎', '不仅', '不仅仅', '不仅仅是', '不会', '不但', '不光', '不免', '不再', '不力', '不单', '不变', '不只', '不可', '不可开交', '不可抗拒', '不同', '不外', '不外乎', '不够', '不大', '不如', '不妨', '不定', '不对', '不少', '不尽', '不尽然', '不巧', '不已', '不常', '不得', '不得不', '不得了', '不得已', '不必', '不怎么', '不怕', '不惟', '不成', '不拘', '不择手段', '不敢', '不料', '不断', '不日', '不时', '不是', '不曾', '不止', '不止一次', '不比', '不消', '不满', '不然', '不然的话', '不特', '不独', '不由得', '不知不觉', '不管', '不管怎样', '不经意', '不胜', '不能', '不能不', '不至于', '不若', '不要', '不论', '不起', '不足', '不过', '不迭', '不问', '不限', '与其', '与其说', '与否', '与此同时', '专门', '且不说', '且说', '两者', '严格', '严重', '个人', '个别', '中小', '中间', '丰富', '串行', '临到', '为主', '为了', '为什么', '为什麽', '为何', '为止', '为此', '为着', '主张', '主要', '举凡', '举行', '乃至', '乃至于', '之一', '之前', '之后', '之後', '之所以', '之类', '乌乎', '乘势', '乘机', '乘胜', '乘虚', '乘隙', '也好', '也就是说', '也是', '也罢', '了解', '争取', '二来', '二话不说', '二话没说', '于是', '于是乎', '云云', '云尔', '互相', '交口', '产生', '亲口', '亲手', '亲眼', '亲自', '亲身', '人人', '人们', '人家', '人民', '什么', '什么样', '什麽', '仅仅', '今后', '今天', '今年', '今後', '介于', '仍旧', '仍然', '从不', '从严', '从中', '从事', '从今以后', '从优', '从古到今', '从古至今', '从头', '从宽', '从小', '从新', '从无到有', '从早到晚', '从未', '从来', '从此', '从此以后', '从而', '从轻', '从速', '从重', '他人', '他们', '他是', '他的', '代替', '以上', '以下', '以为', '以便', '以免', '以前', '以及', '以后', '以外', '以後', '以故', '以期', '以来', '以至', '以至于', '以致', '任何', '任凭', '任务', '企图', '伙同', '伟大', '传说', '传闻', '似乎', '似的', '但凡', '但愿', '但是', '何乐而不为', '何以', '何况', '何处', '何妨', '何尝', '何必', '何时', '何止', '何苦', '何须', '余外', '作为', '你们', '你是', '你的', '使得', '使用', '例如', '依据', '依照', '依靠', '便于', '促进', '保持', '保管', '保险', '俺们', '倍加', '倍感', '倒不如', '倒不如说', '倒是', '倘使', '倘或', '倘然', '倘若', '借以', '借此', '假使', '假如', '假若', '偏偏', '做到', '偶尔', '偶而', '傥然', '允许', '充其极', '充其量', '充分', '先不先', '先后', '先後', '先生', '光是', '全体', '全力', '全年', '全然', '全身心', '全部', '全都', '全面', '八成', '公然', '共同', '共总', '关于', '其一', '其中', '其二', '其他', '其余', '其后', '其它', '其实', '其次', '具体', '具体地说', '具体来说', '具体说来', '具有', '兼之', '再其次', '再则', '再有', '再次', '再者', '再者说', '再说', '决不', '决定', '决非', '况且', '准备', '凑巧', '凝神', '几乎', '几度', '几时', '几番', '几经', '凡是', '凭借', '出于', '出去', '出来', '出现', '分别', '分头', '分期', '分期分批', '切不可', '切切', '切勿', '切莫', '则甚', '刚好', '刚巧', '刚才', '别人', '别处', '别是', '别的', '别管', '别说', '到了儿', '到处', '到头', '到头来', '到底', '到目前为止', '前后', '前此', '前者', '前进', '前面', '加上', '加之', '加以', '加入', '加强', '动不动', '动辄', '勃然', '匆匆', '十分', '千万', '千万千万', '单单', '单纯', '即令', '即使', '即便', '即刻', '即如', '即将', '即或', '即是说', '即若', '却不', '原来', '又及', '及其', '及时', '及至', '双方', '反之', '反之亦然', '反之则', '反倒', '反倒是', '反应', '反手', '反映', '反而', '反过来', '反过来说', '取得', '取道', '受到', '变成', '古来', '另一个', '另一方面', '另外', '另悉', '另方面', '另行', '只当', '只怕', '只是', '只有', '只消', '只要', '只限', '叫做', '召开', '叮咚', '叮当', '可以', '可好', '可是', '可能', '可见', '各个', '各人', '各位', '各地', '各式', '各种', '各级', '各自', '合理', '同一', '同时', '同样', '后来', '后者', '后面', '向使', '向着', '否则', '吧哒', '呆呆地', '呜呼', '周围', '呵呵', '呼哧', '呼啦', '咱们', '哈哈', '哎呀', '哎哟', '哗啦', '哪个', '哪些', '哪儿', '哪天', '哪年', '哪怕', '哪样', '哪边', '哪里', '哼唷', '唯有', '啊呀', '啊哈', '啊哟', '啪达', '啷当', '喔唷', '嗡嗡', '嘎嘎', '嘎登', '嘿嘿', '因为', '因了', '因此', '因着', '因而', '固然', '在下', '在于', '坚决', '坚持', '基于', '基本', '基本上', '处在', '处处', '处理', '复杂', '多么', '多亏', '多多', '多多少少', '多多益善', '多少', '多年前', '多年来', '多数', '多次', '够瞧的', '大不了', '大举', '大事', '大体', '大体上', '大凡', '大力', '大多', '大多数', '大大', '大家', '大张旗鼓', '大批', '大抵', '大概', '大略', '大约', '大致', '大都', '大量', '大面儿上', '失去', '奋勇', '她们', '她是', '她的', '好在', '好的', '好象', '如上', '如上所述', '如下', '如今', '如何', '如其', '如前所述', '如同', '如常', '如是', '如期', '如果', '如次', '如此', '如此等等', '如若', '始而', '姑且', '存在', '存心', '孰料', '孰知', '宁可', '宁愿', '宁肯', '它们', '它们的', '它是', '它的', '安全', '完全', '完成', '实现', '实际', '宣布', '容易', '密切', '对于', '对应', '对待', '对方', '对比', '将才', '将要', '将近', '少数', '尔后', '尔尔', '尔等', '尚且', '尤其', '就地', '就是', '就是了', '就是说', '就此', '就算', '就要', '尽可能', '尽如人意', '尽心尽力', '尽心竭力', '尽快', '尽早', '尽然', '尽管', '尽管如此', '尽量', '局外', '居然', '届时', '属于', '屡屡', '屡次', '屡次三番', '岂但', '岂止', '岂非', '川流不息', '左右', '巨大', '巩固', '差一点', '差不多', '已矣', '已经', '巴巴', '帮助', '常常', '常言说', '常言说得好', '常言道', '平素', '年复一年', '并不', '并不是', '并且', '并排', '并无', '并没', '并没有', '并肩', '并非', '广大', '广泛', '应当', '应用', '应该', '庶乎', '庶几', '开外', '开始', '开展', '引起', '弹指之间', '强烈', '强调', '归根到底', '归根结底', '归齐', '当下', '当中', '当儿', '当前', '当即', '当口儿', '当地', '当场', '当头', '当庭', '当时', '当然', '当真', '当着', '形成', '彻夜', '彻底', '彼时', '彼此', '往往', '待到', '很多', '很少', '後来', '後面', '得了', '得出', '得到', '得天独厚', '得起', '心里', '必定', '必将', '必然', '必要', '必须', '快要', '忽地', '忽然', '怎么', '怎么办', '怎么样', '怎奈', '怎样', '怎麽', '急匆匆', '怪不得', '总之', '总是', '总的来看', '总的来说', '总的说来', '总结', '总而言之', '恍然', '恐怕', '恰似', '恰好', '恰如', '恰巧', '恰恰', '恰恰相反', '恰逢', '您们', '您是', '惟其', '惯常', '意思', '愤然', '愿意', '慢说', '成为', '成年', '成年累月', '成心', '我们', '我是', '我的', '或则', '或多或少', '或是', '或曰', '或者', '或许', '战斗', '截然', '截至', '所以', '所在', '所幸', '所有', '所谓', '才能', '扑通', '打从', '打开天窗说亮话', '扩大', '抑或', '抽冷子', '拦腰', '按时', '按期', '按照', '按理', '按说', '挨个', '挨家挨户', '挨次', '挨着', '挨门挨户', '挨门逐户', '换句话说', '换言之', '据实', '据悉', '据我所知', '据此', '据称', '据说', '掌握', '接下来', '接着', '接著', '接连不断', '放量', '故意', '故此', '故而', '敞开儿', '敢于', '敢情', '整个', '断然', '方便', '方才', '方能', '方面', '旁人', '无宁', '无法', '无论', '既往', '既是', '既然', '日复一日', '日渐', '日益', '日臻', '日见', '时候', '昂然', '明显', '明确', '是不是', '是以', '是否', '是的', '显然', '显著', '普通', '普遍', '暗中', '暗地里', '暗自', '更为', '更加', '更进一步', '曾经', '替代', '最后', '最大', '最好', '最後', '最近', '最高', '有些', '有关', '有利', '有力', '有及', '有所', '有效', '有时', '有点', '有的', '有的是', '有着', '有著', '朝着', '本人', '本地', '本着', '本身', '权时', '来不及', '来得及', '来看', '来着', '来自', '来讲', '来说', '极为', '极了', '极其', '极力', '极大', '极度', '极端', '构成', '果然', '果真', '某个', '某些', '某某', '根据', '根本', '格外', '次第', '欢迎', '正值', '正在', '正如', '正巧', '正常', '正是', '此中', '此后', '此地', '此处', '此外', '此时', '此次', '此间', '毋宁', '每个', '每天', '每年', '每当', '每时每刻', '每每', '每逢', '比及', '比如', '比如说', '比方', '比照', '比起', '比较', '毕竟', '毫不', '毫无', '毫无例外', '毫无保留地', '沙沙', '没奈何', '没有', '沿着', '注意', '深入', '清楚', '满足', '漫说', '然则', '然后', '然後', '然而', '照着', '牢牢', '特别是', '特殊', '特点', '犹且', '犹自', '独自', '猛然', '猛然间', '率尔', '率然', '现代', '现在', '理应', '理当', '理该', '瑟瑟', '甚且', '甚么', '甚或', '甚而', '甚至', '甚至于', '用来', '由于', '由是', '由此', '由此可见', '略为', '略加', '略微', '白白', '的确', '的话', '皆可', '目前', '直到', '直接', '相似', '相信', '相反', '相同', '相对', '相对而言', '相应', '相当', '相等', '省得', '看上去', '看出', '看到', '看来', '看样子', '看看', '看见', '看起来', '真是', '真正', '眨眼', '着呢', '矣乎', '矣哉', '知道', '确定', '碰巧', '社会主义', '积极', '移动', '究竟', '穷年累月', '突出', '突然', '立刻', '立即', '立地', '立时', '立马', '竟然', '竟而', '第二', '等到', '等等', '策略地', '简直', '简而言之', '简言之', '类如', '精光', '紧接着', '累年', '累次', '纯粹', '纵令', '纵使', '纵然', '练习', '组成', '经常', '经过', '结合', '结果', '绝不', '绝对', '绝非', '绝顶', '继之', '继后', '继续', '继而', '维持', '综上所述', '缕缕', '罢了', '老大', '老是', '老老实实', '考虑', '而且', '而况', '而又', '而后', '而外', '而已', '而是', '而言', '而论', '联系', '联袂', '背地里', '背靠背', '能否', '能够', '自个儿', '自从', '自各儿', '自后', '自家', '自己', '自打', '自身', '至于', '至今', '至若', '般的', '良好', '若夫', '若是', '若果', '若非', '范围', '莫不', '莫不然', '莫如', '莫若', '莫非', '获得', '藉以', '虽则', '虽然', '虽说', '行为', '行动', '表明', '表示', '要不', '要不是', '要不然', '要么', '要是', '要求', '规定', '觉得', '譬喻', '譬如', '认为', '认真', '认识', '许多', '论说', '设使', '设或', '设若', '诚如', '诚然', '话说', '该当', '说明', '说来', '说说', '请勿', '诸位', '诸如', '谁人', '谁料', '谁知', '豁然', '贼死', '赖以', '赶快', '赶早不赶晚', '起先', '起初', '起头', '起来', '起见', '起首', '趁便', '趁势', '趁早', '趁机', '趁热', '趁着', '越是', '路经', '转动', '转变', '转贴', '轰然', '较为', '较之', '较比', '达到', '达旦', '迅速', '过于', '过去', '过来', '运用', '近几年来', '近年来', '近来', '还是', '还有', '还要', '这一来', '这个', '这么', '这么些', '这么样', '这么点儿', '这些', '这会儿', '这儿', '这就是说', '这时', '这样', '这次', '这点', '这种', '这般', '这边', '这里', '这麽', '进入', '进去', '进来', '进步', '进而', '进行', '连同', '连声', '连日', '连日来', '连袂', '连连', '迟早', '迫于', '适应', '适当', '适用', '逐步', '逐渐', '通常', '通过', '造成', '遇到', '遭到', '遵循', '遵照', '避免', '那个', '那么', '那么些', '那么样', '那些', '那会儿', '那儿', '那时', '那末', '那样', '那般', '那边', '那里', '那麽', '部分', '鄙人', '采取', '里面', '重大', '重新', '重要', '鉴于', '针对', '长期以来', '长此下去', '长线', '长话短说', '问题', '间或', '防止', '附近', '陈年', '限制', '陡然', '除了', '除却', '除去', '除外', '除开', '除此', '除此之外', '除此以外', '除此而外', '除非', '随后', '随时', '随着', '随著', '隔夜', '隔日', '难得', '难怪', '难说', '难道', '难道说', '集中', '需要', '非但', '非常', '非徒', '非得', '非特', '非独', '顶多', '顷刻', '顷刻之间', '顷刻间', '顺着', '顿时', '风雨无阻', '首先', '马上', '高低', '高兴', '默然', '默默地', '12', 'li', 'ng昉', 'zxfitl'] not in stop_words.
'stop_words.' % sorted(inconsistent))
(752476, 20000)
test=tf_idf.transform(test_data)
为了增加聚类速度,使用minibatchkmeans,由于sklearn用于实验,如果向工业应用,进一步提高速度,可使用elkan K-Means,两边之和大于第三边减少计算距离运算。
from sklearn.cluster import MiniBatchKMeans
k=MiniBatchKMeans(
init='k-means++',
batch_size=10,
n_clusters=10)
result=k.fit(test)
pre=result.labels_
print(len(pre))
print(len(test_label))
677229
677229
聚类效果评价标准 :纯度,RI兰德基数,ARI调整兰德基数
from sklearn.metrics import adjusted_rand_score,rand_score
ari_score=adjusted_rand_score(test_label,pre)
ri_score=rand_score(test_label,pre)
print(ari_score)
print(ri_score)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/metrics/cluster/_supervised.py:389: RuntimeWarning: overflow encountered in long_scalars
return 2. * (tp * tn - fn * fp) / ((tp + fn) * (fn + tn) +
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/metrics/cluster/_supervised.py:390: RuntimeWarning: overflow encountered in long_scalars
(tp + fp) * (fp + tn))
-1.8037125749433274
0.4364017709049443
无监督聚类评价标准 silhouete_score 轮廓系数,由于计算过慢,没有增加