自然语言处理
部署用于产品评论的自然语言处理
介绍
我们周围都有数据,数据有两种形式:表格和文本。如果您拥有良好的统计工具,表格数据就可以传达很多信息。但是,要想从文本中获得某些东西,尤其是自然语言的口头表达,确实很难。那么什么是自然语言?我们人类具有非常复杂的语言,自然语言是人类语言的真实形式,真诚地说/写也超越了语法规则。在“评论”中考虑可以找到该语言的最佳示例。您撰写评论的原因主要有两个,要么您对产品感到非常满意,要么对它感到非常失望;借助您的评论和
机器学习算法,像Amazon这样的实体可以判断他们所销售产品的好坏。
考虑一个示例,其中在亚马逊出售的产品的评论中,我们有成千上万的评论。对于个人而言,这非常耗时并且很难坐下来阅读成千上万的评论,并就人们是否喜欢该产品做出决定。我们可以通过实施机器学习算法使机器简单地完成这项工作,机器可以从中学习自然的人类语言并做出决策。一种处理方法是机器“袋”字,基本上是两种类型的。正面和负面的话。装好这些词后,机器将采用多数规则进行识别:存在更多的正面或负面词,从而帮助我们确定所销售产品的接受程度。
上述技术被称为“单词打包(BoW)”自然语言处理(NLP)机器学习算法,这是我们今天要学习的,也可能是这个Blog的复杂名称,但,我通过更好的一个。因此,还有其他一些技术也被称为Word Embedding NLP,并且可能更多,但据我所知,它们就是这两种。今天,我们在本文中仅关注“ BoW”类型的NLP。
BoW NLP实施路线图
实现该算法几乎没有什么复杂性,并且比通常的算法过程更长,因此可能会造成混淆。因此,下面是框图或路线图,以帮助您了解实现该算法并最终对其进行预测的步骤。如果您混淆了为什么要执行特定操作,则始终可以退回到该图上!
BoW NLP算法的实现流程图
为了使机器学习我们的自然语言,它们需要提供某种格式。因此,我们需要进行数据预处理,以便以机器期望的某种方式呈现数据以使它们学习。在预处理中,我们必须确保数据严格位于两列中,一列为Rating,另一列为RatingText。评分为1或2(分别为负和正),而“评分文字”将是等同的评分文字或评论。评级文字不应有异常的间距,也不能标点符号。以下两个片段显示了预处理前后的数据,以便您更好地理解。
预处理之前的
数据预处理之后的数据
下一步是创建语料库(词袋),可以通过R中的一个函数轻松完成语料库(稍后在列表中进行介绍)。然后,从该语料库创建文档术语矩阵(DTM),其中矩阵代表单词在整个语料库中重复的次数。一旦有了文档术语矩阵,我们便将数据分为训练和测试集。
最后一步是实现我们的模型。在这里,我们将部署Naive Bayes模型,一旦在训练数据集上实现了该模型,我们随后就会使用所创建的模型对测试数据集进行预测。最后,我们将计算预测的准确性,以估算模型在进行预测时的表现。
模型数据
数据是Amazon评论数据集,它是由张翔提供的开放使用的数据集。它被构造为负面评价得分1,正面评价得分2,总共有1
https://drive.google.com/file/d/1SncEr1yOBW4OmxWIYaKsNw_MS1Rh8S8j/v ...
您只需要确保下载文件后将其转换为.csv格式,即可在R中进行分析。
模型
预处理数据
如前所述,首先要做的是开始数据预处理。我们将首先加载数据,然后将其从字符串转换为数据帧,然后将数据分为两列,即。“评级”和“评级文字”。我们可以使用库“ tidyr”的R函数进行分离。以下是清单。
列出用于加载1001行Amazon Review数据集的列表
所加载数据的前10行的视图
列出将数据分为2列的“ Rating”和“ RatingText”
视图所分离的前10行数据的视图
现在,我们需要确保仅保留数据的字母数字条目,并删除其他内容。下面是两个分开的列的清单。
在数据中仅保留字母数字条目
最后,我们需要删除文本中不需要的空格。下面是消除异常间距并在整个过程中保持单个间距的清单
删除不寻常的间距
查看已删除的间距数据
现在,我们只需将数据放入名为“文本”的对象中,然后检查数据维度以确保将完整的数据写入该对象。
定义对象“文本”并存储我们的数据的控制台视图
文本上方的尺寸打印可确保我们将全部数据包含在对象文本中。
创建语料库
我们的下一步包括创建语料库,这可以通过tm库中的VCorpus – Volatile语料库函数轻松完成。要访问此功能,可以通过install.packages(“ tm”)下载软件包tm,然后使用library(tm)在R环境中加载该库。加载后,我们可以使用tm()函数。此功能会将我们的评论文本转换为语料库。
使用tm()函数创建语料库的清单
从易失性语料库中,我们创建 文档术语矩阵 (DTM)。DTM是使用tm 库的DocumentTermMatrix 函数创建的稀疏矩阵。矩阵的行表示文档,而列表示要素,即单词。矩阵是稀疏的,因为数据集中所有唯一的字母组合都成为DTM中的列,并且由于每个评论都没有该字母组合的所有元素,因此大多数单元格将为0,表示不存在字母组合。
虽然可以通过BoW方法提取n-gram(字母组合,二元组,三字母组等),但是可以在Document Term Matrix函数中设置并传递tokenize参数作为控制列表的一部分,以完成n DTM中的-grams。必须注意的是,使用n-gram作为DTM的一部分会在DTM中创建大量的列。这是BoW方法的缺点之一,并且在某些情况下,由于内存有限,它可能使项目的执行停滞。由于我们的特定情况也受到硬件基础结构的限制,因此我们在此项目中仅通过在DTM中包含字母组合来限制自己。除了生成字母组合图之外,我们还通过将参数传递给tm库的DocumentTermMatrix函数中的控件列表来对审阅文本文档执行一些其他处理。
所有文字均小写
删除号码(如果有)
删除停用词,例如a,an,in和the。作为停用词,在分析情绪时不会增加任何价值
删除标点符号后,它们在分析情绪中也没有添加任何意义
执行词干,即将单词转换为自然形式的示例从复数中删除s
以下是从我们的Volatile语料库创建DTM并进行上述预处理的清单
用于创建
我们的train_dtm的DTM和预处理Inspect View的清单
在上方,我们可以看到DTM的创建方式,其中行表示文档,列表示要素,如前所述。我们看到输出有1001个文档,其中5806列表示来自评论的唯一字母组合。我们还看到我们的DTM稀疏,只有34
去除稀疏元素的99%
去除稀疏后的检查
现在,我们看到稀疏性降低到97%,单字组数量减少到688。我们现在可以实现算法,但首先让我们将数据分为训练集和测试集。
将数据分为训练和测试集以实现算法
拆分数据后,我们现在可以在Training Set上构建模型,然后再测试模型以在测试集上进行预测。
实施朴素贝叶斯模型
需要注意的一点是,朴素贝叶斯模型适用于名义数据。并且我们的数据当前具有的主语是单词重复的次数和单词重复的次数不会影响我们的情感,因此我们可以使用以下规则将数据转换为名义数据:存在数字= Y,如果0然后N。下面是执行此操作的清单:
清单,用于将数据
转换为转换后的名义数据的名义数据片段视图
现在,有了名义数据,我们可以实现朴素贝叶斯模型。可以使用R库e1071中的naiveBayes()函数来实现朴素贝叶斯算法。如果您没有此库,则可以使用以下代码安装软件包,然后按如下所示将其加载到R环境中:
清单以安装和使用e1071软件包
以下是实施朴素贝叶斯模型的清单
清单以实现朴素贝叶斯模型
最后,有了模型,我们现在将对测试数据集进行预测,并检查模型所做的预测的准确性。以下是清单和检查准确性
列出计算预测和检查准确性
从模型获得的准确性
通过BoW的快速实施以及朴素贝叶斯模型,我们获得了79.5%的准确性。通过专注于添加不同元素(如新功能创建等),可以进一步提高准确性。
BoW NLP –外卖
当使用机器检查自然语言时,使用Naive Bayes模型的词袋(BoW)自然语言处理(NLP)非常容易实现算法。该模型无需付出太多努力即可为我们提供79.5%的预测准确度,这对于简单的模型实现而言确实是非常不错的准确度。BoW的唯一缺点是它不具有单词语义。例如“购买二手自行车”和“购买旧摩托车”,BoW会将它们视为两个截然不同的句子。为了克服这个问题,我们需要考虑另一种称为单词嵌入的方法。

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!