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

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
简介:

相似性查询(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篇、第三篇。

目录
相关文章
|
4月前
|
SQL 自然语言处理 关系型数据库
PolarDB上实现一个自然语言查询系统
PolarDB上实现一个自然语言查询系统
|
3月前
|
自然语言处理
【NLP】如何实现快速加载gensim word2vec的预训练的词向量模型
本文探讨了如何提高使用gensim库加载word2vec预训练词向量模型的效率,提出了三种解决方案:保存模型以便快速重新加载、仅保存和加载所需词向量、以及使用Embedding工具库代替word2vec原训练权重。
206 2
|
4月前
|
SQL 机器学习/深度学习 自然语言处理
实现自然语言查询系统时,如何确保查询结果的准确性和可靠性
实现自然语言查询系统时,如何确保查询结果的准确性和可靠性
|
4月前
|
SQL 人工智能 自然语言处理
一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator
一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator
111 0
|
人工智能 自然语言处理 NoSQL
Graph + LLM 实践指南|如何使用自然语言进行知识图谱构建和查询
经过悦数研发团队的努力和与国际多家知名大语言模型 LLM 技术团队的合作,目前悦数图数据库的产品已经可以实现基于 Graph + LLM 技术的 Text2Cypher,即自然语言生成图查询。用户只需要在对话界面中通过自然语言就可以轻松实现知识图谱的构建和查询,更有开箱即用的企业级服务,欢迎大家在文末点击试玩体验新一代的悦数图数据库 x 知识图谱应用吧!
|
自然语言处理
NLP学习笔记(七) BERT简明介绍 下
NLP学习笔记(七) BERT简明介绍
184 0
NLP学习笔记(七) BERT简明介绍 下
|
机器学习/深度学习 自然语言处理 资源调度
NLP学习笔记(二) LSTM基本介绍
NLP学习笔记(二) LSTM基本介绍
192 0
NLP学习笔记(二) LSTM基本介绍
|
自然语言处理 算法
NLP学习笔记(十) 分词(下)
NLP学习笔记(十) 分词(下)
162 0
|
机器学习/深度学习 自然语言处理 算法
NLP学习笔记(九) 分词(上)
NLP学习笔记(九) 分词(上)
73 0
|
机器学习/深度学习 自然语言处理
NLP学习笔记(八) GPT简明介绍 下
NLP学习笔记(八) GPT简明介绍
155 0

热门文章

最新文章

下一篇
无影云桌面