0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何基于Tf-Idf词向量和余弦相似性根据字幕文件找出相似的TED演讲

zhKF_jqr_AI 来源:未知 作者:李倩 2018-06-30 09:32 次阅读

编者按:数据科学顾问Gunnvant Saini讲解了如何基于Tf-Idf词向量和余弦相似性根据字幕文件找出相似的TED演讲。

好吧,我喜欢TED演讲,谁不喜欢呢?当我查看Kaggle上的TED数据集(rounakbanik/ted-talks)时,有不少发现。首先,由于数据集包含许多TED演讲的字幕,因此我们有了一个非常丰富、语言学上结构良好的语料。其次,由于该语料具备良好的语言学属性,它很可能和Reuters 20 News Group或者古登堡语料库差不好。这让我灵机一动:

我有许多TED演讲的字幕数据,我能尝试找到一种根据演讲相似性推荐TED演讲(就像TED官网做的那样)的方法吗?

当然,TED官网所用的推荐系统,会比我这里演示的复杂得多,同时涉及一些用户交互的历史数据。

本文想要演示如何仅仅基于内容生成推荐。当你不具备任何用户交互数据时,比如在刚开始的时候,这一技术变得极为重要,它有助于向消费者提供内容相关的上下文推荐。

数据

字幕储存于transcript一列,每行对应一个演讲。

import pandas as pd

transcripts=pd.read_csv("E:\Kaggle\ted-data\transcripts.csv")

transcripts.head()

可以看到,从url很容易就能提取演讲的标题。我的目标是使用字幕文本创建相似性的测度,然后为给定演讲推荐4个最相似的演讲。

transcripts['title']=transcripts['url'].map(lambda x:x.split("/")[-1])

transcripts.head()

好了,数据预处理完毕,我可以开始创建推荐系统了:

为字幕创建向量表示

为上一步创建的向量表示创建一个相似性矩阵

基于某种相似性测度,为每个演讲选定4个最相似的演讲

使用Tf-Idf创建词向量

由于我们的最终目标是基于内容相似性推荐演讲,我们首先要做的就是为字幕创建便于比较的表示。其中一种方法是为每个字幕创建一个tfidf向量。但是,到底什么是tfidf呢?让我们先讨论下这个概念。

语料库、文档和频次矩阵

为了表示文本,我们将把每个字幕看成一个“文档”,然后将所有文档的集合看成一个“语料库”。然后,二维码将创建一个向量,表示每个文档中词汇出现的次数,像这样:

这些向量组成了一个矩阵,称为频次矩阵(count matrix)。不过,这样的表示方式有一个问题。比如,“one”在文档1中只出现过一次,但在其他文档中均未出现,所以“one”是一个重要的词汇。但是如果我们查看文档1的频次向量,“one”的权重和“This”、“is”等词一样,都是1. 而Tf-Idf可以解决这一问题。

词频-逆向文档频率(Tf-Idf)

为了理解Tf-Idf如何帮助识别词汇的重要性,让我们询问自己几个问题,如何决定一个词汇是否重要?

如果这个词汇在文档中多次出现?

如果这个词汇很少在语料库中出现?

同时满足1和2?

如果一个词汇在某个文档中频繁出现,但在语料库中的其他文档中很少出现,那么该词汇对这个文档很重要。词频(term frequency)衡量词汇在给定文档中出现的频繁程度,而逆向文档频率(inverse document frequency)衡量词汇在语料库中出现的罕见程度。两者之积Tf-Idf衡量词汇的重要程度。使用sklearn机器学习框架,创建Tf-Idf向量表示非常直截了当:

from sklearn.feature_extraction import text

Text=transcripts['transcript'].tolist()

tfidf=text.TfidfVectorizer(input=Text,stop_words="english")

matrix=tfidf.fit_transform(Text)

现在我们已经解决了如何在词向量中体现词汇重要性的问题,我们将开始考虑下一个问题,如何个找到给定文档的相似文档(在我们的例子中是TED演讲字幕)?

查找相似文档

通常,我们使用余弦相似度,衡量Tf-Idf向量的接近程度。也就是说,我将基于Tf-Idf向量创建一个余弦矩阵,表示文档两两之间的相似程度:

同样,使用sklearn做这个非常直接:

from sklearn.metrics.pairwise import cosine_similarity

sim_unigram=cosine_similarity(matrix)

创建了相似度矩阵后,我只需查询这一矩阵,在每一行找出4个余弦相似度最高的列,就可以为每个文档(字幕)选出最相似的4个文档了。

def get_similar_articles(x):

return",".join(transcripts['title'].loc[x.argsort()[-5:-1]])

transcripts['similar_articles_unigram']=[get_similar_articles(x) for x in sim_unigram]

让我们看下效果,比如,随便挑一个演讲,看看哪4个演讲和它最相似:

transcripts['title'].str.replace("_"," ").str.upper().str.strip()[1]

'AL GORE ON AVERTING CLIMATE CRISIS'

transcripts['similar_articles_unigram'].str.replace("_"," ").str.upper().str.strip().str.split(" ")[1]

['RORY BREMNER S ONE MAN WORLD SUMMIT',

',ALICE BOWS LARKIN WE RE TOO LATE TO PREVENT CLIMATE CHANGE HERE S HOW WE ADAPT',

',TED HALSTEAD A CLIMATE SOLUTION WHERE ALL SIDES CAN WIN',

',AL GORE S NEW THINKING ON THE CLIMATE CRISIS']

显然,从标题上看,这些演讲的主题是相似的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 向量
    +关注

    关注

    0

    文章

    55

    浏览量

    11590
  • 数据集
    +关注

    关注

    4

    文章

    1179

    浏览量

    24356

原文标题:TF-IDF和余弦相似度告诉你该看哪个TED演讲

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于序贯相似性测算法的图像模板配准算法

    入的研究.在传统的序贯相似性检测算法(SSDA)基础上,提出一种新的配准算法.实验证明,该算法比传统的SSDA算法在速度上有较大提高,能满足在线烟标检测系统中图像处理算法的实时性要求【关键】:模板配准
    发表于 04-24 10:02

    TF-IDF测量文章的关键相关研究

    停用词的移除、大小写字母转化和词干提取。4)获取查询。获取单词权重,对于可疑文档利用TF-IDF获得关键,并排序得到相应的关键列表。排在前n个的关键词组成一个查询,以此类推,本试验中n=5。5)检索
    发表于 01-26 10:38

    基于相似性度量的高维聚类算法的研究

    针对高维数据相似度难以定义的问题,本文提出了一种新的高维数据聚类算法。该算法基于一个能够更准确表达高维数据对象之间相似性的度量函数,首先计算对象两两之间的相似
    发表于 01-27 13:31 5次下载

    一中余弦相似度的改进方法

    位置时间序列常被应用到不同的研究领域,具有很高的商业价值。本文通过计算位置时间序列的余弦相似度找到确定与其近似的位置时间序列。同时针对余弦相似
    发表于 11-01 17:42 0次下载
    一中<b class='flag-5'>余弦</b><b class='flag-5'>相似</b>度的改进方法

    基于互信息和余弦的不良文档过滤

    中提取出高区分度的特征向量。最后,利用TF-IDF方法对特征进行加权,并计算加权特征向量与分类模板中的各类加权特征向量之间的余弦
    发表于 11-13 10:41 7次下载
    基于互信息和<b class='flag-5'>余弦</b>的不良文档过滤

    基于Document Triage的TF-IDF算法

    针对TF-IDF算法在加权时没有考虑特征词本身在文档中重要度的问题,提出利用用户阅读时的阅读行为来改进TF-IDF。将Document Triage引入到TF-IDF中,利用IPM收集用户阅读中行
    发表于 12-27 10:54 0次下载

    TF-IDF算法的改进及在语义检索中应用

    技术相结合,从而实现对TF-IDF算法的改进。利用语义库对搜索主题进行描述,根据正则原予语义的重要性和在网页标签中的不同位置进行加权计算,得到正则原子在文档中的相似度。通过空间向量模型
    发表于 01-02 11:25 0次下载
    <b class='flag-5'>TF-IDF</b>算法的改进及在语义检索中应用

    基于划分思想的文件结构化相似性比较方法

    针对传统文件结构化相似性比较法中采用基本块( BB) -对一映射而造成的巨大时空消耗及基本块比较结果的绝对化问题,提出一种基于划分思想的文件结构化相似性比较方法。该方法首先对用于基本块
    发表于 01-02 14:04 0次下载
    基于划分思想的<b class='flag-5'>文件</b>结构化<b class='flag-5'>相似性</b>比较方法

    云模型重叠度的相似性度量算法

    重叠度的相似性度量算法。首先,根据云模型期望、熵、超熵三个数字特征,定义两个云模型的位置关系和逻辑关系;其次,利用两个云的位置和形状特性,计算得到它们间的重叠度;最后,结合云模型重叠度与相似度的关系,将云模
    发表于 01-07 10:54 1次下载

    基于节点相似性社团结构划分

    针对复杂网络结构划分过程复杂、准确性差的问题,定义了节点全局和局部相似性衡量指标,并构建节点的相似性矩阵,提出一种基于节点相似性度量的社团结构划分算法。其基本思路是将节点(或社团)按相似性
    发表于 01-10 14:02 0次下载

    计算文本相似度几种最常用的方法,并比较它们之间的性能

    估计两句子间语义相似度最简单的方法就是求句子中所有单词词嵌入的平均值,然后计算两句子词嵌入之间的余弦相似性。很显然,这种简单的基准方法会带来很多变数。我们将研究,如果忽略终止词并用TF-IDF
    的头像 发表于 06-30 11:16 5.2w次阅读
    计算文本<b class='flag-5'>相似</b>度几种最常用的方法,并比较它们之间的性能

    如何使用会话时序相似性进行矩阵分解数据填充

    针对已有数据填充方法只考虑评分信息和传统相似性,无法捕获用户间真实相似关系的问题,提出了基于会话时序相似性的矩阵分解数据填充方法来缓解数据稀疏性、提高推荐精度。首先,分析了传统相似性
    发表于 01-23 14:50 3次下载
    如何使用会话时序<b class='flag-5'>相似性</b>进行矩阵分解数据填充

    用于学习图结构对象相似性的图匹配网络

    为了解决图的相似度学习问题,我们研究了GNN在这种情况下的使用,探讨了如何将图嵌入到向量空间中,并学习这种嵌入模型,使相似的图在向量空间中更接近,而不同的图在
    的头像 发表于 05-08 09:40 5544次阅读
    用于学习图结构对象<b class='flag-5'>相似性</b>的图匹配网络

    TF-IDF的基础模型和使用教程和算法代码免费下载

    这是一个tf-idf的算法包,里面包含的基础模型,使用教程和算吗代码。
    发表于 05-21 08:00 0次下载

    一种基于TF-IDF的Webshell文件检测方法

    的 Webshell文件检测方法。系统首先对不同类型的Webshell文件进行分类,并对不同文件进行相应的预处理转码,以降低混淆干扰技术对检测的影响;随后建立词袋模型,并采用TF-IDF
    发表于 04-26 14:16 3次下载
    一种基于<b class='flag-5'>TF-IDF</b>的Webshell<b class='flag-5'>文件</b>检测方法