Doc2Vec训练相似文章识别模型
一、需求描述
???? 由于在平臺(tái)上發(fā)布的文章是來源于不同渠道和作者的,發(fā)布的文章也存在一定程度上的抄襲或者太相似。為了避免對(duì)用戶體驗(yàn)造成影響,避免不必要的文章費(fèi)用支出,需要識(shí)別出哪些文章是相似的。數(shù)據(jù)源是若干文章(中文),初步選擇方法為利用doc2vec模型,它類似于word2vec,下面就讓我們看看是怎么達(dá)到我們的目的。
二、數(shù)據(jù)預(yù)處理
三、工具選擇
???? 選擇python的gensim包中的Doc2Vec。
gensim doc2vec文檔
由于目前spark還沒有doc2vec的支持,但是看到有deepdist工具可以實(shí)現(xiàn),也可以參照:
DeepDist
分詞工具呢,還是采用jieba分詞。
四、模型訓(xùn)練簡述
分詞, 注意,這里沒有做去除停用詞的處理。
wordList = jieba.cut(s, cut_all=False)
將數(shù)據(jù)輸入用LabeledSentence方法封裝
sentence = models.doc2vec.LabeledSentence(words=list(seg_list), tags=[int(id)])
模型訓(xùn)練
model = models.Doc2Vec(sentences,alpha=.025, min_alpha=.025, min_count=1,workers=8, iter=6, size=500)
計(jì)算,獲得相似文章
similar_result = model.docvecs.most_similar(info_id, topn=20)
五、調(diào)參
六、結(jié)果展示
查詢結(jié)果:
我們看到278561的文章與277878的文章相似度達(dá)到86%,實(shí)際發(fā)現(xiàn)的確是一樣的文章
七、存在的問題
八、code
import jieba import re from deepdist import DeepDist from gensim.models.doc2vec import Doc2Vec, LabeledSentence from pyspark.sql import HiveContext from pyspark import SparkConf,SparkContext from gensim import models from pyspark.sql import SparkSession#spark = SparkSession.builder.master("local").appName("Word Count").config("spark.some.config.option", "some-value").getOrCreate() #appName = "Doc2Vec model training" #conf = SparkConf().setAppName(appName) #sc = SparkContext(conf = conf) #spark = HiveContext(sc)regex=u"[\u4e00-\u9fa5]+" p = re.compile(regex)def split(jieba_list, iterator):sentences = []for i in iterator:regex=u"[\u4e00-\u9fa5]+" p = re.compile(regex)def split(jieba_list, iterator):sentences = []for i in iterator:try:seg_list = []#out_str = ""s = ""for c in i:if not c is None:s += c.encode('utf-8')id = s.split("__")[0]s = s.split("__")[1]wordList = jieba.cut(s, cut_all=False)for word in wordList:if word in jieba_list:continueif re.search(regex, word):seg_list.append(word)sentence = models.doc2vec.LabeledSentence(words=list(seg_list), tags=[int(id)])sentences.append(sentence)except:continuereturn sentencesspark.sql("use databaseName") df = spark.sql("SELECT concat(id,'__',description) FROM similar_info_regonize_data_source_final")take = df.rdd.repartition(500).mapPartitions(lambda it: split([u'\u5fae\u8f6f',u'\u96c5\u9ed1',u'\u8f6c\u81ea'],it))print("start build model...")sentences = take.collect() model = models.Doc2Vec(sentences,alpha=.025, min_alpha=.025, min_count=1,workers=8, iter=6, size=500) model.train(sentences)print("save model")model.save("/home/rd/python/workspace/duankai/similarity_model1.doc2vec")print("success")總結(jié)
以上是生活随笔為你收集整理的Doc2Vec训练相似文章识别模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux热插拔
- 下一篇: Netlink实现热拔插监控