前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >150 万条语音的情感分析

150 万条语音的情感分析

作者头像
AI科技评论
发布于 2019-08-19 07:24:59
发布于 2019-08-19 07:24:59
1.6K04
代码可运行
举报
文章被收录于专栏:AI科技评论AI科技评论
运行总次数:4
代码可运行
我们对150万条语音进行了情感分析 ~

原标题 | Sentiment Analysis of 1.5 Million Audible Reviews

作 者 | Toby Manders

翻 译 | 廖颖、had_in、Jonathan-huang、david95、黛娜•卡特琳

编 辑 | Pita 

在这个项目的第一部分中,我们收集和研究了一个数据集,其中包括asin、评级数量和每个单独的有声英语课程的URL。

我们将通过使用这些字段来尽可能多地获取文本评论和附带的评级,从而找到我们离开的地方。然后我们将训练一些LSTM神经网络,将评论分类为正负两种。

查看遍历笔记:https://github.com/tobymanders/Data_Analysis/blob/master/audible_eda/audible_reviews_scraper.ipynb

查看数据预处理情绪分析笔记:https://github.com/tobymanders/Data_Analysis/blob/master/audible_eda/audible_review_classifier.ipynb

下载所有评论的数据集,可访问:https://drive.google.com/file/d/1Wka-rYvEykaG4fGR71zDis5d1NOFZlLX/view?usp=sharing

1. 遍历150万条评论

我们以前研究过音频目录中的分级分布,注意到顶部选择的少数节目的分级的极端集中(标题等级日志和评论数量日志之间的大致线性关系)。

我们今天将利用这种偏斜的优势,以最大限度地提高每小时可获取的评论数量。假设每个标题的书面评论数量与每个标题的评级数量成比例,我们可以预计大约50%的网站评论集中在我们数据集中的前1%的程序中。

从HTML中删除这些评论有一个障碍。大多数最受欢迎的标题的评论都隐藏在“查看更多”按钮下面。

当点击那个显示答案的按钮时,我们要检查网络请求。我们发现一个指向我们刚刚评论过的文章url链接。通过在这个链接向后阅读到末尾,我们能够收集对于给出项目的所有评论。由于这里的页面下载非常快(也因为我们正在使用多线程工作),在一段合理的时间内,我们可以从项目的前6%(26,101)中搜刮到高达80%的评论。

在遍历期间,我们有机会去做少量的家务活。我们将会使用评论内容去训练一个把评论分类成有帮助的(4~5颗星)和无用的(1~3颗星)的机器学习模型。如果在我们先前阅读过的文章中有留下标题和作者,我们的模型很有可能会‘记住它’,也就是说,那个项目有很高的评分了。这意味着对泛化能力有不好的影响,所以我们希望把作者和标题从评论中移除。这样做我们就不需要为每篇评论都储存信息了。

统一都用<unk>,简称‘未知’来代替单词的步骤叫做‘unking’。除了从每篇评论中‘unking’作者和标题外,我们还会用“停止”这个词来代替句号,去掉所有其他标点符号,并将所有文章内容改为小写。这减少了我们数据集中的“单词”数量。

几个小时后,我们会有超过150万的评论。

2.数据的准备

当我们为每篇评论收集评分时,‘overall’、‘story’和‘表现performance’中,我们会以‘overall’列作为标签。另外两列我们将会保存下来用作未来的分析。

为了把数据和目标转换成我们训练模型所需要的形式,我们需要完成接下来的准备工作:

1. 在词汇类型做参数的假设函数中,我们要根据使用频率从高频词汇数据中创建一个词汇表。

2.‘Unk' ——即用‘unk’代替所有数据集存在但词汇表中缺失的词汇。

3. 填补或删减所有条目去统一长度、序列长度和假设函数中的参数。

4. Tokenize(也就是整合)数据集中所有的单词。

5. 从‘overall’列中创建二进制标签。

我们的目标是把数据中的X数组整合成(评论总数 * 序列长度)的形式 和 把矢量y整合成评论总数的长度。

这是前面的部分条目。已经把内容标准化,移除了作者和标题。

为了决定截断更长或更短,让我们看看下面的分类情况。

上面的长度-频率图看起来像是指数图像。96.4%的评论都小于250个单词。我们将把250个单词作为序列长度。

那评论长度下限是什么呢?左边的图表向我们展示了数据集中剩下的绝大多数评论(>98%)都是多于10个单词。我们用10作为评论长度的下限。

按照字符长度排序,我们可以看到超过10个“单词”的最短评论。

大于10个单词的最短的评论。请注意,“单词”是空格之间的所有内容。

我们的下一步工作是根据所有的评论构建一个词汇表。我们将构建一个字典用来统计数据集中每个单词出现的频率,然后我们将使用平率最高的10,000个单词来构建词汇表,并且用“unk”来编码我们的数据集——如用“unk”替换评论中我们词汇表中没有的单词。同时我们还将数据集编码为数字数组——如“tokens”——我们可以在同一个函数中完成这两项任务。

在一些示例文本上测试我们的功能如下:

代码语言:javascript
代码运行次数:0
运行
复制

注意到,未识别的“dfalkjf”被替换为“unk”,编码为24。其余的单词编码为对应于词汇表中单词的索引。

经过填充、截断和编码之后,我们的数据如下:

代码语言:javascript
代码运行次数:0
运行
复制

注意到每一行末尾的24,这就是用'unk'进行填充得到的。

最后,我们根据“overall”评级创建了二进制标签,并发现大约79%的评论获得了4星或5星评级。这个数字很重要,因为它意味着即使是最简单的模型(总是预测1)也能获得79%的准确率,这是必须要超过的数字。

3.训练模型

现在预处理步骤已经完成,我们可以训练我们的模型了。利用TensorFlow和Keras层,我们可以尝试网络结构以及不同的参数。我们所有的模型均将嵌入层作为网络第一层,嵌入层每个单词转换成固定长度的向量,这个长度也是一个超参数。

我们所有的模型都将至少有一个RNN层(特别是长短期记忆单元或称为LSTM层)。这一层将用于向前和向后传播。在每种情况下,LSTM层都将输入一个具有relu激活函数的全连接层和输出一个具有sigmoid激活函数的输出层,后者将得到一个介于0和1之间的值,该值将被阈值化以进行类别预测。

对于其他层,我们加入Dropout层以减少过拟合,其中包括一种特殊类型的Dropout层,该Dropout层接在嵌入层之后,,随机丢弃一维特征图而不是单个单词,以及一个一维卷积层,该卷积层将学习一组滤波器,以提取相邻的词之间的关系特征,我们还将尝试堆叠两层LSTMs。

我们将使用二分类交叉熵损失函数,Adam优化器,并使用early stopping回调函数,当验证集损失开始增加时,该回调函数将停止训练。

我们的最佳模型之一的训练集和验证集的准确性。验证损失在第5个epoch达到最低点,训练提前停止。

4.结果

表现最好的模型确实是最复杂的——在一组未知的测试集上有93.8%的准确率,这个测试集包含大约155,000个评论。然而,值得注意的是,最简单的模型达到了93.1%的准确率。

我们最简单的模型只包含三个隐藏层:嵌入长度只有8的嵌入层、只有8个单元的LSTM层以及一个16个单元的全连接层。网络总共有81k的参数,训练耗时53分钟。

代码语言:javascript
代码运行次数:0
运行
复制

我们最复杂的模型,也是最终的赢家,除了LSTM层,还有7个隐藏层,包括dropout层、卷积层和pooling层:

对于二分类,受试者工作特征 (ROC)曲线很好地反映了模型的区分能力。它反映了这样一个事实:当您降低最终概率输出的阈值时,您会获得更高的真正率 ,但也会导致更高的误报率 。一个完美的模型会将更高的概率分配给正的样本,而不是负的样本,因此降低阈值将得到更多的正样本而不是更多的负样本。这样,曲线就会紧靠左上角。AUC相当于测量ROC曲线下的面积(越接近1越好) 。这里我们的模型在测试数据上的AUC为0.975.

让我们使用一些例子来测试一下我们的模型。我们会给它四个句子。分数小于0.5代表着负样本(消极情绪),大于0.5代表着正样本(积极情绪)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
这本糟糕的书真让人讨厌,真的,它让真让人难受。

我们的模型正确的给它打了0.01分(尽可能接近0)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
我爱这本书,它很杰出、幽默而且新奇。

这一句得到0.99分。如果有歧义的句子会怎么样呢:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
这本书很不错,但是它让我觉得难过。

0.52分,我们的模型要被我们玩哭了。那如果积极的词和消极的词同时出现呢:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
这个故事真的很棒,但是解说员有点可怕。

0.72,模型给了“真的很棒”更多的权重。可能如果我们重新训练模型,能得到不同的结果。

最终,让我们观察一下我们的模型学习到的词嵌入向量。学到的我们字典里每一个单词的向量代表着关于这个单词的信息,这些信息用于预测词是正向的还是负向的。为了更直观的表示他们的空间关系,有助于我们理解,我们需要将这些词向量降维。

主成分分析(PCA)是一个将含有丰富信息的多维数据(比如包含很多变量)转化为坐标轴对齐(比如数据的第一维)的方法。我们会使用PCA将我们的128维的嵌入向量转化为2维数据,然后我们就可以将单词关系可视化:

如图,一个2D图表,从我们学到的词嵌入向量中选取了两个最主要的维度。

使用主成分分析法将词语表中61个常见词语转化为两维数据生成了上图。主要分为褒义词,比如“迷人的”、“卓越的”,标为蓝色;贬义词像“糟糕的”和“无聊的”,标为红色;还有中性词,比如“行为”和“书本”,标为黑色。

词嵌入清楚地反映了这次词语的词性,甚至可以看出更细致的关系。比如,我们直觉地感知近义词的关系:“单调的”和“单调”、“更糟”和“最差”、“乏味”和“厌倦”、“声音”和“叙述者”、“音频”和“质量”等等。

通过对整个词语表重复这个过程,只看最主要的成分,可以找到最积极和最消极的词语。分数最高的词语是“充分利用”,而分数最低的词语呢,就是“Refund(退款)”。

最后,我们在整个训练集上进行预测,来找“最差”和“最好”的评论。

“最差”评论:

  • 浪费,浪费,浪费,买这本书就是浪费,省点钱吧。
  • 什么可以使<标题>更好呢?
  • 没有什么可以使这本书更好了。温馨提醒,这本书不像有些人说的那么有趣,谁会买一本有趣的吸血鬼的书呢?
  • 你认为下一个会听到什么呢?
  • 不确定,读者会对吸血鬼或天启发表评论,而不是对作者或书籍朗读者。
  • 你为什么不喜欢<朗读者>的的表现呢?
  • 因为她的音色,她读每一个角色感觉都是一样的。
  • 你不喜欢这本书,但它有没有什么优点呢?
  • 没有...甚至更糟糕,因为它是数字媒体而不是实体书,我都不能把它拷贝下来回顾。我之前读/听过比这本书好太多的产品。
  • 还有什么补充的吗?
  • 我是对任意题材吸血鬼和天启故事的真爱粉,这本书就不该写出来更别说...

“最好”评论:

  • 太棒了
  • 太棒了太棒了太棒了太棒了太棒了太棒了...(此处省略N个“太棒了”)太棒了太棒了太棒了太棒了太棒了太棒了太棒了

via https://towardsdatascience.com/scraping-and-sentiment-analysis-of-1-5-million-audible-reviews-3502fa6bc86c

封面图来源:https://pixabay.com/zh/photos/%E4%B8%8D%E5%BF%AB%E4%B9%90-%E7%94%B7%E5%AD%90-%E9%9D%A2%E5%85%B7-%E4%BC%A4%E5%BF%83-%E8%84%B8-389944/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技评论 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 CNN 的中文对话情感分析
这是 Data Mining 这门课的期末项目,主要记录一下中文文本的处理方式与 CNN 作用于文本特征的原理,网络训练调参和与其他模型的对比就不详细记录了。
caoqi95
2019/03/28
2.2K0
基于 CNN 的中文对话情感分析
深入解析情感分析技术:从篇章到属性
情感分析,也被称为情绪分析或意见挖掘,是自然语言处理(NLP)的一个分支,旨在识别和提取文本中的主观信息,如情感、情绪或意见。
TechLead
2023/10/21
8340
深入解析情感分析技术:从篇章到属性
FastAI 之书(面向程序员的 FastAI)(五)
在第一章中,我们看到深度学习可以用于处理自然语言数据集并取得出色的结果。我们的示例依赖于使用预训练的语言模型,并对其进行微调以对评论进行分类。该示例突出了 NLP 和计算机视觉中迁移学习的区别:通常情况下,在 NLP 中,预训练模型是在不同任务上训练的。
ApacheCN_飞龙
2024/02/17
5920
FastAI 之书(面向程序员的 FastAI)(五)
DNN/LSTM/Text-CNN情感分类实战与分析
最近把2014年Yoon Kim的《Convolutional Neural Networks for Sentence Classification》看了下,不得不说虽然Text-CNN思路比较简单,但确实能够在Sentence Classification上取得很好的效果。另外,之前@霍华德大神提了这个问题,链接如下:
zenRRan
2019/08/09
2.7K3
在深度学习TensorFlow 框架上使用 LSTM 进行情感分析
在这篇教程中,我们将介绍如何将深度学习技术应用到情感分析中。该任务可以被认为是从一个句子,一段话,或者是从一个文档中,将作者的情感分为积极的,消极的或者中性的。 这篇教程由多个主题组成,包括词向量,循环神经网络和 LSTM。文章的最后给出完整的代码可以通过回复公众号"LSTM"获取。 在讨论具体的概念之前,让我们先来谈谈为什么深度学习适合应用在自然语言处理中。 深度学习在自然语言处理中的应用 自然语言处理是教会机器如何去处理或者读懂人类语言的系统,目前比较热门的方向,包括如下几类: 对话系统 - 比较著名的
机器学习AI算法工程
2018/03/15
2.5K1
基于机器学习的情感分析方法
上次课程我们介绍了基于情感词典的情感分析方法,本节课我们尝试基于机器学习的情感分析方法,以电影中文文本情感分析为例,最常见的就是对电影评论数据进行情感分类,如积极情感(positive)、消极情感(negative)等。而目前可以用来处理这类问题的机器学习模型有很多,如朴素贝叶斯、逻辑回归、SVM、CNN等等,本文采用深度学习TextCNN模型进行电影评论数据的情感分类,下面看其具体实现的过程。
用户7569543
2021/02/02
4.5K1
使用 RNN 进行情感分析的初学者指南
情感分析可能是最常见的 自然语言处理 的应用之一。我无需去额外强调在客服工具中情感分析的重要性。本文将利用循环神经网络,训练出一个基于 IMDB 数据集的电影评论分类器。如果你想了解更多关于深度学习在情感分析中的应用,这里推荐一篇很棒的论文。
AI研习社
2018/07/26
1K0
使用 RNN 进行情感分析的初学者指南
一条龙搞定情感分析:文本预处理、加载词向量、搭建RNN
相比于计算机视觉,NLP可能看起来没有那么有趣,这里没有酷炫的图像识别、AI作画、自动驾驶,我们要面对的,几乎都是枯燥的文本、语言、文字。但是,对于人工智能的征途来说,NLP才是皇冠上的那颗珍珠,NLP是AI完全问题,当NLP的问题解决了,机器才真正具备了理解、思考的能力,我们才敢说实现了真正的“智能”。
beyondGuo
2019/05/13
3.2K3
一条龙搞定情感分析:文本预处理、加载词向量、搭建RNN
斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型(ELMo, transformer)
教程地址:http://www.showmeai.tech/tutorials/36
ShowMeAI
2022/05/16
9300
斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型(ELMo, transformer)
在 Netflix 评论中做情感分析的深度学习模型
在这篇文章中,我将介绍情感分析的主题和怎样实现一个可以识别和分类Netflix评论中人的感情的深度学习模型。
AI研习社
2019/07/12
9170
在 Netflix 评论中做情感分析的深度学习模型
Sequence to Sequence Learning with Neural Networks论文阅读
作者(三位Google大佬)一开始提出DNN的缺点,DNN不能用于将序列映射到序列。此论文以机器翻译为例,核心模型是长短期记忆神经网络(LSTM),首先通过一个多层的LSTM将输入的语言序列(下文简称源序列)转化为特定维度的向量,然后另一个深层LSTM将此向量解码成相应的另一语言序列(下文简称目标序列)。我个人理解是,假设要将中文翻译成法语,那么首先将中文作为输入,编码成英语,然后再将英语解码成法语。这种模型与基于短语的统计机器翻译(Static Machine Translation, SMT)相比,在BLUE(Bilingual Evaluation Understudy)算法的评估下有着更好的性能表现。同时,作者发现,逆转输入序列能显著提升LSTM的性能表现,因为这样做能在源序列和目标序列之间引入许多短期依赖,使得优化更加容易
mathor
2020/03/17
1.5K0
使用PyTorch建立你的第一个文本分类模型
我总是使用最先进的架构来在一些比赛提交模型结果。得益于PyTorch、Keras和TensorFlow等深度学习框架,实现最先进的体系结构变得非常容易。这些框架提供了一种简单的方法来实现复杂的模型体系结构和算法,而只需要很少的概念知识和代码技能。简而言之,它们是数据科学社区的一座金矿!
磐创AI
2020/03/04
2.2K0
用于情感分析的Transformers
本文首次介绍的Transformers模型。具体来说,将使用本文中的BERT(来自Transformers的双向编码器表示)模型。
代码医生工作室
2020/03/20
3.4K0
从零开始构建大语言模型(MEAP)
像 ChatGPT 这样的大型语言模型(LLM)是在过去几年中开发的深度神经网络模型。它们引领了自然语言处理(NLP)的新时代。在大型语言模型出现之前,传统方法擅长于分类任务,如电子邮件垃圾分类和可以通过手工制作的规则或简单模型捕获的简单模式识别。然而,在需要复杂理解和生成能力的语言任务方面,例如解析详细说明、进行上下文分析或创建连贯且上下文适当的原始文本时,它们通常表现不佳。例如,以前的语言模型无法根据关键字列表编写电子邮件-这对于当代 LLM 来说是微不足道的任务。
ApacheCN_飞龙
2024/05/24
1.3K0
从零开始构建大语言模型(MEAP)
AI写作(七)的核心技术探秘:情感分析与观点挖掘
情感分析与观点挖掘在 AI 写作中起着至关重要的作用。情感分析能够帮助 AI 理解文本中的情感倾向,无论是正面、负面还是中性。在当今信息时代,准确把握用户情绪对于提供个性化体验和做出明智决策至关重要。例如,在社交媒体上,企业可以通过情感分析了解用户对其产品或服务的评价,从而及时调整营销策略。在 AI 写作中,情感分析可以使文章更具感染力,更好地与读者产生情感共鸣。
正在走向自律
2024/12/18
2340
AI写作(七)的核心技术探秘:情感分析与观点挖掘
7模型集成:细粒度用户评论情感分析冠军思路及源码
在本次比赛中,采用了自己开发的一个训练框架,来统一处理TensorFlow和PyTorch的模型。在模型代码应用方面,主要基于中国香港科技大学开源的RNet和MnemonicReader做了相应修改。在比赛后期,还加入了一个基于BERT的模型,从而提升了一些集成的效果。
机器学习AI算法工程
2019/10/29
1.8K0
7模型集成:细粒度用户评论情感分析冠军思路及源码
教程 | 在Python和TensorFlow上构建Word2Vec词嵌入模型
选自adventuresinmachinelearning 机器之心编译 参与:李诗萌、刘晓坤 本文详细介绍了 word2vector 模型的模型架构,以及 TensorFlow 的实现过程,包括数据
机器之心
2018/05/09
1.9K0
教程 | 在Python和TensorFlow上构建Word2Vec词嵌入模型
NLP项目实战01--电影评论分类
欢迎来到本篇文章!在这里,我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言,我们将关注情感分析任务,即通过分析电影评论的情感来判断评论是正面的、负面的。
陶陶name
2023/12/09
5130
NLP项目实战01--电影评论分类
教程 | 如何用50行代码构建情感分类器
语言把人类联系在一起。语言是一种工具,它既可以让我们把想法和感受传达给另一个人,也能让我们理解别人的想法和感受。我们大多数人从 1 岁半到 2 岁开始说话。人脑是如何在如此年幼的时候掌握如此大量知识的,这仍是未解之谜。但是,人们已经发现大部分语言处理功能发生在大脑皮层内。
机器之心
2018/07/30
5210
教程 | 如何用50行代码构建情感分类器
如何准备电影评论数据进行情感分析
准备工作从简单的步骤开始,比如加载数据,但是对于正在使用的数据非常特定的清理任务很快就会变得很困难。您需要从何处开始,以及通过从原始数据到准备建模的数据的步骤来执行什么操作。
anthlu
2018/02/06
4.4K0
如何准备电影评论数据进行情感分析
推荐阅读
相关推荐
基于 CNN 的中文对话情感分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验