雷锋网按:本文为雷锋字幕组编译的技术博客,原标题Lyric Analysis with NLP & Machine Learning with R,作者为Debbie Liske。
翻译 | 刘朋 Noddleslee 程思婕 余杭 整理 | 凡江
基于R语言对Prince的音乐的歌词研究:用文本挖掘和探索性数据分析(EDA)来了解这位艺术家的生涯。
这是由三部分组成的系列辅导教程的第一部分,在这个系列里,你将会使用R语言对传奇艺术家Prince的歌词通过各种分析任务进行实例研究。这三个教程覆盖以下内容。
第一部分:文本挖掘和探索性数据分析
第二部分:情感分析和自然语言处理的主题模型
第三部分:基于机器学习的预测分析
介绍
音乐的歌词经常会代表着一个艺术家的观点,但是流行歌曲揭示的是社会大众所想听到的东西。歌词分析不是一件容易的工作,因为它的结构通常和散文有着很大的区别,它需要谨慎的假设和特定的分析技巧选择。音乐的歌词渗透到我们的生活以及无所不在地细微地影响着我们的思想。预测性歌词的概念正在兴起,同时作为研究论文和毕业论文的主题变得越来越流行。这个案例分析会涉及这个新兴学科的几个部分而已。
Prince: 艺术家
为了庆祝Prince留下的令人激动的和多样化的作品,你将在他的歌词中探索偶尔清晰却时常隐晦的信息。然而,你不必喜欢Prince的音乐进而欣赏他对全球对许多流派发展的影响。《滚石》杂志将Prince列为一直以来的第18位最优秀的作曲家,仅次于鲍勃·迪伦(Bob Dylan)、约翰·列侬(John Lennon)、保罗·西蒙(Paul Simon)、乔尼·米歇尔(Joni Mitchell)和史提夫·旺德 (Stevie Wonder)等人。随着预测“热门歌曲”接近现实的可能性,歌词分析正在慢慢地进入数据科学界。
“Prince 是一个着魔于音乐的人 – 一个狂野的多产作曲家,也是吉他,键盘和鼓的演奏家,同时也是骤停打击乐,摇滚,R&B和流行音乐的大师。虽然他的音乐和大众流派背道而驰。” – 乔治.帕雷莱斯(纽约时报)
在本教程中,该系列的第一部分,你将会使用整洁文本框架在一组歌词上使用文本挖掘技术。整洁数据集有一种特定的结构,其中每个变量是一列,每个观察是一行,每个观察单元是一个表。在清理和调整数据集之后,在观察Prince歌词的不同方面的同时,你将会创建描述性的统计和探索性的可视化。
前提
本系列的第一部分需要有着对整洁数据的基本理解 – 特别是像用于数据转换的dplyr,可视化的ggplot2 以及来自于magrittr管道操作的%>% 等几个包。每个教程会描述你可以用于分析的工具,但是并不是每一步的细节。你将会注意到一些步骤是通常结合使用%>%操作符。由于这是一个案例学习,重要的是记住你所做的推论都只是观察性的;因此,相关性并不意味着因果关系。
提示:关于你使用的工具的背景,Garrett Grolemund 和 Hadley Wickham的《基于R语言的数据科学》,和Julia Silge 和 David Robinson的《基于R语言的文本挖掘》是两个很好的资源。
第2和第3部分
在其中一个教程中,第二部分,你将会了解涵盖情感分析和主题模型来捕捉Prince的音乐中的所有情绪和主题以及它们在社会方面的应用。你将会使用一个情感词汇,评估二元的和分类的情绪,画出随着时间的发展趋势,查看n-grams模型和单词的关联。你还将使用自然语言处理和聚类技术,比如潜在狄利克雷分配(DLA)和 K近邻,对歌词中的主题进行梳理。
在另一个教程中,第三部分,你将会使用你的探索性结果来预测一首歌曲的发布时间,更有趣的是,预测一首歌是否会基于它的歌词登入Billboard 排行榜。你将会使用机器学习工具,比如决策树(rPart和C50),K近邻(class)和朴素贝叶斯(e1071)来产生可接受文本的分类器。
所有这三部分都将会使用相同的数据集,即Prince的歌词,发布年份,BillBoard位置。 这次研究的技术也可以应用于其他类型的文本。事实上,标准散文的结果更容易解释,因为歌词一般常常是用间接的信息和细微的差别来设计的。
总之,歌词分析有很多方法。这些教程覆盖了下面图表中高亮红色的部分。注意的是这个图表是一个非常模糊的图片的简单的高级表示,并不代表图片本身。事实上,建模和机器学习的很多方面都是模糊的,并不一定适合下面展示的单一框。所以,在看图片时带上3D眼镜可能会更有意义!
目标
除了学习和实践新技能,这个教程旨在阐述歌词分析概念的基本问题。最近的研究表明“歌词智力”在流行音乐中正在走下坡路。一些研究甚至表明在排名第一的热门歌曲中,使用的词汇与美国三年级学生的阅读水平是一致的。是否可以使用文本挖掘、自然语言处理、机器学习或其他的数据科学方法来对这样的主题进行深入了解? 是否可以根据一首歌曲的被接受程度来确定对社会具有吸引力的主题? 是否可以预测是否一首歌曲会做的很好仅仅依赖于歌词分析? 在第一个教程中,作为探索性的练习,你将会检查Prince音乐的歌词复杂程度。
问题
在深入之前,思考一下你正在试图发现什么,还有感兴趣的问题是什么。首先你将会对数据集进行分析,它看起来什么样子的?有多少歌曲?歌词是什么样的结构? 需要做多少清理和争论?事实是什么?频率这个词是什么以及它为什么重要?从技术的角度,你想要理解并为情感分析、自然语言处理以及机器学习模型准备数据。
“音乐一直以来都是一个和大众交流的有效方式,歌词在这其中扮演着重要的角色。然而,对歌词在社会福祉中扮演的角色的研究机会却被大大的低估了 --帕特里夏·福克斯·兰瑟姆”
数据
为文本挖掘获得数据的流行办法是使用rvest包来从网上搜取内容。我能够从不同的网站上搜取BillBoard信息和Prince歌词,并把他们加入到歌曲的标题中。因为不一致的标题命名约定,导致了一些争论。然后我做了一个主观的决定,去除了不是原版的所有歌曲,即混音,扩展版本,俱乐部混音,重制等等。为了避免重复,我还删除了收录了他热门歌曲的历史合集的专辑。我做了一些小清理,并保存结果为可以用于本教程的csv文件。
由于第一部分专注于文本挖掘,我没有在这里提供代码,但是如果你愿意的话,数据集是可以在这里下载。
导入类库
读取数据
从csv文件中有几种方式读入数据,我倾向于使用read.csv()加载数据框架,即歌词、发布年份、Billboard排名位置。需要注意的是,默认情况下,R语言把所有的字符串转换成因子。这可能会导致下游问题,但是你可以通过设置stringAsFactor参数为FALSE来解决这个问题。
你可以使用names()函数来看数据框架中的列。
因为我创建了这个文件,我知道X是行数,text是实际的歌词。其他必需的项包括song, year, peak(代表它在Billboard中的位置), US Pop 和 US R.B 代表着在美国(流行音乐和R&B排名)峰值图位置,所以保存好这些,删去其他的项。
使用原始的数据集来做这件事 prince_orig,然后使用%>%管道操作传入select()。这样的方式你能够从左到右的读取代码。
另外,注意的是,select()允许你一次重新命名所有的列。因此将文本设置成歌词然后用_代替.重命名US列项。然后存储为Prince,之后再整个教程中你都将会用到。Dplyr提供了一个函数叫glimpse()会使你在转置视图中更容易地查看数据。
第一个显而易见的问题是有多少个观察和列项?
使用dim()函数,你将看到结果是7个列项和824个观察,每个观察都是一首歌。如我所说。多产啊!
请看其中一首歌的lyrics项,你可以了解一下它们的结构。
这里有很多机会来清理它们,让我们开始吧。
数据调整
基本的清理
有很多不同的方法使你来清理数据。其中一个选择是使用tm文本挖掘包把数据框架转换成语料库和文本术语表,然后使用tm_map()函数做清理。但是本教程目前将专注基础,使用gsub和apply()函数来做脏工作。
首先,通过使用gsub()创建一个小函数来处理大部分场景以避免那些烦人的收缩,然后再所有歌词上应用该函数。
你还将注意到特殊字符弄脏了文本。你可以用gsub()函数和简单的正则化表达式来去除它们。 请注意,在这步骤之前,扩充收缩是非常重要的!
为了一致性,使用tolower()函数来把所有的内容都转换成小写格式。
检查歌词,现在它们展示了原始文本之上一个很好的、更简洁的版本。
在文本挖掘中调整数据的另一个普遍的步骤是词干,或者叫拆分单词为它们的词根含义。这是可以在以后讨论的话题,现在,看一下Prince的数据框架。
如你看到的,有37年的歌曲,而排名最低的歌曲是在88的位置。你也可以看到对于year和peak项有很多NAs。因为你将要做不同类型的分析,在Prince数据框架中保留完整的数据集,仅在需要的时候进行筛选。
加入一些新的项
因为你的一个目标问题是寻找跨越时间的歌曲趋势,并且数据集包含着个人发行年份,你可以创建存储桶来以十年划分年份。使用dplyr的mutate()函数来创建新的decade项。创建存储桶的一个办法是采用ifelse()和%in%操作符来根据年份过滤歌曲转换成十年。然后存储结果到Prince(实际是增加了一个新的项)
你可以对chart_level做同样的事,它代表着一首歌是否进入了前10名,前100名或者没有上榜。它们是互相排斥的,所以前100并不包含前10。
另外,创建一个叫做charted的二值项表明一首歌是否入围Billboard榜单。使用write.csv()来保存为了以后的教程中使用。
描述性的统计
为了个性化图表,我喜欢创建一个唯一的颜色列来保持视觉的一致性。Web上有很多可以通过下面所展示的十六进制码来获得不同的颜色的地方。如果你有对于图表有这样的喜好,你也可以在需要的时候通过使用ggplot()创建自己的主题。
在开始进行文本挖掘之前,先从基本的角度看看你的数据在歌曲级别的位置。现在是一个很好的时机来了解一下Prince每十年发行的数量。提醒一下,他于1978年开始自己的职业生涯并一直持续到2015年(在上面总结的数据中可见)。但是因为我们现在关注的是趋势,而且数据集上在year项有很多空白值,你将想要在第一张图表中过滤掉所有的发行年为NAs的数据。
歌曲统计
通过使用dplyr的filter(),group_by()以及summarise()函数,你能够按照decade来分组,然后计算出歌曲的数量。函数n()是多个聚合函数之一,也是对于在分组数据上使用summarise()有用的。然后使用ggplot()和geom_bar()创建条形图然后将分类填充到条形图中。
这清楚地展示了20世纪90年代是他最活跃的十年。
现在创建一个类似的图表叫chart_level。
记得对decade和chart_level使用group_by()函数,你将会看到趋势。
在这个图表中,你仅需要看一下表上的歌曲,使用peak > 0来过滤掉其他的东西。将group_by对象导入到summarise()然后使用n()来统计歌曲的数量。当你把它存到一个变量中便可以导入到ggplot()来绘制一个简单的条形图。
洞见
注意到所有Prince的上排行表的歌曲,大部分都是前10名。但是更有趣的是在他创作新歌最多产的十年是90年代,但是更多上排行表的是在80年代。为什么会发生这样的事儿?请在看文本挖掘部分的时候记住这个问题。
为了使用完整数据集来分析歌词,你可以删除参考图表级别和发布年份来获得更大量的歌曲去挖掘。
如你看到的,Prince写过成百上千首在数据中没有发布日期的歌曲。对于情感分析和探索性分析来说,你可以使用所有的数据,但是对于随时间的变化趋势,你仅有一个更小的处理集合。这没问题,仅仅知道就好了。
第一的歌曲
对于那些Prince狂热的粉丝来说,下面是一个快速浏览排行榜第一的歌曲(请注意,你可以用来自于knitr包的kable() 和来自于kableExtra包的kable_styling()以及来自于formattable包的color_tile()来创建一个更规范的HTML输出)
文本挖掘
文本挖掘也可以被认为文本分析。目标是发掘可能未知的或者被隐藏在字面意思之下的相关信息。自然语言处理是一种用于挖掘文本的方法。它试图通过标记、聚类、提取实体和单词关系来解释书面语言的模糊性,并使用算法来明确主题和量化主观信息。首先你将打破词汇复杂性的概念。
词汇复杂性在不同上下文环境中可能意味着不同东西,但是现在,假设它可以被这些测量的组合所描述。
单词频率:每首歌单词的数量
单词长度:文本中每个单词的平均长度
词汇多样性:在文本中不单词的数量(歌曲词汇)
词汇密度:不同单词的数量除以所有单词总数(字词重叠)
整洁文本的格式
分析之前,你需要把歌词分解为一个个单词,然后开始深入挖掘。这个过程叫做标记化。
数据格式和标记化
请记住有不同的方法和数据格式可以用做文本挖掘。
语料库:用tm文本挖掘包来创建的文档的集合
文档-词矩阵:一个列出在语料库出现的所有单词的矩阵,其中文档是行,单词是列。
整洁文本:每行都有一个令牌的表。在本例中,令牌即一个单词(或者是在第二部分讨论的n-gram)。标记化是一个将歌词拆分为令牌的过程。本教程将用tidytext的unnest_tokens()函数来完成。详细信息,请查阅tidytext文档。
但是在你开始令牌化任何东西之前,清理数据还有一个步骤。很多歌词在转录的时候会包括像“重复合唱”或者“桥牌”“诗歌”等这样的标签。还有很多不希望的单词会弄脏结果。有了之前的分析,我选择一些可以摆脱的方法。
下面是需要手动删除的多余单词的列表。
要取消标记,使用己加载的tidytext类库。你可以开始利用dplyr的强大功能同时一起加入几个步骤。
在文本整洁框架中,你既需要将文本分解成单独的标记又需要把文本转换成一个整洁的数据结构。使用tidytext的unnest_tokens()函数来做这个。Unnest_token() 需要至少两个参数:列输出名将被在文档取消后创建(本例中的word), 列输入保存当前文本(歌词)
你可以使用prince数据集,并导入unnest_tokens()函数,然后删除停止单词。停止单词是什么?你很了解它们。它们是对结果没有增加任何意义的很普通的单词。有不同的列表可供选择,但是你可以使用tidytext包的stop_words函数。
使用sample()展示一个这些停止单词的随机列表,使用head()限制在15个单词。
因此,在你将歌词标记为单词之后,使用dplyr的anti_join()函数删除停止单词。接下来,使用dplyr的filter()函数和%in%操作符来删除之前定义的不想要的单词。然后使用distinct()来去掉重复的单词。最后,你可以删除所有少于4个字符的单词。这是另一个主观决定,但是在歌词中,很多感叹词比如“是,嘿”,然后把结果存到prince_words_filtered。
注意:为了之后的参考,prince_words_filtered 是Prince数据的整洁文本版本: 没有了停止单词,没有不想要的单词,没有1-3个字符的单词。你会在一部分而并不是所有的分析中使用它们。
注意的是stop_words有一个word列,有一个叫做word的新列是被unnest_tokens()函数所创建的,所以anti_join()自动加入到word列
你可以检查你的新的整洁数据的结构的类别和维度。
Prince_words_filtered是一个有着36916个单词(不是唯一的单词)和10个列的数据。这有一个快照(我只选择一个单词,并将它限制在10首歌之中然后使用select()按顺序打印感兴趣项,再次使用knitr来格式化)。这里向你展示了标记化,未总结的,整洁的数据结构。
你能看到每行包含各自的能够在每首歌中重复出现的单词。
词汇频率
音乐中的个性化词频占有非常重要的一席之地,无论是常见词汇还是罕见词汇。这两方面都会影响整首歌的流行度。流行歌曲的作者都想知道的一个问题是词频和打榜歌曲是否有关联性。所以现在你需要利用简洁的数据做更深一步的探究,以得到每首歌的词汇统计。
为了测试Prince歌词的格式,可以根据歌曲名称和公告牌是否上榜分组,建立直方图来展示词频的分布。利用源Prince歌词得到一个真实的词频计数。再一次利用 group_by() 和summarise()函数计数。随后使用dplyr 和 arrange()排序。首先,看一下词频最高的歌曲,再使用ggplot()的直方图展示。
注意到上图是右偏的。考虑到歌词转录的性质,我怀疑是歌词输入的错误。所以,出自好奇,我观察打榜前十名且超过800个单词的歌曲。
我做了一点研究后发现这首歌曲有一段嘉宾表演的说唱。这就说得通了!记住,这份数据包含流行歌曲和R&B全球榜单,所以歌曲类型和地理因素可以影响你的假设。注意到这首歌曲在美国流行音乐榜的排名要远低于其它国家,比如在加拿大榜单其位列第五名。在心里记住这件事。
挑战:如果你想要亲自动手进行音乐分析,你可能需要查看The Million Song Dataset,它拥有超过50000名表演者的50个特征(例如:节奏,响度,舞蹈表现力等等)。将音乐特征融入到歌词有利于做非常全面的分析。
词汇榜首
为了粗略估计全部歌词集中最频繁使用的词汇,你可以在你干净的、过滤过的数据集使用count() 和 top_n()两个函数,得到前n名频繁使用的词汇。
然后根据计数结果,利用reorder()函数对词汇再度排名,使用dplyr的 mutate()函数生成有序的word变量。这方便使用ggplot()进行更友好的展示。
在最为流行的音乐中,爱是最为常见的主题。仅凭借这些最常用的词汇我不会做任何假设,但是你可以从中窥探艺术家的洞察力,当然不是全貌。在移步进行更深层次的调查之前,花一些时间获得一些视觉上的享受吧!
词云
词云在很多人中受到负面评价,如果你不谨慎地使用词云,那么在某些时候他们就会超出文本框。然而从本质上来说,我们都是视觉动物,能够以洞察力从这些可视化图中获得真正有意义的信息。看一些Sandy McKe的实例,并谨慎地使用词云图。
但是现在,使用一个新的、名为wordcloud2的包做一些酷的事情。这个包提供关于词云生成HTML控件的创造性的集合。你可以围绕一个单词观察其在文本的频率。(这个包在rMarkdown平台上面更新速率非常缓慢,并且对使用的浏览器有非常多的限制条件。希望它会有所提升。)
想获得更多乐趣的话,你可以加入一点数据美感。
流行词汇
截至目前我们已经观察所有歌曲中的流行词汇。如果你根据打榜名次分组后会发生什么?在上榜歌曲和未上榜歌曲中是否存在更流行的词汇?这些被认为是社会中流行的词汇。
注意到下图代码中使用slice(seq_len(n))的作用是为了获得chart_level不同类别的前几名。它的作用和top_n()是不同的,并且如果你在图形中使用刻面的话,这是更加方便的选择。(需要谨记这类技巧有不同方法)你可以使用row_number() 函数来确保在图形中你可以按照正确顺序呈现单词)。ggplot()默认设置是按照字母排序,并且实际操作中排序要优先于画图。
你现在从上面得到的见解是什么?
好吧,不同打榜歌曲中流行词汇是如此接近。这对于我们想通过歌词来预测一首歌是否成功打榜不是件好事。但是你仅仅了解到文本挖掘,自然语言和预测模型中的皮毛知识。
永不过时的词汇
音乐中一些词汇是永不过时的。永不过时的词汇超越了时间,能够吸引一大批听众。如果你按照每十年划分你的数据,这些词汇会上榜。使用过滤,分组和聚合获得Prince歌词每十年的流行词汇,观察什么词汇属于永不过时的,哪些是一闪即逝的。你可以使用ggplot() 中的 facet_wrap()绘制每十年的数据。
显而易见:爱,时间和女孩是历久弥新的词汇。但是识别流行词汇到底多容易呢?一个世纪就会轮换流行词汇是否为事实?能否简单认为上述的词汇在歌曲中是高度重复的呢?词频是否是识别歌曲主题的依据呢?这种分析歌词的方法是否适用于其它文本挖掘的任务呢,例如分析州政府的演讲?
词汇长度
对歌曲作者来说,词汇长度是一个有趣的话题。词汇越长,越难押韵和形成一种模式。下面的词汇长度的直方图展示正如你所期待的,仅有少数词汇的长度是非常长的。
这些疯狂的长词汇是哪些呢?我想这需要一个非常有趣的词云图!这是基于词的长度而非词频。显示如下:
词汇多样性
一个文本包含的词汇越多,其词汇多样性就越高。宋的词汇表呈现的是一首歌曲中有多少独特的词汇。可以用一个简单的图显示过去平均一首歌中有多少词汇是独一无二的。
这说明什么呢?过去的数十年间,Prince的歌词多样性具有一点轻微向上的趋势。这和打榜成功有多少相关呢?很难说,画出密度图和打榜历史再做更近一步的分析吧!
词汇密度
回忆本教程,词汇多样性等于独特词汇除以文章词汇的长度。这是词汇重复性的一个指标,词汇重复是歌曲作者的一个关键工具。词汇密度提升,重复性降低。(注意:这不同于顺序重复,那是歌曲作者的另一个技巧)
观察过去几年间Prince的词汇密度。考虑密度的话,最好保留所有词,包括停词。所以从原始的数据集和未经过滤的词汇开始。根据歌曲和年份分组,用n_distinct() 和 n()计算密度,把结果用 geom_smooth()传给ggplot() 。此外用stat_smooth()的lm模型做一个线性平滑模型。
为比较趋势,可以可视化打榜历史数据(例如:打榜成功的歌曲)和比较其多样性和密度。使用gridExtra的grid.arrange()函数并排地绘图。
你可以观察到过去几年间,Prince的词汇多样性和密度呈轻微上升趋势。怎样比较这个趋势和所有流行歌曲的关系呢?有研究显示打榜歌曲的词汇多样性和密度呈下降趋势,暗示重复性有所提升(例如:词汇更多,说得更少)。这个趋势和Prince的歌曲不同。另一个研究证明所有流行歌曲,多样性(独特词汇)在过去年间呈现上升趋势,这和Prince歌曲正相关。这可能是因为过去榜单排名试图丰富类型多样性。类型是数据的关键部分,但是这个变量在我们的数据集并不存在。这是否是因为榜单历史对流行歌曲的影响力日益衰微,对R&B/Rap的影响力日益加深?
挑战:我希望你能考虑这些结果,甚至鼓励你寻找不同数据集,并且自己动手练习。记住:相关性不同于因果关系。
TF-IDF
目前为止在整个数据集中使用的方法并没有强调如何量化文档中不同词汇在整个文档集中的重要性。你已经查看词频,并且移除停词,但这可能还不是最复杂的方法。
进入TF-IDF。TF代表词频。IDF代表逆向文件频率,它赋予经常使用的词汇低权重,同时给文本中罕见词汇更多权重。当你联合TF和IDF时,一个词汇的重要性调整为它在使用过程中的罕见程度。TF-IDF背后的假设是文本中更频繁使用的词汇应赋予更高的权重,除非它出现在很多文档中。公式总结如下:
• 词频(TF):一个单词在文档中出现次数
• 文件频率(DF):包含单词的文档数量
• 逆向文件频率 (IDF) =1/DF
• TF-IDF = TF * IDF
因此对于在集合中仅见于少数文档的任何单词,IDF是非常高的。你可以通过tidytext中的 bind_tf_idf() 函数来使用这个方法,以便检查每个打榜名次分类中最重要的词汇。这个函数用TF*IDF的乘积来计算和联合TF与IDF。它用经过过滤的数据集作为输入,每一行是一篇文件(歌曲)中的一个表示(词汇)。你会在新的一列看到结果。
所以,利用你原始的Prince的数据框和经过过滤的标记词,并且消除不受欢迎的词汇,但是保留停词。然后使用bind_tf_idf()运行公式并且建立新的列。
现在如你所见,对于最最常见的单词,IDF and TF-IDF都是0.(更科学地说,IDF的表现形式是自然对数 ln(1),所以那些词汇的IDF 以及 TF-IDF的值是0.)把你的结果作为参数传递给arrange() 然后以降序的方式展示tf-idf。通过增加这些步骤,你会以一种不同的视角观察Prince的歌词。
使用TF-IDF为观察潜在的重要词汇提供一种不同的视角。当然,解释是完全主观性的。注意到其中的模式了吗?
接下来,观察随时间变化的TF-IDF。
现在你看待这个问题已经有了更深层次的见解。‘永不过时’的词汇不再流行。仅仅利用每组一些词汇就能观察到新出现的主题是否可行呢?你将会在第二个教程学习这方面的知识以达到新的高度(第二部分:自然语言处理的情感分析和主题模型)
这个方法的词云图以全新的视角显Prince中的歌词的重要词汇,事情变的越来越有趣。
总结
在这个案例中,首先你以最基础的角度快速观察真实数据。然后进行一些处理:例如数据清洗和删除不提供信息的词汇,并开始歌曲的探索分析。
接下来,你通过把歌词转换词的表示以便于观察歌词复杂性的方法,更加深入地钻研文本挖掘。分析结果为接下来的情感分析和主题建模提供关键视角。
最后,你通过TF-IDF分析得到在文本中词汇背后的信息,并收获一些有趣的结论。你或许认为这是一个识别音乐主题的好方法,但此时你仅仅只是一知半解。第二部分强调运用无监督的LDA方法。在数据科学的各个层面,有很多方法可以获得内在的见解。在此案例的第二部分和第三部分,你将会学习到更多观点
希望你和我一样迫不及待想继续接下来的探索分析旅程:情感分析,话题建模和预测见解。
谢谢你的阅读,期待接下来教程能继续同行。
博客原址 https://www.datacamp.com/community/tutorials/R-nlp-machine-learning
更多文章,关注雷锋网 雷锋网
添加雷锋字幕组微信号(leiphonefansub)为好友
备注「我要加入」,To be an AI Volunteer !