【NLP学习笔记】(三)gensim使用之相似性查询(Similarity Queries)-阿里云开发者社区

开发者社区> 人工智能> 正文
登录阅读全文

【NLP学习笔记】(三)gensim使用之相似性查询(Similarity Queries)

简介:

相似性查询(Similarity Queries)

本文主要翻译自https://radimrehurek.com/gensim/tut3.html
在之前的教程语料和向量空间主题和转换中,我们学会了如何在向量空间模型中表示语料和如何在不同的向量空间之间转换。实际工作中,这样做的一个最常见的目的是比较两个文档之间的相似性或比较某一个文档与其它文档的相似性(比如用户查询已经索引的文档中的某一个文档)

加载字典和语料

与上一章相同,首先加载第一章中保存的字典和语料。

from gensim import corpora, models, similarities
import os
if(os.path.exists('./gensim_out/deerwester.dict')):
    dictionary = corpora.Dictionary.load('./gensim_out/deerwester.dict')
    corpus = corpora.MmCorpus('./gensim_out/deerwester.mm')
    print("使用之前已经存储的字典和语料向量")
else:
    print("请先通过第一章生成deerwester.dict和deerwester.mm")

第一步

定义模型LSI,并将语料corpus转换为索引

lsi = models.LsiModel(corpus, id2word=dictionary, num_topics=2)

index = similarities.MatrixSimilarity(lsi[corpus])
index.save('./gensim_out/deerwester.index') #保存训练后的index
index = similarities.MatrixSimilarity.load('./gensim_out/deerwester.index')#从已保存的文件中加载index。


第二步

假设我们要查询新文本 'human computer interaction'。我们期望得出与新文本最相思的三个文本。

doc = 'human computer interaction'
vec_bow = dictionary.doc2bow(doc.lower().split())
vec_lsi = lsi[vec_bow]
print(vec_lsi)

第三步

比较新文本vec_lsi与语料库的相似性

sims = index[vec_lsi]
print(list(enumerate(sims))) #打印结果(document_number, document_similarity) 2-tuples

上面结果为:
[(0, 0.99809301), (1, 0.93748635), (2, 0.99844527), (3, 0.9865886), (4, 0.90755945),(5, -0.12416792), (6, -0.1063926), (7, -0.098794639), (8, 0.05004178)]

(0, 0.99809301)的意思是第0篇文章与新文档的相似性为 0.99809301

将上面结果按相似性降序排列

sims = sorted(enumerate(sims), key = lambda item : -item[1])
print(sims)

结果:

[(2, 0.99844527), # The EPS user interface management system
(0, 0.99809301), # Human machine interface for lab abc computer applications
(3, 0.9865886), # System and human system engineering testing of EPS
(1, 0.93748635), # A survey of user opinion of computer system response time
(4, 0.90755945), # Relation of user perceived response time to error measurement
(8, 0.050041795), # Graph minors A survey
(7, -0.098794639), # Graph minors IV Widths of trees and well quasi ordering
(6, -0.1063926), # The intersection graph of paths in trees
(5, -0.12416792)] # The generation of random binary unordered trees

可以看出与文档“human computer interface”最相似的三篇文章分别是第2篇、第0篇、第三篇。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章