2. 江苏安全技术职业学院 网络与信息安全学院, 徐州 221011
2. School of Network and Information Security, Jiangsu College of Safety Technology, Xuzhou 221011, China
安全生产事关生命财产安全. 通过对安全生产事故划分, 对安全生产事故发生的行业、时间、地域、原因、教训等多个维度展开大数据分析, 采用语义分析技术, 从客观的数据中挖掘安全生产事故的特点与规律, 为安全生产的应急管理提供科学决策具有重要技术意义和参考价值. 本文旨在通过NLP技术实现安全生产事故大数据分析. 图1是安全生产事故分类的实现流程, 通过该流程实现安全生产事故的分类. 准备大量的安全生产案例作为语料, jieba分词工具实现语料分词, 将分词后的单元输入Word2Vec模型获得词向量, 通过K-means聚类对词向量实现聚类实现安全生产事故的分类[1].
1 文本表示
文本表示是把字词处理成向量或矩阵, 以便计算机能进行处理. 文本表示是自然语言处理的开始环节. 目前常用的文本表示模型有: 词袋模型、主题模型和词嵌入模型等. 词袋模型主要有One-Hot (独热编码)、n-gram、TF-IDF. 本例采用One-Hot 编码.
One-Hot编码, 又称一位有效编码, 其方法是使用N位状态寄存器来对N个状态进行编码, 每个状态都有它独立的寄存器位, 并且在任意时候, 其中只有一位有效. 本质上是用一个只含一个1, 其他都是0的向量来唯一表示词语. 表1中安全生产事故性质分类为例(仅考虑死亡人数), 死亡人数1–9的一种One-Hot编码如表1.
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是根据某个词计算它前后出现某几个词的各个概率.
CBOW模型一般采用3层神经网络结构, 分为输入层, 隐藏层(嵌入层)和输出层(Softmax层). CBOW模型输入上下文词的One-Hot编码, 然后连接一个全连接层, 再连接若干个层, 最后接Softmax分类器, 再通过梯度优化和反向传播让模型逼近最小误差就可以得到词向量. 由于神经网络模型训练中生成的词汇往往数万以上, 这大大降低了神经网络的训练速度, 本例选用CBOW+负采样提高训练速度, 该组合具有运算快的特点. 任何采样算法应该保证频次越高的样本越容易被采样出来. 负采样的本质就是每次让一个训练样本更新神经网络的部分权重. CBOW模型中词向量的数量大, 神经网络则有庞大的权重数, 不同于原本每个训练样本更新所有的权重, 负采样每次让一个训练样本仅仅更新一部分的权重, 其他权重全部固定, 这样即可以减少计算量, 同时在一定程度上增加随机性, 降低了损失值. 具体代码中loss函数定义如下:
loss=tf.reduce_mean(tf.nn.nce_loss(weights=nce_weights, 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实现Word2VecGensim是一款开源的第3方Python工具包, 用于无监督地学习到文本隐层的主题向量表达. 主要用于主题建模和文档相似性处理, 在获取单词的词向量等任务中非常有用. Gensim中集成有CBOW+负采样算法, Word2Vec 相关的API都在包gensim.models.Word2Vec中. 本例中设置的主要参数如表2.
2.4 词向量实验结果
实验基于Tensorflow和Python3.7, 取样1000个安全生产案例, 对100个词向量可视化结果如图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}最小化平方误差为
$\begin{split} &{{E}} = \displaystyle\sum\limits_{i = 1}^{{K}} {\sum\limits_{x \subseteq {c_i}}^{} {} } \mathop {||x - \mathop {\rm{\mu }}\nolimits_{{i}} ||}\nolimits_2^2 \\ &\left( {{\text{其中}}\mathop {\rm{\mu }}\nolimits_{\rm{i}} = \dfrac{1}{{{\rm{|}}{{{C}}_{{i}}}{\rm{|}}}}\displaystyle\sum\nolimits_{{{X}} \subseteq {C_{{i}}}} } \right) \end{split}$ | (1) |
其中, μi是第K个聚类的均值向量. 每个类的畸变程度等于该类重心与其内部成员位置距离的平方和. 若类内部的成员彼此间越紧凑则类的畸变程度越小, 反之, 若类内部的成员彼此间越分散则类的畸变程度越大. 求解成本函数最小化的参数就是一个重复配置每个类包含的观测值, 并不断移动类重心的过程. 其算法如图4.
3.2 半监督学习初始化聚类中心由于安全生产事故分类, 如重大事故指死亡10人以上, 30人以下或重伤50以上, 100以下; 或直接经济损失5000万以上, 1亿元以下. 分类中死亡、重伤人数, 特别是财产损失数值范围很大, 特征空间会变得非常稀疏. 为了解决这个问题, 可通过线性回归模型, 利用半监督学习, 即用已有的词向量确定伤害与死亡、重伤较少人数(取30人以下)的关联度X1i、X2i和作为标签, 令相应的权重值分别为W1i、W2i, 把经济损失与伤害人数关联度Bi视为偏移量, 线性回归的预测函数为:
$ {{f}}\left( {{x}} \right) = {{{W}}_{{{1i}}}}{{{X}}_{{{1i}}}} + {{{W}}_{{{2i}}}}{{{X}}_{{2}}}{{i}} + {{{B}}_{{i}}} $ | (2) |
利用已有的样本训练式(2)可确定相应的学习参数, 如表3. 如对于特大事故, 利用学习好的参数W1i、W2i, 再利用预测函数(2)和大量样本确定X1n、X1n和Bn[14-16].
对4类安全事故, 聚类簇数K=4, 算法开始均值向量取值如下:
$\left\{ {\; \begin{split} &{{\rm{\mu }}_{\rm{1}}} = \left\{ \dfrac{{\rm{1}}}{{\rm{3}}}\displaystyle\sum\limits_{i = {\rm{0}}}^{\rm{2}} {{X_{1i}}} ,\dfrac{{\rm{1}}}{{\rm{3}}}\displaystyle\sum\limits_{i = {\rm{0}}}^{\rm{2}} {{X_{2i}}} ,\dfrac{{\rm{1}}}{{\rm{3}}}\displaystyle\sum\limits_{i = {\rm{0}}}^{\rm{2}} {{B_i}} \right\} \\ &{{\rm{\mu }}_{\rm{2}}} = \left\{ \dfrac{{\rm{1}}}{{\rm{7}}}\displaystyle\sum\limits_{i = {\rm{3}}}^{\rm{9}} {{X_{1i}}} ,\dfrac{{\rm{1}}}{{\rm{7}}}\displaystyle\sum\limits_{i = {\rm{3}}}^{\rm{9}} {{X_{2i}}} ,\dfrac{{\rm{1}}}{{\rm{7}}}\displaystyle\sum\limits_{i = {\rm{3}}}^{\rm{9}} {{B_i}} \right\} \\ &{{\rm{\mu }}_{\rm{3}}} = \left\{ \dfrac{{\rm{1}}}{{{\rm{30}}}}\displaystyle\sum\limits_{i = {\rm{10}}}^{{\rm{29}}} {{{\rm{X}}_{1i}}} ,\dfrac{{\rm{1}}}{{{\rm{30}}}}\displaystyle\sum\limits_{i = {\rm{10}}}^{{\rm{29}}} {{{{X}}_{2i}}} ,\dfrac{{\rm{1}}}{{{\rm{30}}}}\displaystyle\sum\limits_{i = {\rm{10}}}^{{\rm{29}}} {{B_i}} \right\} \\ &{{\rm{\mu }}_{\rm{4}}} = \left\{ {{{X}}_{1n,}}{\rm{ }}{{{X}}_{2n,}}{\rm{ }}{{{B}}_{{n}}}\right\} \end{split}} \right. $ |
将μ1、μ2、μ3、μ4作为初始化聚类中心, 然后按照图4中算法计算, 得到最终分类.
3.3 K-means算法实验结果取1000个安全生产事故为样本, 把样本的词向量作为聚类的输入, 按照上述实验, 图示化结果如图5. 图中, 绿色为特大事故, 蓝色为重大事故, 黄色为较大事故, 红色为一般事故。通过得到的词向量和上述聚类算法, 较好的实现安全生产事故分类. 在样本数万时, 分类正确率达93%以上. 同时该模型对安全生产事故开展多个维度数据分析也有很好的借鉴意义.
[1] |
易高翔, 魏利军, 吴宗之, 等. 全国安全生产调查信息系统设计与实现. 中国安全生产科学技术, 2009, 5(4): 60-63. |
[2] |
Rong X. Word2Vec parameter learning explained. arXiv preprint arXiv: 1411.2738, 2014.
|
[3] |
Zhang W, Qu CF, Ma L, et al. Learning structure of stereoscopic image for no- reference quality assessment with convolutional neural network. Pattern Recognition, 2016, 59: 176–187.
|
[4] |
Mansoor HH, Shaker SH. Using classiffcation technique to SMS spam filter. International Journal of Innovative Technology and Exploring Engineering, 2019, 10(8): 56-62. |
[5] |
李金洪. 深度学习之TensorFlow入门、原理与进阶实战. 北京: 机械工业出版社, 2019. 279–296.
|
[6] |
李孟全. TensorFlow与自然语言处理应用. 北京: 清华大学出版社, 2019. 77–120.
|
[7] |
杨楠, 李亚平. 基于Word2Vec模型特征扩展的Web搜索结果聚类性能的改进. 计算机应用, 2019, 39(6): 1701-1706. DOI:10.11772/j.issn.1001-9081.2018102106 |
[8] |
蒋振超, 李丽双, 黄德根. 基于词语关系的词向量模型. 中文信息学报, 2017, 31(3): 25-31. |
[9] |
孙佳伟, 李正华, 陈文亮, 等. 基于词模式嵌入的词语上下位关系分类. 北京大学学报(自然科学版), 2019, 55(1): 1-7. |
[10] |
Rubin TN, Chambers A, Smyth P, et al. Statistical topic models for multi-label document classification. Machine Learning, 2012, 88(1–2): 157-208. DOI:10.1007/s10994-011-5272-5 |
[11] |
Mikolov T, Sutskever I, Chen K, et al. Distributed representations of words and phrases and their compositionality. Proceedings of the 26th International Conference on Neural Information Processing Systems. Lake Tahoe, NV, USA. 2013. 3111–3119.
|
[12] |
Zheng XQ, Chen HY, Xu TY. Deep learning for Chinese word segmentation and POS tagging. Proceedings of 2013 Conference on Empirical Methods in Natural Language Processing. Seattle, WA, USA. 2013. 647–657.
|
[13] |
张克君, 史泰猛, 李伟男, 等. 基于统计语言模型改进的Word2Vec优化策略研究. 中文信息学报, 2019, 33(7): 11-19. DOI:10.3969/j.issn.1003-0077.2019.07.002 |
[14] |
王千, 王成, 冯振元, 等. K-means聚类算法研究综述. 电子设计工程, 2012, 20(7): 21-24. DOI:10.3969/j.issn.1674-6236.2012.07.008 |
[15] |
周志华. 机器学习. 北京: 清华大学出版社, 2016. 197–224.
|
[16] |
周爱武, 于亚飞. K-Means聚类算法的研究. 计算机技术与发展, 2011, 21(2): 62-65. DOI:10.3969/j.issn.1673-629X.2011.02.016 |