中文文本向量化 + 聚类分析
一、背景
因为这段时间正好在和朋友准备比赛,赛题大概是基于交通事故的事故描述,进行文本多分类。实现将数据库中已有的原因分类不明确的事故进行重分类,修复数据。也为未来交警判责提供参考信息。
一直以来都没有真正做过nlp方向的建模,借此机会也把比赛过程记录一下,一方面分享给有需要的朋友,另一方面也可以在以后能够方便复习。也希望各位大佬可以指出不好的地方,让小弟也能得到提高。
上图是一个交通事故原因的分类代码值与所对应的描述。一共有几百类,如果要建模训练出可以分几百类的模型,已目前所拥有的样本量来看,远远不够,因此我们希望能够人工or自动的将这些类别归纳为某k类,但具体k为几呢,这是个不容易解决的问题。
也因为这个问题,本文诞生了。
所谓聚类,是将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。
相比看到这,加上标题,大家就知道本文的主题思路是个什么样子了。
对,就是
1、先将所有的分类描述文本内容,利用jieba分词(附加上内部统计的交通类词库)分词、并去掉停用词(构建停用词库)
2、扔进word2vec模型中训练,得到一个向量词袋。
3、再将所有的文本内容,用一个n维向量来代替
4、丢进k-means中,循环k=1至10,绘出手肘图,找到最佳k值
5、丢入所有文本内容预测,给每一个类别增加一个新的类别值
二、数据预处理
根据上面的步骤,第一步,我们是对文本内容进行分词:
#导包
import numpy as np
import pandas as pd
import sys
from gensim.models import word2vec
import os
import gensim
from gensim.models.word2vec import LineSentence
导入需要用到的包