为了更直观地比较分析效果,本书选取知乎人工智能话题下2016—2018年的数据作为研究对象。一方面,知乎用户数量多,且层次明显的话题结构机制使得同种话题的问题和答案能够聚集在一起,让研究某个特定话题下用户的关注热点提供了便利。另一方面,知乎采用用户关注机制来对信息和知识进行分享与传递,其问题和回答都比一般的问答社区质量高很多,所以研究知乎话题的文本数据很有价值。
由于文本数据本身非结构化、庞杂等特点,加之LDA模型和Kmeans算法对输入数据有一定要求,所以需要预先对这些数据进行预处理。主要从三个方面进行数据的预处理:
数据清洗:由于知乎话题问答的开放性,所以即使在一个意义比较明确的问题下也会有不少相关回答是无效的信息,加之爬虫本身在抓取时不能确保完全准确爬取,所以需要对获取到的数据进行清洗,主要是通过人工手段去重以及去除部分不相关的文本信息,进一步提高样本与人工智能话题的切合度。
中文分词:由于中文文本数据不像英文单词分布那样都用空格隔开,词与词之间没有明显的界线区分,所以需要借助分词词典等工具对文本数据进行有效切割。考虑到分词过程需要对词性进行标注,从而根据词性进行有效提取,本书主要借助Python中的分词工具jieba来完成分词,分词法有基于词典和基于概率(如HMM、最大熵模型、条件随机场等)的分词法,本书采用的是基于词典的分词法。
特征提取:这一部分主要是从分好的词中提取特征,构建词的向量空间,形成文档的词向量。在特征提取过程中采用词频过滤的方法对词汇的特征空间进一步优化,减小稀疏性。
9.1.1.1 语料采集与数据清洗
为了能够采集到足量的知乎文本数据,本书采用Python爬虫对知乎人工智能话题组数据进行爬取,经过去除部分干扰如HTML标签等无效信息之后,从而对HTML源码中的有效信息进行提取,形成初步的研究数据。
爬取数据范围:知乎人工智能话题组2016—2018这三年的数据,包括2211条问题以及27003条答案信息,经过初步的数据清洗,去除重复的样本以及部分不相关数据后剩余23952条答案信息。其中答案2016年6064条,2017年9255条,2018年8634条。问题数量保持不变一共有2211条。问题的信息包括问题内容、关注人数、被浏览数量以及回答数量四个字段。答案信息主要有答案内容、编辑日期、点赞数以及评论数这些字段。经过初步的人工筛选去重之后,再对这些数据进行进一步的提取以及分词等工作,使得数据能够比较好的得到展现,也有利于代入模型得到准确的结果。
9.1.1.2 分词
文本的分词采用Python中比较常用的中文分词库jieba进行,为了能有效地识别出人工智能领域的专有词汇,使用了搜狗人工智能词库作为专业词汇加入jieba词库中,同时使用了常用的中文停用词进行知乎文本的分词,由于停用词本身不会很完整地把所有无意义的词分离出来,所以在分词过程中人工加入一些停用词,比如“其实”“干嘛”等。其次,由于搜狗人工智能词库也无法完全识别很多专业性高或者比较新颖的词,在预先对文本数据进行人工和机器分析的基础上,把出现频率加高的且jieba分词库没有的词添加到词库中,比如“智能家居”“智慧城市”“无人驾驶”“指纹识别”等。然后用jieba.posseg对词性进行标注,进行词性的选择。分词主要去除副词以及动词等语义模糊而且同时常在文档中出现的词语,这些词会对模型的结果产生比较大的影响,去掉这些词汇等进一步加强名词、动名词等在词库中的权重,使得模型主题训练时间变小,同时主题提取效果更加清晰。分词流程如图9-1所示。
在实现分词的过程中,发现抓取到的数据中有不少词汇是英文词或者英文缩写,所以在分词的同时加入了英文的停用词,把所有的英文转化为小写再利用停用词去掉干扰词。其次为进一步利用这些英文字符,把出现频率较高的人工智能领域的缩写词和英文转化为汉语,经过人工验证,对出现概率比较高的词汇通过转换,改为和原汉语中的表达,数据中常见英文词转化如表9-1所示。(www.daowen.com)
表9-1 英文词转换为中文词表
图9-1 jieba分词流程
9.1.1.3 基于词频的过滤
以停用词表过滤文本数据中的无效特征常用词是比较常用的文本过滤方法。考虑到知乎文本数据的多样性以及复杂性,停词表无法全面做到一些复杂符号或无用词汇的过滤,这些词汇数量众多但是出现频率极低,其中有不少是没有直接意义的,在模型构建过程中实际意义不大。同时也会增大词汇向量空间的稀疏性,降低模型主题提取效果,也会使得模型的训练时间和成本大大增加。所以本书同时采用了基于词频的过滤方法来进一步对词汇进行过滤,进一步优化提取文本数据。
以词频为y轴,词序号为x轴,绘制三年文本数据经过分词的词频图(见图9-2),可以发现文本词汇都具有比较明显长尾效应。其中2016—2018年三年中词频为1的词汇有超过1万个,词频为2的词汇都超过4000个。这两种词汇在所有词汇中的总占比超过了50%,大大增加了模型迭代的时间,给模型的建立过程带来了很多不必要的开销。
图9-2 2016—2018年词频分布图
因此,根据词频分析的结果,本书对分词的结果进行进一步过滤优化,过滤去除在样本数据中词频为1和词频为2的词,生成最终的模型文本输入数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。