MarTechApe

View Original

如何为TED Talk做一套简易的推荐系统?

喜欢看TED演讲吗?在数以千计的TED演讲中,如何找到自己感兴趣的那些?Kaggle上有这样一个数据集: https://www.kaggle.com/rounakbanik/ted-talks/data,包含了两千多个TED演讲的文稿。这样一个内容丰富,结构整齐的文字数据集,太适合作为文本分析的材料了!我们是否可以像TED的官网页面一样,做一个简易版的内容推荐系统呢?

虽说TED官网的推荐引擎要复杂得多,并且会根据用户与内容的交互数据用协同过滤之类的方法(collaborative filtering)生成推荐,但针对没有历史数据的新用户,根据其正在观看的内容本身生成推荐就变得尤为重要。闲话少说,让我们开始吧!

第一步:检查数据,确定思路

数据以表格形式存储,“transcript”这一栏包含了每个演讲的文稿,就像这样:

我们的最终目标,是通过创建每个文稿内容间的相似度指标,来找到与某个给定演讲最为相似的4个演讲,并将它们的标题显示出来,推荐给用户。

浏览数据后我们发现,URL中包含了演讲的标题,并且只要用简单的字符串拆分操作便可将标题提取出来,如下所示:

准备好了素材,接下来我们便可以通过三步来构建内容推荐系统:

  1. 创建每个演讲文稿的文本向量

  2. 将上述文本向量整合成一个相似度矩阵

  3. 根据相似度矩阵,为每个演讲找到与之最相似的另外4个演讲

第二步:准备数据,用TF-IDF构建文本向量

TF-IDF(Term Frequency-Inverse Document Frequency 词频—逆文本频率指数)是一个重要的文本分析概念。

首先,为了方便分析文本,我们将每一篇演讲文稿视为一个“文档”(Document),所有的文档组成了整体集合(Corpus)。然后,我们创建一个向量,表示每个文档中出现的单词的个数。

如上所示,对于每个文档,我们都创建了一个向量来计算每个单词出现的次数。因此,第一行的向量(1,1,1,1,0,0)表示文档1中“ This”,“ is”,“sentence”,“one”,“two”,“three”的单词计数。所有文档的向量合起来就是一个计数矩阵。

但是,这样的文本表达形式有一个问题:它没有考虑单个单词在一个文档中的重要性。举个例子,“one”一词在文档1中仅出现一次,而在其他文档中则不存在,因此,“one”是文档1的重要词,因为它能将文档1与其他文档区别开来。但是如果我们看一下文档1的计数向量,我们可以看到“one”的计数为1,和“ This”,“ is”等单词一样。所以,“one”在文档1内部的重要性不高。有没有什么方法可以同时衡量单词在文档中和文档间的重要性呢?

如果一个单词同时满足以下两点,我们便可以说这个单词很重要:

  1. 单词在单个文档内出现的频率很高

  2. 单词在整个语料库里出现的频率很低

单词的重要性随着它在单个文档中出现次数增多而增加,但同时随着它在整体集合中出现次数增多而下降。词频(Term Frequency)指代前者,逆文本频率(Inverse Document Frequency)指代后者。两者的乘积,TF-IDF,即表现了单词的重要性。

运用scikit-learn之类的机器学习算法包,我们可以很方便地创建一个表示文本数据的TF-IDF矩阵:

第三步:计算相似度,找到最相似的文档

通常我们会使用余弦相似度(cosine similarity)计算TF-IDF向量间的相似度,并以此找出语料库中相似的文档。形象地看,余弦相似度是在测量两个TF-IDF向量之间距离有多近。然后,将一个个TF-IDF向量组成一个余弦矩阵,以表示每个文档与另一个文档的相似程度,如下所示:

用sklearn的算法包可以很容易地做到这一点:

根据上面的相似度矩阵,为每一行的文档找到相似度最高的5个文档的标题(其中一个是文档自己)。这样,为给定演讲找4个相似内容的推荐系统便完成了:

让我们看看推荐的效果如何。我们选Al Gore 的一篇避免气候危机的演讲来看看效果:

 根据我们的推荐系统,与之最相似的4个演讲的标题是:

我们看到,根据TF-IDF相似度推荐的内容和我们选定的演讲主题非常相似。怎么样,这个方法还不错吧?

如果你也想深入学习文本分析及其在工业界的应用,那么就不要错过MarTechApe携手谷歌美国软件工程师、东南亚独角兽公司Grab的资深数据科学家,共同打造的《Python自然语言处理》课程,教你从0到1地学会应用超级广泛的NLP技术!

1. 来自Google和Grab的课程主讲老师

2. 理论与实践相结合的课程安排

这门课共分6章节,每章节都由理论课程与编程实践两部分组成。确保每一位学员可以学以致用、真正理解课堂内容。在完成课程后,学员不仅对自然语言处理有了一定的掌握,同时也熟练运用Python编程语言。

完整的课程大纲

3. 课程适合人群与学员收获

适合人群

  • 想要系统性学习自然语言处理,了解如何应用NLP解决文本分析问题的人

  • 想学习如何用Python做数据科学项目的人

  • 想在数据科学、人工智能等领域,找到职业方向的人

  • 想进入高科技公司的人

  • 虽然从没有过数据科学经验,但是想要用数据科学前沿技术来提升自己工作能力与求职竞争力的人(尤其是,当你的工作需要经常与用户调研、定性研究、文本分析打交道时,NLP可以大大提高你的工作效率!)

  • 在工作/学习中需要与自然语言处理打交道的人(尤其推荐工作中负责AI产品的人来报名课程)

  • 希望从其他行业领域转型到数据科学的人

你将获得

  • 来自Google美国与Grab新加坡的资深数据科学家的一手经验输出

  • 丰富的行业洞察与NLP的实际案例

  • 理论和动手实践相结合,掌握典型自然语言分析的底层逻辑

  • 在课程中完成一份自己的NLP语义分析与主题模型

  • 课程结束后,可以将完整的数据科学工作方法运用到感兴趣的数据集上

  • 获得数据岗位资深面试官的内部分享,助力数据科学的求职进程

4. 常见问题

课程形式是怎样的?

  • 录播课程可随时随地轻松上课,永久回放

  • 移动端、桌面端两种方式观看课程

  • 可获得完整的课件、丰富的课外阅读材料

课程上线时间是?

  • 第一课将于6月13日(本周六)上线,此后每周日上线新一章节的课程,共6周解锁所有课程

  • 对于每一章节的课程,上线后,学员可自行选择学习时间

遇到课程问题如何咨询?

  • 可在班级群内提出课程内容问题并获得解答

5. 新课上线,预售优惠!

课程形式是怎样的?

  • 课程原价:¥399人民币

  • 预售优惠(双人团购)6折优惠:仅需¥239人民币

  • 预售期:5/20~6/20,之后恢复原价

    还等什么,快来一起走进自然语言处理的世界吧!

官网购买通道

-预售团购不接受美元支付-