【NLP】情绪分析与酒店评论

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
📝个人主页-Sonhhxg_柒的博客_CSDN博客📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏 – 机器学习【ML】 自然语言处理【NLP】 深度学习【DL】

【NLP】情绪分析与酒店评论

🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。
如果你对这个系列感兴趣的话,可以关注订阅哟👋

您可能已经注意到,数据集存在一些问题。有些列充满了无用的信息,有些则看起来不正确。如果它们是正确的,则不清楚它们是如何计算的,并且无法通过您自己的计算来独立验证答案。

练习:更多的数据处理

稍微清理一下数据。添加稍后有用的列,更改其他列中的值,并完全删除某些列。

Tag列存在问题,因为它是存储在该列中的列表(以文本形式)。不幸的是,此列中子部分的顺序和数量并不总是相同的。人类很难识别出感兴趣的正确短语,因为有 515,000 行和 1427 家酒店,每家酒店的评论者可以选择的选项略有不同。这就是 NLP 大放异彩的地方。您可以扫描文本并找到最常用的短语,并计算它们。

不幸的是,我们对单个词不感兴趣,而是对多词短语(例如 商务旅行)感兴趣。对这么多数据(6762646 个词)运行多词频分布算法可能会花费大量时间,但如果不查看数据,这似乎是一项必要的开支。这就是探索性数据分析派上用场的地方,因为您已经看到了标签的示例,例如 [' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device '],您可以开始询问是否可以大大减少您必须进行的处理。幸运的是,它是 – 但首先您需要按照几个步骤来确定感兴趣的标签。

请记住,数据集的目标是添加情绪和列,以帮助您选择最佳酒店(为您自己或委托您制作酒店推荐机器人的客户)。您需要问自己这些标签在最终数据集中是否有用。这是一种解释(如果您出于其他原因需要数据集,则不同的标签可能会留在/不在选择范围内):

总之, 保留2种标签并删除其他标签

首先,您不想计算标签,直到它们的格式更好,这意味着删除方括号和引号。您可以通过多种方式执行此操作,但您希望最快,因为处理大量数据可能需要很长时间。幸运的是,pandas 有一个简单的方法来完成这些步骤。

每个标签都变成了这样的东西: Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device.

接下来我们发现一个问题。一些评论或行有 5 列,一些 3 列,一些 6 列。这是数据集创建方式的结果,并且难以修复。您想获得每个短语的频率计数,但它们在每个评论中的顺序不同,因此计数可能会关闭,并且酒店可能不会获得应得的分配标签。

相反,您将使用不同的顺序对我们有利,因为每个标签都是多词但也用逗号分隔!最简单的方法是创建 6 个临时列,每个标记插入到与其在标记中的顺序相对应的列中。然后,您可以将 6 列合并为一个大列并 value_counts()在结果列上运行该方法。打印出来,你会看到有 2428 个独特的标签。这是一个小样本:

标签数数休闲之旅417778从移动设备提交307640夫妻252294住了一晚193645住了2晚133937独行旅客108545住了 3 晚95821出差82939团体65392有小孩的家庭61015住了4晚47817双人间35207标准双人间32248高级双人间31393有大孩子的家庭26349豪华双人间24823双人或双床间22393住了5晚20845标准双人或双床间17483经典双人房间16989高级双人或双床间135702 间客房12393

一些常见的标签 Submitted from a mobile device对我们来说没有用,所以在计算短语出现之前删除它们可能是一件聪明的事情,但这是一个如此快速的操作,你可以将它们留在里面并忽略它们。

删除这些标签是第 1 步,它会稍微减少要考虑的标签总数。请注意,您不会将它们从数据集中删除,只需选择将它们从考虑中删除,作为要在评论数据集中计数/保留的值。

停留时间数数住了一晚193645住了2晚133937住了 3 晚95821住了4晚47817住了5晚20845住了 6 晚9776住了 7 晚7399住了 8 晚2502住了 9 晚1293……

有各种各样的房间、套房、工作室、公寓等等。它们的含义大致相同,并且与您无关,因此请不要考虑它们。

房间类型数数双人间35207标准双人间32248高级双人间31393豪华双人间24823双人或双床间22393标准双人或双床间17483经典双人房间16989高级双人或双床间13570

最后,这是令人愉快的(因为它根本不需要太多处理),您将得到以下 _有用_的标签:

标签数数休闲之旅417778夫妻252294独行旅客108545出差82939团体(与有朋友的旅行者相结合)67535有小孩的家庭61015有大孩子的家庭26349带着宠物1405

最后一步是为每个标签创建新列。然后,对于每个评论行,如果该 Tag列与新列之一匹配,则添加 1,如果不匹配,则添加 0。最终结果将统计有多少评论者选择了这家酒店(总计),例如,商务与休闲,或带宠物,这是推荐酒店时的有用信息。

最后,使用新名称保存数据集。

情绪分析操作

在最后一部分中,您将对评论列应用情绪分析并将结果保存在数据集中。

练习:加载和保存过滤后的数据

请注意,现在您正在加载上一节中保存的过滤数据集,而 不是原始数据集。

如果您要在负面和正面评论列上运行情绪分析,则可能需要很长时间。在具有快速 CPU 的功能强大的测试笔记本电脑上进行测试,需要 12 – 14 分钟,具体取决于使用的情绪库。这是一个(相对)长的时间,因此值得研究是否可以加快速度。

第一步是删除停用词或不会改变句子情绪的常见英语单词。通过删除它们,情绪分析应该运行得更快,但准确度不会降低(因为停用词不会影响情绪,但会减慢分析速度)。

最长的负面评论是 395 个词,但去掉停用词后是 195 个词。

删除停用词也是一项快速操作,在测试设备上从超过 515,000 行的 2 个评论列中删除停用词需要 3.3 秒。根据您的设备 CPU 速度、RAM、是否有 SSD 以及其他一些因素,您可能需要更多或更少的时间。操作的相对较短意味着如果它提高了情感分析时间,那么它是值得做的。

现在您应该计算负面和正面评论列的情绪分析,并将结果存储在 2 个新列中。情感测试将其与评论者对同一评论的评分进行比较。例如,如果情绪认为负面评论的情绪为 1(非常正面的情绪)和正面的评论情绪为 1,但评论者给酒店的分数可能最低,那么评论文本与分数不匹配,或者情绪分析器无法正确识别情绪。您应该期望某些情绪得分是完全错误的,这通常是可以解释的,例如评论可能非常讽刺”我当然喜欢睡在没有暖气的房间里”,而情绪分析器认为这是积极情绪,

NLTK 提供了不同的情绪分析器来学习,你可以替换它们,看看情绪是否或多或少准确。此处使用 VADER 情绪分析。

Hutto, CJ & Gilbert, EE (2014)。VADER:用于社交媒体文本情感分析的基于规则的简约模型。第八届博客和社交媒体国际会议(ICWSM-14)。密歇根州安娜堡,2014 年 6 月。

稍后在您的程序中,当您准备好计算情绪时,您可以将其应用于每个评论,如下所示:

这在我的计算机上大约需要 120 秒,但在每台计算机上都会有所不同。如果您想打印结果并查看情绪是否与评论相符:

在挑战中使用该文件之前要做的最后一件事就是保存它!您还应该考虑对所有新列重新排序,以便它们易于使用(对于人类来说,这是一种外观上的改变)。

回顾一下,步骤如下:

开始时,您有一个包含列和数据的数据集,但并非所有数据都可以验证或使用。您已经浏览了数据,过滤掉了您不需要的内容,将标签转换为有用的内容,计算了您自己的平均值,添加了一些情绪列,并希望学习了一些有关处理自然文本的有趣知识。

Original: https://blog.csdn.net/sikh_0529/article/details/126941739
Author: Sonhhxg_柒
Title: 【NLP】情绪分析与酒店评论

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/542345/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球