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

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

3天内不再提示

Python自然语言处理实战:两篇文章相似度清晰透明

lviY_AI_shequ 来源:电子发烧友网 作者:工程师谭军 2018-07-09 09:22 次阅读

此书专注于中文的自然语言处理,以Python及其相关框架为工具,以实战为导向,详细讲解了自然语言处理的各种核心技术、方法论和经典算法。三位作者在人工智能、大数据和算法领域有丰富的积累和经验,是阿里巴巴、前明略数据和七牛云的资深专家。同时,本书也得到了阿里巴巴达摩院高级算法专家、七牛云AI实验室Leader等专家的高度评价和鼎力推荐

本节将利用训练好的词向量和段落向量对两篇关于天津全运会的新闻进行向量化,并计算两篇新闻的相似度。如下是两篇新闻:

新闻1:6日,第十三届全运会女子篮球成年组决赛在天津财经大学体育馆打响,中国篮协主席姚明到场观战。姚明在接受媒体采访时表示,天津全运会是全社会的体育盛会,他称赞了赛事保障与服务工作,并表示中国篮协将在未来的工作中挖掘天津篮球文化的价值。

本届天津全运会增加了包括攀岩、马拉松、象棋在内的19个大项的群众体育比赛项目,普通群众成为赛场“主角”。对此,姚明表示:“引入群众性的体育项目,真正做到了全运会的‘全’字,这不仅仅是专业运动员的盛会,更是全社会的体育盛会。”谈及本届全运会赛事筹备与保障服务时,姚明说:“全运会得到了天津市委市政府和各区、各学校的大力帮助,篮球项目比赛(顺利举办)要感谢天津方方面面的支持。”此外,姚明还对全运村内的保障服务和志愿者工作表示赞赏。“很多熟悉的教练员和运动员都表示服务保障很不错,志愿者态度很积极。”“毋庸置疑,天津是中国篮球发源地,1895年,在篮球运动诞生4年的时候就漂洋过海从天津上岸,这是中国篮球具有历史意义的地方。”姚明在谈及天津篮球文化和未来发展时说,“天津保留着迄今为止世界上最古老的室内篮球场,这都是非常重要的篮球文化遗产,希望能在未来的工作中挖掘这些历史遗产的价值。”姚明说:“天津是座美丽的城市,这次来天津能够感到浓厚的体育文化元素,希望运动员和教练员在比赛赛得好的同时,也能领略到天津的城市文化。”

新闻2:从开幕式前入住全运村到奔波于全运三座篮球场馆之间,中国篮协主席姚明抵津已有10多天了。昨天在天津财大篮球馆,姚明还饶有兴致地谈了对本次天津全运会的看法,能够让群众融入进来,是他觉得最有亮点的地方。 “全运会是一项很有传统的运动会,这次来到天津,得到市委、市政府的大力支持,天津各个区学校对于篮球比赛从人员到场馆给予很大帮助,中国篮协作为竞委会的一员,受到总局的委派承办篮球的比赛,真的非常感谢天津对我们方方面面的支持。”尽管之前多次到访津城,不过这次因为全运,还是给了姚明很多不一样的感受,“天津是座非常美丽的城市,我之前来这里很多次了,这次来感受到了非常浓烈的体育文化元素,我们希望运动员、教练员在这座美丽的城市比赛赛得好,同时能够领略到天津的城市文化。”本届全运的群众项目的比赛,引起了姚明极大的兴趣,“这次天津全运会最突出的特点是引入了群众性体育和群众性的项目,同时设立了群众性的奖牌和荣誉,是真的做到了一个‘全’字,这也符合体育融入社会的一个大趋势,全运会不该只是专业运动员的盛会,也是所有社会人的一个盛会。”对于这段时间在天津的生活,姚明也是赞不绝口,“我们作为篮协的官员都住在技术官员村,这段时间的生活工作都在里面,听到了很多熟悉的运动员、教练员对本次全运会的夸赞,生活工作非常方便,保障非常齐全,我们为天津感到非常高兴。很多场馆都很新,很多志愿者都很年轻,大家都积极奔波在各自的岗位上,这一点我们的运动员和教练员应该是最有发言权的。”作为中国最出色的篮球运动员,姚明也谈了天津作为中国篮球故乡的感受,“毋庸置疑,天津是中国篮球的发源地,是篮球传入中国的第一故乡,在篮球1891年诞生之后4年就漂洋过海来到中国,在天津上岸,这是对中国篮球具有历史意义的地方,并且我们也知道这里保留了迄今为止世界上最古老的室内篮球馆,这些都是我们非常重要的文化遗产。我希望我们在未来的工作中,可以让这样越来越多的历史故事被重新挖掘出来。

1. word2vec计算网页相似度

word2vec计算网页相似度的基本方法是:抽取网页新闻中的关键词,接着将关键词向量化,然后将得到的各个词向量相加,最后得到的一个词向量总和代表网页新闻的向量化表示,利用这个总的向量计算网页相似度。包括的步骤是:1)关键词提取,2)关键词向量化,3)相似度计算。

首先是关键词提取,这里我们采用jiebag工具包中tfidf关键词提取方法,如下图7-14所示,函数KeyWord_Extract的功能就是提取句子的关键词,并将关键词保存在txt文件中。

def Word_cut(sentence, file_name):words = pseg.cut(sentence)for word in words:with open(file_name, "a") as f:f.write(str(word.word.encode("utf-8")) + " ")with open(file_name, "a") as f:f.write("\n")def KeyWord_Extract(data, file_name):tfidf = analyse.extract_tagskeywords = tfidf(data)for keyword in keywords:with open(file_name, "a") as f:f.write(str(word.word.encode("utf-8")) + " ")with open(file_name, "a") as f:f.write("\n")if __name__ == "__main__":DataFile = codes.open("P2.txt", "r")DataSet = DataFile.readlines()for data in DataSet:data = data[:len(data)-1]words = Word_cut(data, "P22.txt")KeyWord_Extract(data, "P22_keyword.txt")

图7-14

图7-15的函数word2vec便是从txt文件中读取关键词,利用上两节训练好的词向量获取关键词的词向量。需要注意的是,由于本文训练词向量的语料不是特别大(大约1.5G的纯文本)无法包括所有的汉语词语,所以在获取一个词语的词向量时,最好使用代码25行所示的方式判断模型是否包含该词语,如果包含再获取词向量,否则会报错。

def word2vec(file_name, model):DataFile = codes.open(file_name, "r")DataSet = DataFile.readlines()word_vec_all = numpy.zeros(wordvec_size)for data in DataSet:data = data.decode("utf-8")space_pos = get_char_pos(data, " ")first_word = data[0:space_pos[0]]if model.__contains__(first_word):word_vec_all = word_vec_all + model[first_word]for i in range(len(space_pos) - 1):word = data[space_pos[i]:space_pos[i+1]]if model.__contains__(word):word_vec_all = word_vec_all + model[word]return word_vec_all

图7.15关键词向量化代码

如图7.16所示的词向量相似度计算代码,通过余弦相似度计算两个向量的相似度。根据图7.16的代码,计算出新闻1和新闻2的相似度为0.66.

def SimlarityCalu(Vector1, Vector2):Vector1Mod = np.sqrt(Vector1.dot(Vector1))Vector2Mod = np.sqrt(Vector2.dot(Vector2))if Vector2Mod != 0 and Vector1Mod != 0:simlarity = (Vector1.dot(Vector2))/(Vector1Mod*Vector2Mod)else:simlarity = 0return simlarityif __name == "__main__":model = gensim.models.Word2Vec.load("zhiwiki_news")p1_vec = word2vec("P11_keyword.txt", model)p2_vec = word2vec("P22_keyword.txt", model)print(SimlarityCalu(p1_vec, p2_vec))

图7-16 word2vec词向量相似度计算

2. doc2vec计算网页相似度

跟word2vec计算网页相似度一样,doc2vec计算网页相似度主要包括如下三个步骤:1)预处理,2)句子向量化,3)计算文本相似。

预处理就是对文本进行分词,每个词用空格隔开,具体代码如图7-14的Word_cut函数所示,该函数完成文本的分词,并把分词结果按要求保存在txt文档中。在预处理文本之后便是利用doc2vec对句子向量化,句子向量的训练方法见7.3.2[计算机1]节,这里直接利用训练好的句子向量。代码如图7-17的doc2vec函数所示。同样用余弦相似度计算文本的相似度,代码入图7-17所示的main函数。最后经计算所得利用doc2vec计算新闻1和新闻2间的相似度为0.97。

def doc2vec(file_name, model):docs = [x.strip().split() for x in codecs.open(file_name, "r", "utf-8".readlines()]doc_vec_all = numpy.zeros(docvec_size)for d in docs:doc_vec_all = doc_vec_all + model.infer_vector(d, alpha=start_alpha,steps=infer_epoch)return doc_vec_allif __name__ == "__main__":model = g.Doc2Vec.load(model_path)P1_doc2vec = doc2vec("toy_data/P11.txt", model)p2_doc2vec = doc2vec("toy_data/P22.txt", model)print(SimlarityCalu(p1_doc2vec, p2_doc2vec)

图7-17 doc2vec文本相似度计算代码

3.两种相似度计算方法分析

前文介绍了word2vec和doc2vec两种计算网页相似度的方法,结果显示利用doc2vec方法计算的相似度为0.97高于word2vec计算的0.66,显然通过阅读前两篇新闻,知道这两篇新闻极为相似,因此可以判断doc2vec计算文本相似度的方法更胜一筹。这是因为:1)doc2vec不仅利用了词语的语义信息而且还综合了上下文语序信息,而word2vec则丢失了语序信息;2)word2vec方法中的关键词提取算法准确率不高,丢失了很多关键信息。

(1)三位作者资历深厚,分别是阿里巴巴的数据架构师和NLP专家、百炼智能的NLP专家(前明略数据的技术合伙人和科学家)、七牛云AI实验室NLP&OCR方向负责人

(2)以实战为导向,绕开各种复杂数学公式与证明,确保读者零基础入门,详细讲解自然语言处理 的各种核心技术、方法论和经典算法

(3)阿里巴巴达摩院高级算法专家、百炼智能CEO、七牛云AI LAB负责人、天善智能创始人联袂推荐

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

    关注

    87

    文章

    26129

    浏览量

    263712
  • 人工智能
    +关注

    关注

    1773

    文章

    43356

    浏览量

    230126
  • 大数据
    +关注

    关注

    64

    文章

    8576

    浏览量

    136516
  • 阿里
    +关注

    关注

    6

    文章

    428

    浏览量

    32683

原文标题:Python自然语言处理实战:计算两篇文章的相似度

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一种基于自然语言的轨迹修正方法

    本研究提出了ExTraCT框架,利用自然语言进行轨迹校正。该框架结合了大型语言模型(LLMs)用于自然语言理解和轨迹变形函数。ExTraCT能够根据场景在线生成轨迹修改特征及其自然语言
    的头像 发表于 01-19 10:45 156次阅读
    一种基于<b class='flag-5'>自然语言</b>的轨迹修正方法

    自然语言处理的研究内容

    自然语言处理(NLP)的最新发展改变了我们与AI系统的交互方式: 1. 预训练模型:像 GPT-3 这样的模型已经进步,使人工智能能够在聊天机器人和虚拟助手中生成更连贯的上下文感知响应。 2.
    的头像 发表于 01-18 16:39 139次阅读

    2023年科技圈热词“大语言模型”,与自然语言处理有何关系

    电子发烧友网报道(文/李弯弯)大语言模型(LLM)是基于海量文本数据训练的深度学习模型。它不仅能够生成自然语言文本,还能够深入理解文本含义,处理各种自然语言任务,如文本摘要、问答、翻译
    的头像 发表于 01-02 09:28 1284次阅读

    硬件加速自然语言理解解决方案

    电子发烧友网站提供《硬件加速自然语言理解解决方案.pdf》资料免费下载
    发表于 09-13 10:45 0次下载
    硬件加速<b class='flag-5'>自然语言</b>理解解决方案

    自然语言处理和人工智能的区别

      自然语言处理(Natural Language Processing,NLP)是人工智能(AI)中的一个分支,它利用计算机技术对自然语言进行处理,使得电脑能够理解和操作人类
    发表于 08-28 17:32 813次阅读

    自然语言处理和人工智能的概念及发展史 自然语言处理和人工智能的区别

    自然语言处理(Natural Language Processing, NLP)的定义是通过电脑软件程序实现人们日常语言的机器自动处理。为了帮助计算机理解,掌握
    发表于 08-23 18:22 486次阅读

    自然语言处理的概念和应用 自然语言处理属于人工智能吗

      自然语言处理(Natural Language Processing)是一种人工智能技术,它是研究自然语言与计算机之间的交互和通信的一门学科。自然语言
    发表于 08-23 17:31 734次阅读

    自然语言处理的优缺点有哪些 自然语言处理包括哪些内容

    自然语言处理(Natural Language Processing)是一种人工智能的技术及领域,它致力于让计算机理解及处理人类语言。它可以帮助计算机对人类
    发表于 08-23 17:26 2147次阅读

    人工智能python是什么

    人工智能Python的应用场景首先是自然语言处理领域。在自然语言处理中,Python可用于文本
    的头像 发表于 08-13 10:44 646次阅读

    自然语言处理包括哪些内容 自然语言处理技术包括哪些

    自然语言处理(Natural Language Processing, NLP)一般包括以下内容: 语音识别(Speech Recognition):将人类语言转换为计算机可以理解的形式。 语音合成
    的头像 发表于 08-03 16:22 3484次阅读

    PyTorch教程-16.5。自然语言推理:使用注意力

    16.5。自然语言推理:使用注意力¶ Colab [火炬]在 Colab 中打开笔记本 Colab [mxnet] Open the notebook in Colab Colab
    的头像 发表于 06-05 15:44 305次阅读
    PyTorch教程-16.5。<b class='flag-5'>自然语言</b>推理:使用注意力

    PyTorch教程16.4之自然语言推理和数据集

    电子发烧友网站提供《PyTorch教程16.4之自然语言推理和数据集.pdf》资料免费下载
    发表于 06-05 10:57 0次下载
    PyTorch教程16.4之<b class='flag-5'>自然语言</b>推理和数据集

    PyTorch教程16.7之自然语言推理:微调BERT

    电子发烧友网站提供《PyTorch教程16.7之自然语言推理:微调BERT.pdf》资料免费下载
    发表于 06-05 10:52 0次下载
    PyTorch教程16.7之<b class='flag-5'>自然语言</b>推理:微调BERT

    PyTorch教程16.5之自然语言推理:使用注意力

    电子发烧友网站提供《PyTorch教程16.5之自然语言推理:使用注意力.pdf》资料免费下载
    发表于 06-05 10:49 0次下载
    PyTorch教程16.5之<b class='flag-5'>自然语言</b>推理:使用注意力

    ChatGPT在自然语言处理中的局限性和挑战

    随着人工智能技术的不断发展,自然语言处理已经成为人工智能领域中备受瞩目的重要研究方向。ChatGPT作为自然语言处理技术中的一种,已经在自然语言
    的头像 发表于 04-18 16:25 943次阅读