moshlwx 2017-07-02
简单安装几个R软件包,你就直接在自己电脑上打造出一个文本分类器,用进行机器来评估人类写作。
本文是一篇极简的上手教程,它想用清晰明了的步骤告诉读者,机器学习不神秘,关键是动手!仅需七步,你也一样能“作诗”,完全无需像曹子建那样“才高八斗”。
作者 | Fedor Karmanov
翻译 | AI科技大本营(rgznai100)
参与 | Joe,波波
在本教程中,我们将用到大量的R软件包,以快速实现一个用于亚马逊评论数据的分类器算法。该分类器能以极高的准确度来判断一个评论是正面的还是负面的。
为了明确地给出分类算法的工作用例,这里采用了斯坦福网络分析项目(Stanford Network Analysis Project)的数据,该数据已被解析成小的文本块,并进行过适当的标注。你可以从它的Github代码库获取到这些数据。
斯坦福网络分析项目
https://snap.stanford.edu/data/web-Amazon.html
Github链接
https://github.com/Rogerh91/Springboard-Blog-Tutorials/tree/master/Machine%20Learning%20with%20R%20Tutorial
开始前的数据策管,是整个数据处理过程中至关重要的一环:要确保所用的信息都已被恰当地分类和标注。
在机器学习中,数据的标注和分类的质量往往能决定整个模型的准确度。也就是说,熟悉一下文件内容在被如何组织与标注,会非常有价值:“Train”文件夹包含了400条被标为“Neg”(negative,负面)的1星书评,与400条被标为“Pos”(positive,“正面”)的5星评论。这就是我们的“黄金标准”:我们根据用户撰写书评时所给的评分星级来判断评论内容正面与否。我们使用“Train”文件夹内的数据来训练分类器,然后它用训练所得的规律来推测“Test”文件夹内的评论是正面还是负面。
通过这种方式,我们就能打造出一个基于机器学习的文本分类器,它可以准确判断每条亚马逊书评正面与否,或任何短文本信息的正面与否,以此来评估给定产品的消费体验。
从更大的视角看,这一过程所演示的是如何用最简单的R语言来学习并预测人类写作。这是一个用R语言进行机器学习的有效用例。
该教程运行在R语言的Jupyter Notebook环境:
http://blog.revolutionanalytics.com/2015/09/using-r-with-jupyter-notebooks.html
你可以在任何能编译并运行R脚本的平台上来练习。
我们将使用R语言的“caret”、“tm”和“kernlab”包来解析和读取数据,然后进行模型训练。如果你没装这些包,请用下面的命令安装。
关于R软件包如何安装的更多说明,请参考这里
https://www.r-bloggers.com/installing-r-packages/。
其中,“dplyr”包和” splitstackshape”是用来帮我们控制数据的,并把它们组织成模型能够使用的数据。接着,让我们激活这些已安装好的R软件包,并展开机器学习的实践操作。
第一步是导入并清洗所有的数据。因此,我们将使用”tm”包,它用 ”VCorpus” 函数和 ”tm_map” 函数来使数据变得可用。下面将用到大段大段的代码块,我们希望其中的注释能有助于你理解里面的机制。
1. 导入并清洗数据
2. 为训练数据创建文本矩阵
3. 重复以上两步来准备测试数据
上述代码给出了两个新的数据矩阵:一个是”data.dtm”,包含了“Training”文件夹内的所有数据,另一个是”test.dtm”,包含了“Test”文件夹内的所有数据。本教程的绝大部分,我们都是在跟”train.dtm”打交道,用于生成、训练和验证结果。先不停地使用训练数据,然后再用测试数据进行模型验证,这是用R进行机器学习实践的基本步骤。
以下两步涉及到数据处理过程中非常重要的两个方面,从而能确保分类器很好地工作。
第一步:确保数据集在列向量上一致,即我们只采用两个矩阵在列上重叠的数据。
第二步:确保数据都有标签列,以注明该文本是“正面”还是“负面”。因为训练数据的标注值是已知的,我们必须从原始文件中把它们分离出来,并追加到训练数据的“corpus”列。而测试数据没有相应这些标签,我们先用一些空值进行填充。
4. 确保测试矩阵和训练矩阵的列向量一致(找到交集)
5. 获取训练数据的正确标注,并为测试数据设置相应的空值
如果以上步骤的运行都正确无误,你可以开始训练分类器了!
注意:本教程将不对模型作交叉验证(cross-validation),但更高水平的用户或研究者应当创建多个数据包,并用它们来对模型进行交叉验证,从而获得更加可靠的模型准确值。
不管怎样,这里的模型只会用下面的混淆矩阵(confusion matrix)来进行一次模型准确度验证。这将会生成一些指标,以帮助我们计算刚刚建好的预测模型的准确度。
6. 准备好数据集,进行模型训练并检验结果
如上所述,我们用训练数据来对模型进行训练和测试。如果一切顺利,你应该能看到以下的输出:
混淆矩阵(confusion matrix)以尽可能简单的形式给出了最终的输出结果,以及模型在训练数据上预测的性能分析。例如“Accuracy”(准确度)表明分类器在训练数据集上的预测精度:这里高达92.8%!这就意味着大致有93%的情况,分类器仅根据文本内容就准确地判断它是正面的还是负面的。
在更严谨的场景下,你需要在不同的数据集(通常是随机从训练数据集中获得的子集)上进行同样的流程,以进行交叉验证。比如上面的例子,很明显构建的分类器能非常好地判断亚马逊书评是负面的还是正面的。因此,我们进行下一步的测试。我们已经基于使用R进行机器学习的知识,构建了一个非常好的分类器。但是,这个模型还不能用于实践。幸运的是,在测试数据上运行这个模型,只需修改“df.test”变量即可。
7. 在测试数据上进行最终预测,并标注文件名
以上代码表示,预测模型在测试数据上运行并输出结果”results”。然后,我们使用原始数据行名作为预测结果向量行名,并最终生成测试数据的预测结果。
总的来说,以上使用R构建机器学习模型的流程帮助你快速实现一个分类器。它以相当高的准确度区分在线书评的情感种类。当你有大量的用户评论数据(用来分析某个产品或服务的客户体验度),这样一个分类器非常实用。此外,还能用于帮助研究者构建可以自动清除差评或者好评的算法。我们希望这个教程能让你感受到使用R进行机器学习实践的威力。
原文链接
https://www.springboard.com/blog/machine-learning-with-r/