利用word2vec创建中文主题词典——以网络暴力关键词为例

  • 本文主要是记录一下自己过滤分类信息的一个步骤。
  • 主要目的是从爬取的素材中得到一个集中、有效的、有关网络暴力的中文词库。
  • 主要思路是将已分词的素材 source.txt 通过 word2vec 训练出一个模型 vectors.bin,再把人工挑选的种子库 feed.txt 中的种子输入模型,得到相似的词,最后获得词库。

目录

  • 文本预处理
    • 准备语料
    • 构建种子库
  • Word2vec
    • 模拟Linux环境(Cygwin)
    • word2vec模型训练

文本预处理

我在本篇文章中使用的是从新浪微博中爬取的网友有关网暴态度倾向的材料,总数约有90万条记录,包括用户名、微博内容、发布时间等属性(UTF-8编码)。

文本的预处理主要包括:

  1. 语料的初步过滤、去除特殊字符、特殊表情文本化和分词;
  2. 种子库的人工采集和同义联想。

准备语料

我使用的Excel表格来存放素材,具体结构如下:

来源/用户名 内容
罗百辉:从0到1直播带货,从1到100打好营销这张牌 给到观众的体验会更好,其次就是直播支架和补光灯,这是必备的配置。常用设备:手机、支架、补光灯、背景、T台、礼品桌、笔记本电脑、网络、挂通、熨烫机等4产品选款产品可以是新款上市、季末清仓、反季促销,根据
许可馨还要点脸吗?为啥十年教育出一个“人渣” 更是坑自己。许可馨最后会有怎样的结局,目前她的微博已经被“查封”,她的父母也被很多的网友“人肉”搜索,今后会何去何从,我们根本不关心。但不过她再次给我们提出了思考,这些孩子为何会这么优越呢?在个
肖战风波后首度发博翻车?后援会凌晨声明,谴责黑粉引导舆论骂战 明粉丝,却有人长期冒充他的粉丝蓄意发布恶意言论,以博取关注从中获利,也再次呼吁大家抵制这种行为,勿被恶意人士利用,但也有网友觉得后援会此番是在洗白,称长期有人这么做,是想把227事件甩锅到黑粉
…… ……

根据肉眼判断一些结构化的短语,如一些粉丝的反黑站微博会固定带有【网暴举报+拉黑+禁止人身攻击】类似的内容,但是实质内容与网暴无关。所以我们利用excel的筛选功能过滤这些无效内容。

由于excel处理文本速度很慢(尤其是这种几十万的数据),所以我们将【内容】复制到记事本中处理,得到 pre_source.txt 文件。

可以去除无关的标点符号、表情符号等,对于有特定表达形式和含义的表情(如、、、等)可以用其对应的文本代替。

最后我们利用 python 中的 jieba 来对文本进行分词处理。
具体代码如下:

import jieba

fR = open('pre_ource.txt', 'r', encoding='UTF-8')

sent = fR.read()
sent_list = jieba.cut(sent)

fW = open('source.txt', 'w', encoding='UTF-8')//将分词结果输出到"source.txt"中
fW.write(' '.join(sent_list))

fR.close()
fW.close()

最后的效果大概如下:

source.txt
给 到 观众 的 体验 会 更好 其次 就是 直播 支架 和 补 光灯 这是 必备 的 配置 常用 设备 手机 支架 补 光灯 背景 T台 礼品 桌 笔记本电脑 网络 挂通 熨烫 机等 产品 选款 产品 可以 是 新款 上市 季末 清仓 反季 促销 根据
更是 坑 自己 许可 馨 最后 会 有 怎样 的 结局 目前 她 的 微博 已经 被 查封 她 的 父母 也 被 很多 的 网友 人 肉 搜索 今后 会 何去何从 我们 根本 不 关心 但 不过 她 再次 给 我们 提出 了 思考 这些 孩子 为何 会 这么 优越 呢 在 个
非常 多 的 女生 也 非常 喜欢 他 可是 人红 是非 多猎 鞠婧 祎 曾经 被 曝光 不止 一 莆次 在 现场 耍 匝 大牌 不 知道 为什么 总有 黑粉 和 营销 兜 号 组团 来 黑手 他 可能 真的 虑 是因为 车基恃于
……

构建种子库

种子库的构建很简单,就是人工观察内容中与网暴有关的记录,并从中确定出能最大程度还原网暴记录且带来噪声较少的关键词。
种子数量大概几十个左右,将来用于从种子得到更多的相似词语,所以各种子间要确保一定的独立性,当然也要考虑词语的不同形式(如“脑瘫”、“nt”、“NT”)。
最后,我们得到了种子库 feed.txt

feed.txt
人肉(?)
黑粉
人身攻击
网络暴力
喷子
键盘侠
……

  • 文件中“人肉”特殊标记,是因为“人肉”会带来较大的噪声,但是它又是网络暴力的重要形式之一,所以针对这个种子的衍生需要进一步的探究。

Word2vec

模拟Linux环境(Cygwin)

因为word2vec需要在Linux环境下运行,所以在Windows系统中,我们需要模拟出Linux的操作环境。其中,Cygwin是最常用的模拟软件之一。
在Cygwin的安装过程中,注意在【选择要安装的包】步骤中,选择Devel与Utils模块。如下图所示:
利用word2vec创建中文主题词典——以网络暴力关键词为例_第1张图片
安装完毕后,进入 Cygwin 的安装目录,点开 /home/ 可以看到自己系统名称的文件夹,在其中可以存放 word2vec 和素材文件,对应在 linux 的默认路径下。
利用word2vec创建中文主题词典——以网络暴力关键词为例_第2张图片

word2vec模型训练

下载C语言版的 word2vec,地址:https://github.com/svn2github/word2vec
下载解压后把文件夹复制到 Cygwin 相关目录下,如上图。再将分词后的素材文件 source.txt 复制到 word2vec-master 文件夹下。

打开 Cygwin,输入命令,打开 word2vec 文件夹。

SHTR@LAPTOP-0QSOUKLB ~
$ cd word2vec-master/

配置 word2vec

SHTR@LAPTOP-0QSOUKLB ~/word2vec-master
$ make
make: 对“all”无需做任何事。

(可能大家的提示和我不一样,建议先忽略报错,继续做下去)

开始训练模型

SHTR@LAPTOP-0QSOUKLB ~/word2vec-master
$ ./word2vec -train source.txt -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1  

随即,word2vec 开始模型训练。

训练结束后结果显示如下:

Starting training using file source.txt
Vocab size: 146678
Words in train file: 42853097
Alpha: 0.000006  Progress: 99.99%  Words/thread/sec: 39.73k
real    38m4.640s
user    269m47.171s
sys     0m20.186s

最后,加载训练好的模型 vectors.bin

SHTR@LAPTOP-0QSOUKLB ~/word2vec-master
$ ./distance vectors.bin

加载后,出现以下提示,输入种子词,即可得到相似的词。

Enter word or sentence (EXIT to break): sb

Word: sb  Position in vocabulary: 2923

                                              Word       Cosine distance
------------------------------------------------------------------------
                                            煞笔                0.669515
                                            憨批                0.651499
                                            智障                0.608910
                                            玩意                0.575425
                                                tm              0.566943
                                               妈               0.551868
                                            傻批                0.548631
                                         神经病         0.546263
                                               傻               0.539214
                                            弱智                0.533152
                                         玩意儿         0.532617
                                         没脑子         0.521820
                                            恶心                0.509597
                                               tmd              0.507793
                                                md              0.506143
                                            有病                0.500755
                                            傻狗                0.499303
                                            脑残                0.497105
                                         真服了         0.491169
                                            沙币                0.484326
                                            无语                0.472168
                                            天天                0.471431
                                               ctm              0.470460
                                            尼玛                0.469824
                                            死妈                0.468571
                                            辣鸡                0.467711
                                              nmsl              0.466579
                                            老子                0.459713
                                                fw              0.459623
                                         没妈养         0.458109
                                                sl              0.457547
                                            随主                0.457141
                                                TM              0.456615
                                            脑瘫                0.455201
                                               cnm              0.454635
                                               TMD              0.451271
                                            他妈                0.450716
                                            母狗                0.449706
                                            孤儿                0.448423
                                            垃圾                0.448065
Enter word or sentence (EXIT to break): 网络

Word: 网络  Position in vocabulary: 13

                                              Word       Cosine distance
------------------------------------------------------------------------
                                            暴力                0.802902
                                            校园                0.577842
                                         施暴者         0.529357
                                         互联网         0.511295
                                            网路                0.477932
                                            舆论                0.477668
                                            霸凌                0.475106
                                         受害者         0.465842
                                            可怕                0.465204
                                            网暴                0.459172
                                      社会舆论          0.449941
                                            网民                0.434657
                                            伤害                0.427830
                                            网上                0.425253
                                         抑郁症         0.420694
                                            欺凌                0.417121
                                            抑郁                0.416275
                                            施加                0.412934
                                      以暴制暴          0.412061
                                      暴力事件          0.411169
                                      家庭暴力          0.411111
                                            恐怖                0.408639
                                            社会                0.403121
                                            恶评                0.402864
                                      无形之中          0.397039
                                            遭受                0.394655
                                            狂欢                0.392182
                                            语言                0.391798
                                            无辜                0.390650
                                            谩骂                0.390484
                                      虚拟世界          0.390321
                                            事件                0.389930
                                         何时休         0.388254
                                      始作俑者          0.385578
                                            行为                0.381619
                                         实施者         0.380958
                                         无休止         0.380143
                                         加害者         0.378034
                                            讨伐                0.374142
                                            帮凶                0.373178

由此,就可以获得相近词,从而拓展词库了。

当然最后可以通过脚本或者代码来实现对种子库文件 feed.txt 的读取来批量得到对应的相似词,从而避免人工一个一个词查询。

你可能感兴趣的:(word2vec,文本分类,数据挖掘,自然语言处理,分类算法)