【NLP】【六】gensim之doc2vec
时间: 2018-11-14来源:OSCHINA
前景提要
「深度学习福利」大神带你进阶工程师,立即查看>>>
【一】总述
doc2vec是指将句子、段落或者文章使用向量来表示,这样可以方便的计算句子、文章、段落的相似度。
【二】使用方法介绍
1. 预料准备 def read_corpus(fname, tokens_only=False): with open(fname, encoding="utf-8") as f: for i, line in enumerate(f): if tokens_only: yield gensim.utils.simple_preprocess(line) else: # For training data, add tags # 利用gensim进行doc2vec时,语料库是一个TaggedDocument,其包括原始语料(句子、段落、篇章) # 和对应的id(如句子id,段落id,篇章id)即语料标识 yield gensim.models.doc2vec.TaggedDocument(gensim.utils.simple_preprocess(line), [i])
2. 模型训练
方法一: def train_doc2vec2(): train_file = "E:/nlp_data/in_the_name_of_people/in_the_name_of_people.txt" train_corpus = list(read_corpus(train_file)) model = gensim.models.doc2vec.Doc2Vec(documents=train_corpus,vector_size=50, min_count=2, epochs=10) model.save("doc2vec2.model")
方法二: def train_doc2vec(): train_file = "E:/nlp_data/in_the_name_of_people/in_the_name_of_people.txt" train_corpus = list(read_corpus(train_file)) model = gensim.models.doc2vec.Doc2Vec(vector_size=50, min_count=2, epochs=10) model.build_vocab(train_corpus) model.train(train_corpus,total_examples=model.corpus_count,epochs = model.epochs) model.save("doc2vec.model")
3. 模型使用
3.1 推测句子、段落或者文章的向量表示 model = doc2vec.Doc2Vec.load("doc2vec.model") # 基于已有模型,来推测新文档或者句子或者段落的向量 print(model.infer_vector(["李达康是市委书记"]))
3.2 求解句子或者段落或者文章相似的内容 model = doc2vec.Doc2Vec.load("doc2vec2.model") inferred_vector = model.infer_vector(["沙瑞金是省委书记"]) # 求解句子或者段落或者文章的相似性 sims = model.docvecs.most_similar([inferred_vector], topn=3) train_file = "E:/nlp_data/in_the_name_of_people/in_the_name_of_people.txt" train_corpus = list(read_corpus(train_file)) for docid, sim in sims: print(docid) print(sim) print(train_corpus[docid])
结果如下: 1295 0.4263337254524231 TaggedDocument(['这一来', '陈清泉就撞到枪口上了', '他想保也保不住', '其实他还是想保的', '这位法院副院长人不错', '他没必要得罪', '然而', '李达康要得罪', '他有啥办法', '该查就得查了', '他不查', '李达康既可以换个人来查', '也可以查一查他', '政治斗争就是这么残酷无情', '它不以你个人的感情好恶为转移', '于是', '他代表纪委宣布了违纪事实', '最后做结论说', '有的被群众举报', '有的在网上炒得沸反盈天', '必须严肃处理', '情况就是这样'], [1295]) 1692 0.4215260446071625 TaggedDocument(['孙连城', '地站了起来', '大声说', '李达康', '我辞职'], [1692]) 281 0.41098830103874207 TaggedDocument(['估计有人通风报信了'], [281])
【三】总结
使用gensim的doc2vec进行句子、段落、文章的向量表示时,不需要进行分词。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行