一、需求描述

由于在平台上发布的文章是来源于不同渠道和作者的,发布的文章也存在一定程度上的抄袭或者太相似。为了避免对用户体验造成影响,避免不必要的文章费用支出,需要识别出哪些文章是相似的。数据源是若干文章(中文),初步选择方法为利用doc2vec模型,它类似于word2vec,下面就让我们看看是怎么达到我们的目的。

二、数据预处理

  1. 从mysql源表导入到hive
  2. 由于某些文章的内容是图片,这种我们还无法识别相似,因此,过滤掉汉字内容太少的文章。
  3. 数据源可能包含标题,内容,标签等信息,因为是识别相似文章,有的作者可能会改下标题,但是内容却不变,因此,我们这里就选择文章的内容作为输入,而不考虑标题和标签。

三、工具选择

选择python的gensim包中的Doc2Vec。

gensim doc2vec文档

由于目前spark还没有doc2vec的支持,但是看到有deepdist工具可以实现,也可以参照:

DeepDist

分词工具呢,还是采用jieba分词。

四、模型训练简述

  1. 分词, 注意,这里没有做去除停用词的处理

    wordList = jieba.cut(s, cut_all=False)

  2. 将数据输入用LabeledSentence方法封装

    sentence = models.doc2vec.LabeledSentence(words=list(seg_list), tags=[int(id)])

  3. 模型训练

    model = models.Doc2Vec(sentences,alpha=.025, min_alpha=.025, min_count=1,workers=8, iter=6, size=500)

  4. 计算,获得相似文章

    similar_result = model.docvecs.most_similar(info_id, topn=20)

五、调参

  1. 数据源,当需要识别的文章参与模型训练后,计算出的相似度准确率较高
  2. 学习速率
  3. 迭代次数
  4. 向量的维度

六、结果展示

查询结果:

我们看到278561的文章与277878的文章相似度达到86%,实际发现的确是一样的文章

七、存在的问题

  1. 怎样确定阈值标示是否相似
  2. 怎样实现模型的增量训练
  3. 怎样计算一个新文章的相似文章(可以用infer_vector)

八、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")

Doc2Vec训练相似文章识别模型相关推荐

  1. python ocr中文训练_cnocr: cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用...

    English README. cnocr 使用交流QQ群 欢迎扫码加入QQ交流群: 最近更新 [2020.05.29]:V1.2.2 主要变更: 优化了对数字识别的准确度. 优化了模型结构,进一步降 ...

  2. pythonocr训练模型_cnocr: cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用...

    English README. cnocr 使用交流QQ群 欢迎扫码加入QQ交流群: Release Notes Update 2020.04.21: 发布 cnocr V1.1.0 V1.1.0对代 ...

  3. 个人笔记本上win10+yolov3+python+tensorflow+keras训练自己的识别模型

    本文是在前人的很多基础上自己整理所得,借鉴的资料见文末链接,感谢各位大神的无私分享. 对于yolo小白,参阅博文学习:keras-yolov3目标检测详解--适合新手, (环境配置.用官方权重识别自己 ...

  4. SVM训练3D活体识别模型

    训练数据采集分为正样本和负样本 正样本:正脸.侧脸.抬头.低头.表情,4000张 负样本:平面照片.弯曲照片.褶皱照片.照片抠眼鼻嘴做简单面具.电子屏,4000张 分辨率为128*128,因为1米以内 ...

  5. Python+OpenCV实现AI人脸识别身份认证系统(3)—训练人脸识别模型

    目录 案例引入 本节项目 最近有小伙伴们一直在催本项目的进度,好吧,今晚熬夜加班编写,在上一节中,实现了人脸数据的采集,在本节中将对采集的人脸数据进行训练,生成识别模型. 案例引入 首先简要讲解数据集 ...

  6. paddle - crowdHuman数据集训练人体识别模型

    paddle - crowdHuman数据集训练人体识别模型 数据集annotation crowdhuman的odgt文件各项意义 转换为paddle yolo的格式 输入哪些数据? 输出模型 数据 ...

  7. Python+OpenCv实现AI人脸识别身份认证系统(3)——训练人脸识别模型

    目录 案例引入 本节项目 最近有小伙伴们一直在催本项目的进度,好吧,今晚熬夜加班编写,在上一节中,实现了人脸数据的采集,在本节中将对采集的人脸数据进行训练,生成识别模型. 案例引入 首先简要讲解数据集 ...

  8. 基于TensorFlow训练花朵识别模型的源码和Demo

    基于TensorFlow训练花朵识别模型的源码和Demo 转发来源: https://blog.csdn.net/Anymake_ren/article/details/80550684 下面就通过对 ...

  9. 从局部脑到全脑:时空域分层神经网络脑电情绪识别模型

    作者丨张玮玮 学校丨东北大学硕士生 研究方向丨情绪识别 引言 论文动机 近年来,脑电图 (EEG) 在处理情感识别方面得到了广泛的应用.虽然近年来人们提出了各种各样的脑电信号情感识别方法,但为了进一步 ...

最新文章

  1. JSON.NET 简单的使用
  2. 信息安全不可错过的30门实验
  3. shell中source与sh区别
  4. myEclipse背景控制插件方案 内附使用说明
  5. 从阿里腾讯的大会上得到的启示,来分享一些可视化大屏
  6. linux的课程完全看不懂,学习Linux命令神器-看不懂直接给你解释
  7. 多项目同时进行 如何高效协作?
  8. 在eclipse中配置Tomcat时,出现“Cannot create a server using the selected type”的错误。...
  9. Python实现微信机器人——itchat库
  10. PRML 十大经典机器学习算法
  11. 计算机科学的方法论有三个过程,计算机科学与技方法论3.ppt
  12. Django框架基础知识(面试题)
  13. 阿里云服务器搭建Ghost博客教程
  14. 谷歌怎么保存网页为图片?
  15. 深入AXI4总线-[三]传输事务结构
  16. botzone Tetris2
  17. 快牛策略——PowerPoint 2003:红头文件的制作及标准
  18. 跨境电商支付方式之如何玩转跨境支付
  19. rebound(反弹)攻击技术分析
  20. win10下安装office2019

热门文章

  1. etcd 启动分析_Etcd 架构与实现解析
  2. 【youcans 的 OpenCV 例程 200 篇】120. 击中-击不中变换
  3. SQL Server 2008R2安装详细教程(附安装包)
  4. php pc_base,phpcms二次开发之base.php的桥梁作用_PHP教程
  5. 聊天室程序python_Python聊天室程序(基础版)
  6. 大学c语言项目,项目大学C语言程序设计期末复习重点.doc
  7. 数据结构-栈5-栈的应用-后缀转中缀
  8. python datetime
  9. python 时间函数小总结
  10. django 按天水平分表并插入数据