基于Word2Vec词嵌入和聚类模型的安全生产事故文本案例分类①

2021-01-22 05:42吴德平
计算机系统应用 2021年1期
关键词:分词聚类编码

吴德平,华 钢

1(中国矿业大学 信息与控制工程学院,徐州 221008)

2(江苏安全技术职业学院 网络与信息安全学院,徐州 221011)

安全生产事关生命财产安全.通过对安全生产事故划分,对安全生产事故发生的行业、时间、地域、原因、教训等多个维度展开大数据分析,采用语义分析技术,从客观的数据中挖掘安全生产事故的特点与规律,为安全生产的应急管理提供科学决策具有重要技术意义和参考价值.本文旨在通过NLP 技术实现安全生产事故大数据分析.图1是安全生产事故分类的实现流程,通过该流程实现安全生产事故的分类.准备大量的安全生产案例作为语料,jieba分词工具实现语料分词,将分词后的单元输入Word2Vec模型获得词向量,通过K-means 聚类对词向量实现聚类实现安全生产事故的分类[1].

图1 安全生产事故分类实现流程

1 文本表示

文本表示是把字词处理成向量或矩阵,以便计算机能进行处理.文本表示是自然语言处理的开始环节.目前常用的文本表示模型有:词袋模型、主题模型和词嵌入模型等.词袋模型主要有One-Hot (独热编码)、n-gram、TF-IDF.本例采用One-Hot 编码.

One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效.本质上是用一个只含一个1,其他都是0 的向量来唯一表示词语.表1中安全生产事故性质分类为例(仅考虑死亡人数),死亡人数1-9 的一种One-Hot 编码如表1.

表1 One-Hot 编码示意

2 利用Word2Vec 实现词向量

2.1 分词

分词是实现中文文本词性标注、关键词抽取等功能.jieba 分词包是Python 中很好的分词组件,通过加载大量安全生产案例的文本文件,先基于词典分词,然后进行词性标注和发现新词,同时进行关键词提取完成分词.同时可使用jieba.suggest_freq(‘事故’,True)调节单个词语的词频,使“事故”能被分出来,提高分词效果[2-5].

2.2 CBOW 模型和负采样

Word2Vec 是Google 推出的用于获取词向量的工具包.Word2Vec 作为神经概率语言模型,采用两种模型(CBOW 和Skip-gram) 与两种方法(Hierarchical Softmax 和Negative Sampling)的组合.CBOW 是根据某个词前面的N个词或前后N个词计算某个词概率的模型,其模型如图2.Skip-gram 是根据某个词计算它前后出现某几个词的各个概率.

图2 CBOW 模型

CBOW 模型一般采用3 层神经网络结构,分为输入层,隐藏层(嵌入层)和输出层(Softmax 层).CBOW模型输入上下文词的One-Hot 编码,然后连接一个全连接层,再连接若干个层,最后接Softmax 分类器,再通过梯度优化和反向传播让模型逼近最小误差就可以得到词向量.由于神经网络模型训练中生成的词汇往往数万以上,这大大降低了神经网络的训练速度,本例选用CBOW+负采样提高训练速度,该组合具有运算快的特点.任何采样算法应该保证频次越高的样本越容易被采样出来.负采样的本质就是每次让一个训练样本更新神经网络的部分权重.CBOW 模型中词向量的数量大,神经网络则有庞大的权重数,不同于原本每个训练样本更新所有的权重,负采样每次让一个训练样本仅仅更新一部分的权重,其他权重全部固定,这样即可以减少计算量,同时在一定程度上增加随机性,降低了损失值.具体代码中loss 函数定义如下:

loss=tf.reduce_mean(tf.nn.nce_loss(weights=nce_we ights,biases=nce_biases,labels=train_labels,inputs=embed,num_sampled=num_sampled,num_classes=words_size)).

train_inputs 是中心词,train_label 是该中心词在滑动窗口内的上下文词.train_inputs 中会有连续n-1(n为滑动窗口大小)个元素是相同的.即同一中心词.embddings 是要学习的词向量的存储矩阵[6-13].

2.3 利用Gensim 实现Word2Vec

Gensim 是一款开源的第3 方Python 工具包,用于无监督地学习到文本隐层的主题向量表达.主要用于主题建模和文档相似性处理,在获取单词的词向量等任务中非常有用.Gensim 中集成有CBOW+负采样算法,Word2Vec 相关的API 都在包gensim.models.Word2Vec 中.本例中设置的主要参数如表2.

表2 Gensim 模型主要参数设定

2.4 词向量实验结果

实验基于Tensorflow 和Python3.7,取样1000 个安全生产案例,对100 个词向量可视化结果如图3.不难看出这些词向量以安全生产为主题.主题拟合较好,如发生、事故、经过、事故、原因等;同义词检测如年月日时语义相似度很高,数字的一致性检查很好.

图3 安全生产案例词向量可视化

3 K-means 聚类

3.1 K-means 聚类算法

K-means 算法是一种迭代型无监督学习聚类算法,采用距离作为相似性指标,从而发现给定数据集中的K个类,且每个类的中心是根据类中所有值的均值得到,每个类用聚类中心来描K-means 算法是一个重复移动类中心点的过程,把类的中心点,移动到其包含成员的平均位置,然后重新划分其内部成员.K是算法计算出的超参数,表示类的数量;K-means 可以自动分配样本到不同的类,但是不能决定究竟要分几个类,K必须是一个比训练集样本数小的正整数.对于词向量集D={X1,X2,···,Xm},K-means 算法针对聚类的分类C={C1,C2,···,Ck}最小化平方误差为

其中,μi是第K个聚类的均值向量.每个类的畸变程度等于该类重心与其内部成员位置距离的平方和.若类内部的成员彼此间越紧凑则类的畸变程度越小,反之,若类内部的成员彼此间越分散则类的畸变程度越大.求解成本函数最小化的参数就是一个重复配置每个类包含的观测值,并不断移动类重心的过程.其算法如图4.

3.2 半监督学习初始化聚类中心

由于安全生产事故分类,如重大事故指死亡10 人以上,30 人以下或重伤50 以上,100 以下;或直接经济损失5000 万以上,1 亿元以下.分类中死亡、重伤人数,特别是财产损失数值范围很大,特征空间会变得非常稀疏.为了解决这个问题,可通过线性回归模型,利用半监督学习,即用已有的词向量确定伤害与死亡、重伤较少人数(取30 人以下)的关联度X1i、X2i和作为标签,令相应的权重值分别为W1i、W2i,把经济损失与伤害人数关联度Bi视为偏移量,线性回归的预测函数为:

利用已有的样本训练式(2)可确定相应的学习参数,如表3.如对于特大事故,利用学习好的参数W1i、W2i,再利用预测函数(2)和大量样本确定X1n、X1n和Bn[14-16].

图4 K-means 聚类算法流程图

表3 事故性质与关联参数

对4 类安全事故,聚类簇数K=4,算法开始均值向量取值如下:

将μ1、μ2、μ3、μ4作为初始化聚类中心,然后按照图4中算法计算,得到最终分类.

3.3 K-means 算法实验结果

取1000 个安全生产事故为样本,把样本的词向量作为聚类的输入,按照上述实验,图示化结果如图5.图中,绿色为特大事故,蓝色为重大事故,黄色为较大事故,红色为一般事故。通过得到的词向量和上述聚类算法,较好的实现安全生产事故分类.在样本数万时,分类正确率达93%以上.同时该模型对安全生产事故开展多个维度数据分析也有很好的借鉴意义.

图5 安全生产事故分类图

猜你喜欢
分词聚类编码
一种傅里叶域海量数据高速谱聚类方法
HEVC对偶编码单元划分优化算法
住院病案首页ICD编码质量在DRG付费中的应用
基于知识图谱的k-modes文本聚类研究
基于数据降维与聚类的车联网数据分析应用
分词在英语教学中的妙用
基于模糊聚类和支持向量回归的成绩预测
结巴分词在词云中的应用
结巴分词在词云中的应用
论纪录片影像中的组合编码运用