logo资料库

第八届泰迪杯挑战赛垃圾论文.pdf

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
内容简介
文本分类问题
特征工程
二元语法
词袋模型
卡方检验
文本分类模型的筛选
交叉验证与网格寻优筛选模型
模型及其参数的筛选结果与T检验
文本分类模型的训练
模型选择与分析
模型训练
算法的底层实现与操作简介
稀疏矩阵的存取
多分类与类别不均衡
网格寻优的具体操作
贝叶斯分类器的某些设置
参数寻优算法
文本聚类与热度算法
特征工程
条件随机场分词器
停用词过滤与命名实体合并
词袋模型与PCA降维
文本聚类
DBSCAN原理
文本聚类与热度排行
内容归纳与关键句提取
PageRank与TextRank
热点问题归纳
底层实现
关于匹配算法的查询优化
截断奇异值分解降维
DBSCAN调参过程
答复相关性与完整性分析
答复相关性评价
词向量与one-hot编码法
词向量与CBOW模型
答复相关度计算
答复的完整度与可理解性
答复评价模型
底层优化算法
双数组字典树
搜索算法的并行实现
结束语
笔者的话
本文的缺点与不足
后续工作与展望
附录A
T检验表
BP神经网络解决分类问题
附录B
各分词器在MSR语料库中的结果对比
关注度下跌函数细节
“智能政务”中的文本挖掘:原理、实现与应用 摘要:本文主要讨论文本挖掘中的文本分类、热门问题挖掘以及文本相关性、完整性和可读性评价的原理、 算法与实现。文章采用了二元语法、词袋模型、卡方检验的方法,结合机器学习实现了文本自动分类;为了 挖掘热门问题,文章采用 DBSCAN 的方法对留言进行聚类,并通过留言的点赞数、反对数和时间跨度挖掘 出热门问题;为了给答复打分,文章结合词向量和关键句提取算法,度量了答复的相关性。再根据二元语法 与字典匹配,度量了答复的局部整体性与可读性。最后,结合两者即可评价留言答复的质量。为了贴近工程 实际,在每个问题最后,文章列举了某些底层的优化实现。 关键词:文本分类;机器学习;二元语法;词袋模型;文本聚类;词向量; Text Mining in Intelligent Government Affairs Management: Principle, Implementation and Application Abstract The present paper is mainly about the principle and implementation on texts classification, mining of hot spots as well as scoring of texts according their correlation, Integrality and readability. The paper adopts 2-gram, bag-of-words model and chi-square test to prepare the corpus. Then using machine learning algorithm, one could implement a classifier of texts. To deal with the hot-spots mining, DBSCAN clustering is deployed to cluster similar texts as a class. Then coming up a scoring model based on the number of agrees, disagree and time span to decide the hot-spots. Eventually, to calculate the relevance among texts, this article uses key-sentence extracting and word2vec method to calculate the similarity of texts. To scoring the integrality and readability, 2-gram and dictionary matching is adopted. Thus a scoring model based on both is proposed. In order to go in line with practice, this article will present some low-level implementation and optimization method. key words: texts classification;machine learning; 2-gram; bag-of-words; texts clustering; word2vec 练出一个能够自动分类的机器学习模型。为了实现这 一点,本文在前人工作的基础上 [6],使用效果极佳 的二元语法以及卡方检验,从而将非结构的文本转换 为结构化的特征向量。之后,文章从机器学习常用的 模型之中,采用 K 折交叉验证、网格寻优的方法筛 选出适合用于该问题的、常见的机器学习模型及其参 数,如图1所示: 1 内容简介 从 文 本 中 挖 掘 有 效 信 息, 是 自 然 语 言 处 理 (NLP)领域的重要问题。一般地,基于规则的挖 掘算法已经在 19 世纪 50 年代遭遇挫折。因此,在 文本挖掘问题中,业界通常采用基于统计方法的机器 学习,和隶属机器学习、使用神经网络模型的深度学 习。前者一般需要一个手工特征模板,对数据进行预 处理。后者则不然,其类似于“黑盒子”,通过神经 网络节点的训练,即可自动地提取出信息。使用文本 挖掘的方法,亦可以减轻网络问政工作人员的负担。 在处理群众留言时,首先要对留言进行归类。这 一点可以在已有的、分好类的留言详情语料库中,训 1
为了评价留言答复的相关性,显然需要判断答复 与留言详情之间的相似度,并以此为依据度量相关 性。因此,本文采用了词向量的方法,结合两者的关 键句,找出了答复与留言的相似度,从而评价相关 性。为了衡量留言的完整性与可读性,文章采用了二 元语法匹配的方法。扫描留言答复的同时,在字典中 匹配当前两个字符,从而一定程度上度量了答复的局 部完整性、可读性。最后,综合上述因子,即可建立 一个评分模型,对留言答复进行评分。 文章在每一个问题最后,都或多或少地提及相应 的底层实现和优化方法,使用它们将降低算法的复杂 度和运算耗时。同时,在许多细节方面亦给出详细的 处理方法。 最后,文章总结所做的工作,提出了笔者对 NLP 领域的一些浅薄的见解。同时分析了文章的不足之 处,和 NLP 领域有待解决的问题。 2 文本分类问题 根据已经归类好的群众留言数据,对未知类别的 留言进行分类显然属于一个文本分类问题。对于分类 问题,使用机器学习的方法即可高效地解决。然而, 要使用机器学习模型实现自动分类,首先需要将非结 构化的文本数据转换成结构化的特征向量。考虑到留 言语料库中留言详情所包含的信息量,远大于留言 主题。且很明显,留言时间与文本的类别毫不相关1。 因此,本文中的语料库均指所有留言的留言详情。 本节将展示使用二元语法词袋模型,将非结构化 的文本表示为向量。考虑到特征个数达到十万以上 数量级,若直接投入机器学习模型的训练中,显然会 造成“维度灾难”。为此,文章采用卡方检验的方法, 从而过滤掉对分类结果影响不大的特征,从而进行 特征降维。最后,文章将从多种常见的机器学习模型 中,根据模型们在数据集中的表现,挑选出合适的模 型及模型参数。 2.1 特征工程 将语料库进行处理,从而转换为可供机器学习使 用的模式即为特征工程,或数据预处理。对于本例中 的文本分类任务,这里将结合卡方检测,使用二元语 图 2. 问题二解题思路 法词袋模型,对语料库进行预处理。对于样本的类 1笔者已将时间处理为精确到分钟有序序列,并通过单因素方差分析法,使用随机抽样(共 1000 个样本)证明了这一 图 1. 问题一解题思路 同时,在附录中额外给出了神经网络的训练过程 与模型效果。之后,以 F1 值评价训练好的模型,并 得出适用于文本分类的模型有:贝叶斯分类器、SVC 和逻辑回归。同时,进一步反映了神经网络无法提升 文本分类效果这一论断。 为了挖掘出热门问题,显然需要先对留言进行聚 类,因此属于文本聚类的任务之一。考虑到二元语法 得到的特征向量太过冗余,且聚类这种没有标签的 无监督算法,无法采用卡方分布过滤特征。因此,本 文采用条件随机场分词器,对留言详情构成的语料 库进行分词。过滤掉停用词并在粗分的基础上进行 合并后,再使用主成分分析法(PCA)对数据进行降 维。之后,将预处理后的数据,使用自适应聚类算法 ——DBSCAN 进行聚类。从而将隶属与同一个问题 的、相似的留言聚成一簇。之后,再根据留言的点赞 数、反对数和时间跨度,建立一个问题的热度模型。 最后,按照热度进行降序排序,即可找出 5 大热门问 题。 考虑到留言详情的字数较多,且有可能同一热门 问题包含许多条留言。因此,本文还结合 TextRank 算法和 BM25 算法,提取出文本中的关键句。再根 据关键句,人工归纳出热门问题的问题描述。总体的 做法见图2所示。 点 2
别,可以直接将其转换为 0 开始的有序整数。 2.1.1 二元语法 为 An,事件“文档属于类别 c; c 2 f0; 1; ; 6g”为 Bc,则卡方检验在于验证 P (AnBc) = P (An)P (Bc) 是否成立。 如 上 所 述,为 了 将 非 结 构 化 的 文 本 转 换 为 结 构 化 的 特 征 向 量,本 文 将 采 用 二 元 语 法 词 袋 模 型 下: 记卡方检验的检验统计量为 2,其计算公式如 ∑ ∑ (Nnc E2 nc) Enc (1) 2(n; c) = c n∈{fn; fn} 其中 Nnc 为特征 fn 在属于类别 c 的文档中出现的频 数。Enc 为事件 An 和 Bn 同时出现的期望,可由如 下式算出: Enc = N Nnc + Nnc N Nnc + Nnc N (2) 其 中 ¯n; ¯c 表 示 逻 辑 非,N 为 所 有 特 征 的 频 数, 即 N = Nnc + Nnc + Nnc + N nc。由于 2 服从卡方分 布,根据所得值与卡方分布的表达式即可反推出概率 p 卡方检验的原假设为 P (AnBc) = P (An)P (Bc) 成立,即待检验特征 fn 对分类决策的帮助不大。取 置信水平为 = 0:001, 也即检验犯一类错误的概率 为 0:1%。于是,对语料库中的每一个特征,考虑将 它们都进行卡方检验。若概率 p < , 则拒绝原假设, 即认为该特征属于重要因子。反之,则接受原假设, 此时即可将该特征 删除。 以附件 2 数据为例,其词袋模型的稀疏矩阵共有 396287 个特征。经过卡方检验的过滤后,降为 30291 个特征,压缩到原来的不到 10%。至此,数据预处理 步骤结束 3。 2.2 文本分类模型的筛选 得到数据矩阵后,就可以通过机器学习的方法, 进 行 建 模。所 谓 二 元 语 法,即 将 连 续 的 两 个 汉 字 (过 滤 掉 标 点 符 号、 制 表 符、 换 行 符 等) 视 为 一 个 特 征。例 如 句 子“第八届泰迪杯比赛。”,其 二 元 语 法 为(“第八”,“八届”,“届泰”,..., “杯比”,“比赛”)。为了过滤掉标点符号,可以 考虑使用正向最长匹配的方法2,将标点符号进行过 滤。 值得一提的是,将文本转换为特征向量可以考 虑进行分词。然而根据郭志芃等老师的开源工作 [6], 这种将文本中相邻两个字符作为特征,反而能够取得 更好的成绩。 2.1.2 词袋模型 在许多外文文献中,也称词袋模型为 BOW。词 袋模型将语料库(经过二元语法提取后)的所有特 征,构成一个的向量,并作为每一句留言(文档)的 特征向量。而文档中的特征向量的某个元素,其取值 等于相应特征在文档中出现的频数。至此,就将语料 库转换为一个稀疏的矩阵。 2.1.3 卡方检验 由于词袋模型得到的往往是一个稀疏矩阵,若直 接供给机器学习模型训练,势必会出现“维度灾难” 的问题。以示例数据为例,经过二元语法与词袋模型 的处理后,语料库转换为 9210 396287 的畸形矩阵, 即样本个体的特征个数近 40 万。但是,该矩阵中有 绝大部分为 0 元素,换句话说,矩阵是稀疏的。 另一方面,由于许多常用的单词对分类决策的影 根据数据集训练出一个文本分类模型了。由于汉语言 响不大,比如停用词和表述词等。再者,许多单词在 所有类别的样本中均频繁出现。因此,为了消除这些 影响因素,这里考虑采用卡方检验的方法,过滤掉这 些用处不大的特征。 处理文献较为缺乏,本文将从常见的机器学习模型 中,筛选出最适合进行文本分类的模型。在附录 A 中,文章使用了 BP 神经网络进行文本分类,并发现 其较之普通机器学习而言,效果反而更差。因此本文 类似于单因素方差分析,卡方检验通常由于判断 将着重采用机器学习的方法,解决文本分类的问题。 两个随机事件是否相互独立。记语料库中的一个特征 为 fn; n 2 f0; 1; ; 396287g,事件“文档中存在 fn” 由于本文是根据 F 1 值筛选出模型和参数的,为 了表述方便,在后文中均用拟合优度均代指 F 1 值。 2具体细节详见3.4.1小节 3预处理后的数据可见附件:data_q2_X_final_data.pkl 3
2.2.1 交叉验证与网格寻优筛选模型 参入人工因素选择。因此,本文采用网格寻优法,从 笔者认为,机器学习是一门理论的科学,亦是一 门实践的艺术。因此,在 NLP 特别是汉语言处理这 门比较新的领域,任何模型都不能随意地认定其优 劣。考虑到前人在这方面的研究较少,因此,本人将 从逻辑回归4、支持向量分类器(以下称 SVC)、决 策树、k 近邻算法(以下简称 kNN)、朴素贝叶斯分 类器、随机森林和 AdaBoost 中,筛选最合适的模型 以及模型参数。 在筛选模型之前,需要先筛选最佳的模型参数。 上述模型中,带有参数的模型分别为 SVC、决策树、 kNN、随机森林和 AdaBoost。如图3所示,K 折交叉 验证常用来评价一个模型在指定数据集中的优劣。其 将数据集复制成 K 份,记为 Di; i 2 f1; 2; ; Kg。 同 时 将 Di 按 比 例 % 拆 分 成 训 练 集、 测 试 集, = 100/K。 之 后 对 于 某 一 个 模 型, 通 过 K 折 训 练 集 训 练 K 个 分 模 型, 并 分 别 计 算 它 们 在 相 应 的 测 试 集 中 的 拟 合 优 度,并 构 成 拟 合 优 度 序 列 Si; i 2 f1; 2; ; Kg。 图 3. K 折交叉验证原理 根据序列 Si 的均值 ¯S, 即可评价该模型在数据集 中的总体拟合优度。对于不同模型,可以分别根据 ¯S 最大,来筛选最优模型。对于同一模型的不同参数, 同样可以将其视为不同模型,并根据上述方法筛选。 为了筛选不同模型的最佳参数,可以通过遍历的 方法遍历模型参数的所有取值可能,再使用交叉验证 的方法筛选参数。然而,遍历法的代价实在太大。为 了降低计算机的运算负荷,可以适当地加大步长,并 参数网格中筛选最优参数。 由于网格寻优法从参数网格中寻找最佳参数,从 这个意义上来说,网格寻优法可视为大步长、动态步 长、掺杂人工因素的遍历法。 2.2.2 模型及其参数的筛选结果与 T 检验 承上所述,为了选择最好的模型,首先需要筛 选模型们的参数。而需要选择参数的模型有 kNN、 SVC、决策树、随机森林和 AdaBoost。本文使用网 格寻优法,结合 5 折交叉验证,计算模型的 F1 值作 为 Si 筛选模型,最终的结果如表1所示5。 表 1. 各模型的参数网格与筛选结果 模型 kNN SVC 决策树 随机森林 AdaBoost 参数网格 k1:(3,5,7,9,11) C2: (0,0.1,0.25,0.5 ,0.75,1,1.25,1.5,1.75, 2,3,4,5,6,7,8,9) 核函数:(线性函数、 径向基函数、 三次多项式函数) 最大深度 d:(7,9, 11,13,15,17,19,24,29, 34,39,44,49,54,59,64, 69,74,79,84,89) 3: (0.00025, cpp 0.0005,0.001, 0.00125,0.015, 0.01,0.05,0.1) 基模型个数:(15, 25,35,45,50,65,75,85, 95,100,150,200,250, 300) 基模型个数:(15, 25,35,45,50,65,75,85, 95,100,150,200,250, 300) 最佳结果 3 C= 0:1, 核函数: 线性函数 d = 79, cpp = 0:0005 75 15 1 这里不妨啰嗦一句,kNN 算法的 k 只能取奇数 2 即惩罚参数. 3 即最小代价复杂度剪枝处理的阀值 得到最佳参数后,再次使用 5 折交叉验证的方 法,计算 k = 3 的 kNN、C = 0:1 核函数为线性函数 4正则化用于解决过拟合问题,然而考虑到这些模型的拟合优度均较低,因此不使用正则化 5可以看到,参数网格由疏到密,这实际是渗入人工因素的结果,具体见2.4.3 4
的 SVC、d = 79; cpp = 0:0005 的决策树、基模型为 d = 5 的决策树、个数为 75 的随机森林、基模型为 逻辑回归、个数为 15 的 AdaBoost、朴素贝叶斯分类 器,以及逻辑回归,分别计算它们在数据集中的拟合 优度序列 Si; i 2 f1; 2; ; 5g。如表 2,3所示,各模型 由于所有模型两两 T 检验的概率均有 p > ,故 接受原假设,即认为各模型的效果两两等价。 2.3 文本分类模型的训练 本节将根据 T 检验法的结果,从中挑选出一个 在数据集的拟合优度序列如下: 适合的模型,并训练它。 表 2. 各模型(最优参数下)的拟合优度序列 Si AdaBoost 决策树 kNN 逻辑回归 S1 S2 S3 S4 S5 ¯S 0.82 0.85 0.84 0.87 0.85 0.85 0.71 0.73 0.76 0.78 0.73 0.74 0.52 0.54 0.53 0.55 0.53 0.53 0.83 0.87 0.85 0.87 0.84 0.85 表 3. 续上表 Si 贝叶斯分类器 随机森林 SVC 0.82 S1 0.85 S2 0.83 S3 0.86 S4 0.84 S5 0.84 ¯S 0.85 0.86 0.83 0.87 0.89 0.86 0.45 0.45 0.46 0.49 0.46 0.46 从各模型的拟合优度序列的均值 ¯S 可以剔除决 策树、随机森林和 kNN。剩下的模型差别均不大。 但是,人们不能贸然地认为这些模型在效果上是 等 价的。因此,为了判断这些模型是否等价,还需要采 用 T 检验的方法。 类似于2.1.3小节所述的卡方检验,T 检验亦属于 统计检验的方法。T 检验用于判断两个序列的均值, 在置信水平下是否相等。篇幅所限,这里不再复述其 原理。于是,本文考虑将 AdaBoost、逻辑回归、贝 叶斯分类器和 SVC 的拟合优度序列,进行两两的 T 检验。设置置信水平为 = 0:05,可得检验结果见表 5(见附录 A)。 2.3.1 模型选择与分析 根据2.2.2小节的分析结果可知,AdaBoost、逻 辑回归、贝叶斯分类器和 SVC 的效果是一样的。很 明显,属于集成模型的 AdaBoost 所消耗的资源较 多,没有必要选择它。而较之模型的训练时长而言, 显然通过拙算法6训练的贝叶斯分类器,所需的训练 时长最短。而需要迭代算法求解的逻辑回归和 SVC, 在这方面略逊一筹。然而由于 SVC 需要求解的优化 问题7较为复杂。但另一方面,较之逻辑回归,SVC 只需要训练支持向量。换句话说,在硬件实现上可以 直接剔除非支持向量个体,因此在训练模型时,消耗 的内存较低。 另外,由于贝叶斯分类器是通过拙算法训练的, 需要存储数据的频率信息。因此,使用贝叶斯分类器 所消耗的内存 (3MB) 更多。并且,分类决策所需要 的时间亦长。再加上数据预处理所需要的内存资源, 使得贝叶斯分类器无法用在嵌入式系统等场合。而 逻辑回归与 SVC 则相反,它们只需要存储模型参数 (1MB 左右) 即可。 有的读者可能会认为 SVC 更具有稳定性(即每 次训练时结果波动不大),这可能是由于支持向量机 也叫最大间隔模型的原因。但不得不说,由于惩罚参 数 C = 0:1 并且接近于 0,因此实际上该 SVC软化得 很彻底的,所以其稳定性高的谬论不攻自破。 综上,在条件允许的情况(如个人电脑)下,可 使用贝叶斯分类器。如果要求简单至上,轻装上阵, 则可以选择逻辑回归和 SVC。 另外值得注意的是,SVC 的核函数为线性函数。 也就是说,此时 SVC 与逻辑回归一样,属于线性分 类器。并且,我们看到非线性分类器,除了贝叶斯分 类器8以外,它们的效果无疑都很差。这是为什么呢? 笔者认为,这是由于特征过多,导致的数据集线性可 6通过存储数据的频率信息 7即模型训练过程中,使得代价函数最小的问题 8AdaBoost 属于 Boost 集成,线性模型的 Boost 集成还是线性的,这点笔者已经在之前的研究中验证过 5
分的缘故。 2.3.2 模型训练 本文在将二元语法转换为词袋模型时,只保存非零元 素的索引和值。这样可将数据压缩到 4MB 左右,同 时节省了操作系统释放、存取内存9的时间。 在得出模型之后,还需要将数据集拆分成训练 另外,由于特征的取值为频数,其值为整数且大 集、测试集筛选数据。可能有读者认为这是多此一 多很小,因此可以将其转换为无符号短整型(即一个 举,因为在筛选模型的时候已经反复训练了。但并非 字节),从而节省存储开支。 如此,因为测试集的意义在于测试模型的拟合优度, 人们总是期望在陌生的数据中测试。如果测试集的信 息在除测试以外的阶段“泄露”了,那么将会失去测 试的意义。 2.4.2 多分类与类别不均衡 对于逻辑回归和 SVC 模型来说,由于其只能输 出正负两个结果,故不可以直接用于多分类任务。所 所以说,如果直接拿交叉验证时训练的模型投入 以笔者用它们进行文本分类时,将不同类别的样本 使用,那么等于直接拿未经测试的模型投入使用。无 “分而治之”,从而将多分类任务转换为多个二分类 论是工业界还是学术界,这都是不可取的。因为无法 任务。 评价模型的泛化能力,并判断其是否过拟合。 因此,本文将数据集按 7:3 拆分成训练集、测试 集,在训练集中分别训练逻辑回归、SVC 和决策树 模型。并计算模型们在训练集、测试集中的 F 1 值。 结果如表 4所示。 这里采用 OvR的分而治之策略,即在划分某一 类时,将不属于该类的样本视为负样本,从而转换为 二分类问题。这么做比起 OvO10 而言,其算法复杂 度更低11 。然而,这么做会使得正负样本数量不均 衡,从而影响模型的拟合优度。举个简单的例子,若 表 4. 模型在测试集、训练集中的拟合优度值 F1 训练集 测试集 贝叶斯 分类器 0.93 0.88 逻辑 回归 1 0.87 SVC 1 0.86 读 者 可 以 读 取 附 件 文 件 nb_model.pkl, l- g_model.pkl 和 svc_model.pkl 使用这些模型。 正负样本比例为 1 : 99。那么一个只会点头的模型可 能达到 99% 的精度,这显然不是人们愿意看到的。 为了解决这种类别不均衡问题,笔者采用了边界 SMOTE的过采样方法。该方法旨在通过少数类样 本,使用插值法产生新的样本。其中边界样本产生更 多的新样本,从而降低简单复制粘贴数据导致模型过 拟合的风险。其具体算法见参考文献 [7],这里不再 赘述。 2.4 算法的底层实现与操作简介 2.4.3 网格寻优的具体操作 笔 者 的 计 算 机 配 置 为:Inter(R) Core(TM)i5- 5200U CPU2.20GHz,内存 8GB,Win7 系统。在编 程过程中,受硬件限制,遇到了很多不可避免的问 前面提到,网格寻优法能够加入人工因素,从而 避免盲目地遍历参数。笔者在筛选参数的时候,先使 用大步长遍历大范围参数。并根据结果的左右边界, 题。另外,上一小节所介绍的模型、以及数据预处理 逐渐减小步长,并缩小参数范围,从而更加精确地筛 时潜在许多问题与相应的解决办法,下面将一一介绍 选模型参数。 这些底层算法实现。 2.4.1 稀疏矩阵的存取 2.4.4 贝叶斯分类器的某些设置 贝叶斯分类器根据特征的连续与否,可以分为多 在2.1.2小节中,使用词袋模型处理数据将会得到 一个 9210 396287 的矩阵。矩阵绝大部分为 0 元素, 若直接生成,则需要 27GB 左右的内存空间。因此, 项式分布、伯努利分布和正态分布三种方式。伯努利 分布一般用在二值特征之中,因此不采用。而数据的 词袋模型由频数构成,其天然具有离散特征的性质。 9由于 8GB 远远不够用,因此计算机需要将数据缓存到硬盘 10即 one vs one 的缩写,是另一种分而治之的策略。同样地,OvR 为 one vs rest 11不难证明,OvR 的复杂度为 O(n),而 OvO 为 O(n2) 6
所以,本文使用的贝叶斯分类器属于多项式分布类 因此,为了降低特征个数,本文考虑使用汉语分 型。当然,也可以将这种“自然数”类型的离散特征 视为连续型,从而采用正态分布12。 词器将句子拆分成一个个的单词。同时,采用正向 最长匹配算法,过滤掉停用词、常见词。并采用类似 由于这里采用了多项式分布类型的贝叶斯分类 的方法,将地点、人名、机构名等在粗分的结果下合 器,因此为了提高模型的泛化程度,需要给模型进行 平滑处理。本文采用的是一种 +1 平滑策略13,具体 实现请参阅文献 [3],这里不再赘述。 2.4.5 参数寻优算法 并。 经过上述处理之后,再使用与2.1.2小节同样的方 法,使用词袋模型将语料库转换为稀疏矩阵。为了进 行特征降维,文章还将采用主成分分析的方法,压缩 数据的维度。同样,这里的语料库亦均指代留言详 除了 kNN、贝叶斯分类器以外,其余的所有模 型都需要寻找某个参数,使得某个 代价函数最小, 情。 从而得到模型的参数。换句话说,模型的训练(参 数求解过程)是一个优化问题。在本文中,笔者使用 优化算法 LBFGS来求解优化问题。LBPGS 类似于 拟牛顿法的随机优化算法,它使用 mini-batch 来降 低计算量。较之拟牛顿法,该方法节省内存,且采用 mini-batch 的它能够降低海赛矩阵的计算时间14。本 文使用的 LBPGS 的步长为 0.01,mini-batch 为 100 个样本。LBFGS 算法具体细节可参阅参考文献 [5], 这里不过多复述。 3 文本聚类与热度算法 要从每一个群众的留言中,收集某一时间段内群 众集中反映的问题,显然属于一个文本聚类的问题。 如果将群众相似的留言聚成一簇,即可将簇视为某个 集中问题。根据该簇包含的留言条数、支持和反对的 总数,并考虑其热度随时间的衰减,即可估计该问题 的热度。 为了提取出聚类簇中留言的问题描述,以及地点 和人群。本文考虑使用关键语句提取算法,从而自动 3.1.1 条件随机场分词器 如上所述,为了将留言拆分成一个个单词,首先 需要使用机器学习的方法训练一个分词器。同样地, 为了训练分词器,就需要一个事先拆分好的语料库作 为训练集。 一种获取语料库的方法是,在附件二的基础上 手工分词,但这么做的代价着实太大,得不偿失。因 此,本文考虑采用开源的语料库,如 SIGHAN0515提 供的 PKU 和 MSR 预料库。考虑到 MSR 在标注一 致性上要优于 PKU,这一点可以用历史报告佐证。 并且 MSR 的拆分颗粒度较大,一些地名 MSR 不予 拆分,因此适合用在本场合中。MSR 语料库分为训 练、测试语料库,其部分展示如下: “ 人们 常 说 生活 是 一 部 教科 书 , 而 血 与 火 的 战争 更 是 不 可多得 的 教科书 , 她 确实 是 名副其 实 的 ‘ 我 的 大学 ’ 。 “ 心 静 渐 知 春 似 海 , 生成关键句,再从关键句中人工提取出地点和人群。 花 深 每 觉 影 生 香 。 籍此就可以降低直接从留言详情中,人工提取问题概 “ 吃 屎 的 东西 , 述的工作量。 3.1 特征工程 不同于2.4.5小节,文本聚类属于无监督问题,其 不能根据卡方检测来筛选特征。因此如果仍然采用二 连 一 捆 麦 也 铡 不 动 呀 ? ... 由于汉语的分词问题实际上是一种序列标注的问 题,定义标注集为 fB; M; E; Sg,其中 B; M; E; S 分 别代表开头、中间、结尾和单个词。于是例句 我爱 元语法对语料库建模,将会导致特征个数非常多。 第八届泰迪杯挑战赛拆分可得: 12不建议读者这么做,根据笔者的许多研究和实践,发现正态分布类型的准确度等指标往往较低,无论在特征连续与 否都是如此。笔者认为这是正态分布参数难以训练的结果 13即拉普拉斯修正系数为 1 的平滑策略 14相应的收敛会减缓,但不影响收敛 15第二届国际中文分词评测,可免费用于研究目的 7
[我/S, 爱/S, 第/B八/M届/E, 泰/B 3.1.2 停用词过滤与命名实体合并 在汉语中,有些词语如的、啊、呢、换句话说、 总而言之等对句子的信息影响不大。并且,标点符号 和制表符等特殊符号亦不影响语义。因此需要在粗拆 分的基础上过滤掉这些停用词。另外,一些人民、地 名和机构名,以及数字等在粗拆分的基础上,需要将 其再度合并。 这些都可以用正向最长匹配算法实现。该算法 需要一个词典,以停用词过滤为例,这里使用的是 HanLP 开源词典17。正向最长匹配从某个汉字开始, 从前往后的扫描每个汉字。若途中构成的词存在于词 典中,而与下一个汉字组合却不存在(即最长),则 将其过滤。 对于人民、地名和机构名也是一样,结合某部字 典,通过正向最长匹配,在粗分的基础上进行再合 并。 通过上述条件随机场、停用词过滤等处理后,以 附件三第二条留言为例,其分词结果如下所示。其中 词“10年”就是粗分后合并的结果。 [A市, A, 6区, 道路, 命名, 规划, 已经, 初 步, 成果, 公示, 文件, 转化, 成为, 正式, 成果, 希 望, 加快, 完成, 路名, 规范, 道路, 安装, 路, 名 牌, 变更, 路, 名牌, 及时, 更换, A, 6区, 农 村, 门牌, 10年, 未曾, 更换, 会, 统一, 更换, 现 在, 找, 地方, 只能, 说, 路口, 没有, 充分, 发 挥, 路名, 地名, 作用, A, 6区, 行政区划, 已 经, 调整, 完毕, 门牌, 更新, 应该, 同步, 开展] 迪/E, 杯/S, 挑/B战/E, 赛/S] 因此对于每一个汉字,都有一个状态与之对应。 很显然这是一个分类问题,其亦可以使用机器学习解 决。考虑到一个汉字的状态,与前面一个汉字的状态 有关。因此,这里结构判别模型——条件随机场模型 解决。当然,笔者始终秉持着机器学习是一门实践的 艺术这一理念,在考虑条件随机场时,亦通过多种模 型筛选的方式,发现其效果最优,才采用该模型的, 具体做法详见附录 B。 条件随机场类似于隐马尔可夫模型,如图4所示。 其中特征 xt 由 n 个连续的汉字 xi; i 2 f1; 2; ; ng 组 成,这 里 取 n = 5。方 块 可 以 理 解 为 一 个 特 征 函 数 fk(yt−1; yt; xt), 而 yt = (y1; y2; ; y5); y 2 fB; M; E; Sg 属于标签向量。 图 4. 条件随机场原理 于是,条件随机场的定义如下: T∏ expf K∑ t=1 k=1 p(yjx) = 1 Z(x) wkfk(yt−1; yt; xt)g (3) 3.1.3 词袋模型与 PCA 降维 其中 wk 为待训练参数,而 Z(x) 为归一化系数,其 值为: ∑ T∏ expf K∑ Z(x) = wkfk(yt−1; yt; xt)g y t=1 k=1 条件随机场的训练比较冗长,篇幅所限,这里不再详 细介绍,具体内容可参阅参考文献 [9]。使用维特比 算法 [4] 训练模型16后,即可用模型给语料库进行序 列标注,并根据标注结果分词即可。 16训练好的模型大小 156MB,恕不上传。 17见文件 stopwords.txt 8 为了将分词后的文档转换为结构化的特征向量, 本文将再次采用2.1.2小节所述的词袋模型,从而将语 料库转换为 4326 42754 的稀释矩阵。同样,为了 节省内存,这里仍旧采用2.4.1小节的方法存取稀疏数 据。 值得注意的是,将语料库转换为特征向量的方 法还有许多,例如 TF-IDF。但是,若采用 TF-IDF, 由于其实现是基于词袋模型的,如果采用这种方法, 会导致稀疏特性遭到破坏,增大内存与 CPU 的负 荷。其二,TF-IDF 将语料库中出现的高频词赋为低
分享到:
收藏