您现在的位置是:首页 > 数码 > 

gensim使用之一 tfidf 和lsa

2025-07-27 13:31:38
gensim使用之一 tfidf 和lsa 1、给定训练语料生成语料的tfidf向量和lsi向量; 2、对新的测试语料,用tfidf和lsi 判断其和训练语料的相似度。 import jieba from gensim import corpora, models from gensim.similarities import Similarity #jieba.

gensim使用之一 tfidf 和lsa

1、给定训练语料生成语料的tfidf向量和lsi向量;

2、对新的测试语料,用tfidf和lsi 判断其和训练语料的相似度。

import jieba
from gensim import corpora, models
from gensim.similarities import Similarity
#jieba.load_userdict()
stopwords = set(open(	./doc/	,encoding=	utf8	).read().strip(	\n	).split(	\n	)) #读入停用词
raw_documents = [ 	0无偿居间介绍买卖的行为应如何定性	, 	1男动态持有大量的行为该如何认定	, 	2如何区分是非法种植原植物罪还是非法制造罪	, 	为毒贩贩卖提供帮助构成贩卖罪	, 	4将自己吸食的原价转让给朋友吸食的行为该如何认定	, 	5为获报酬帮人购买的行为该如何认定	, 	6毒贩出狱后再次够买途中被抓的行为认定	, 	7虚夸功效劝人吸食的行为该如何认定	, 	8妻子下落不明丈夫又与他人登记结婚是否为无效婚姻	, 	9一方未签字办理的结婚登记是否有效	, 	10夫妻双方1990年按农村习俗举办婚礼没有结婚证 一方可否起诉离婚	, 	11结婚前对方父母出资购买的住房写我们二人的名字有效吗	, 	12身份证被别人冒用无法登记结婚怎么办?	, 	1同居后又与他人登记结婚是否构成重婚罪	, 	14未办登记只举办结婚仪式可起诉离婚吗	, 	15同居多年未办理结婚登记,是否可以向法院起诉要求离婚	 ]
corpora_documents = []
for item_text in raw_documents:item_str = jieba.lcut(item_text)corpora_documents.append(item_str)
dictionary = corpora.Dictionary(corpora_documents)
print(dictionarystr(dictionary))
# dictionary.save(		) #保存生成的词典
#dictionary=Dictionary.load(		)#加载
#  通过下面一句得到语料中每一篇文档对应的稀疏向量(这里是bow向量)
corpus = [dictionary.doc2bow(text) for text in corpora_documents]
# 向量的每一个元素代表了一个word在这篇文档中出现的次数
print(corpus:str(corpus))
#转化成tf-idf向量
# corpus是一个返回bow向量的迭代器。下面代码将完成对corpus中出现的每一个特征的IDF值的统计工作
tfidf_model=models.TfidfModel(corpus)
corpus_tfidf = [tfidf_model[doc] for doc in corpus]
print(	语料的TFIDF向量	,corpus_tfidf)
					 
#查看model中的内容 
for item in corpus_tfidf: print(item) 
# tfidf.save() 
# tfidf = models.TfidfModel.load() 
# print(tfidf_model.dfs) 
			
#转化成lsi向量
lsi= models.LsiModel(corpus_tfidf,id2word=dictionary,num_topics=50)
corpus_lsi = [lsi[doc] for doc in corpus]
print(语料的LSI:str(corpus_lsi))
similarity_lsi=Similarity(	Similarity-Lsi-index	, corpus_lsi, num_features=400,num_best=5)
#  1.测试数据
test_data_1 = 	你好,我想问一下我想离婚他不想离,孩子他说不要,是六个月就自动生效离婚	
test_cut_raw_1 = jieba.lcut(test_data_1)
print(	测试数据	,test_cut_raw_1)
# 2.转换成bow向量 # [(51, 1), (59, 1)],即在字典的52和60的地方出现重复的字段,这个值可能会变化
test_corpus_ = dictionary.doc2bow(test_cut_raw_1)
print(	测试语料	,test_corpus_)
# .计算tfidf值  # 根据之前训练生成的model,生成query的TFIDF值,然后进行相似度计算
test_corpus_tfidf_ = tfidf_model[test_corpus_]
print(	TFIDF值	,test_corpus_tfidf_) # [(51, 0.7071067811865475), (59, 0.7071067811865475)]
#  4.计算lsi值
test_corpus_lsi_ = lsi[test_corpus_tfidf_]
print(	LSI值	,test_corpus_lsi_)
# lsi.add_documents(test_corpus_lsi_) #更新LSI的值
print(	——————————————lsi———————————————	)
#  返回最相似的样本材料,(index_of_document, similarity) tuples
print(	相似度:	,similarity_lsi[test_corpus_lsi_])

问题及思考:

1、LsiModel里面的num_topic=50,预设最多有50个主题,但其实只有语料库只有15个文档,即生成的lsi向量的长度为15。所谓隐语义模型,其本质是topic作为中间量。

2、产生的LSI向量到底是什么?  源码里解释如下,model[语料],可知,LSI向量其实是右奇异值矩阵,每个文档和主题的对应关系。在这种情况下,U∈ℝ^(m⨉t)是我们的文档-主题矩阵,而 V∈ℝ^(n⨉t)则成为我们的术语-主题矩阵。在矩阵 U 和 V 中,每一列对应于我们 t 个主题当中的一个。在 U 中,行表示按主题表达的文档向量;在 V 中,行代表按主题表达的术语向量。

otes
-----
* :attr:`lsimodel.LsiModel.projection.u` - left singular vectors,
* :attr:`lsimodel.LsiModel.projection.s` - singular values,
* ``model[training_corpus]`` - right singular vectors (can be rectructed if needed).

 

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/856984.html

相关标签:无
上传时间: 2024-02-10 04:33:38
留言与评论(共有 6 条评论)
本站网友 联动优势科技有限公司
8分钟前 发表
2
本站网友 北京普思投资
1秒前 发表
test_corpus_) # .计算tfidf值 # 根据之前训练生成的model,生成query的TFIDF值,然后进行相似度计算 test_corpus_tfidf_ = tfidf_model[test_corpus_] print( TFIDF值
本站网友 重庆科冠涂料有限公司
14分钟前 发表
11结婚前对方父母出资购买的住房写我们二人的名字有效吗
本站网友 small是什么意思
19分钟前 发表
gensim使用之一 tfidf 和lsa 1
本站网友 form表单
14分钟前 发表
print(item) # tfidf.save() # tfidf = models.TfidfModel.load() # print(tfidf_model.dfs) #转化成lsi向量 lsi= models.LsiModel(corpus_tfidf