代码可见:mattzheng/TopicClassifier

1 开源的今日头条数据

又开源了一个某机构整理的今日头条数据,可见:今日头条中文新闻文本(多层)分类数据集

本数据集有1000+分类,2914000条数据,虽然没有放开正文,但是也是非常好的词包收集源,于是笔者花了很久整理一版本。今日头条的数据样式为:

以|,|分割的各字段,从前往后分别是 新闻ID,分类代码,新闻字符串(仅含标题),新闻关键词,新闻label

1000866069|,|tip,news|,|【互联网资讯】PPT设计宝典!十招教你做出拿得出手的PPT|,|互联网,美国,ppt,powerpoint,幻灯片,演示文稿,微软,字体列表|,|

由开源的内容就可以构建一套新闻类的词包。但是发现,分类代码太过详细,1000+类别,项目太多,而且准确率有待考察,还不如直接归类到大类,粗线条一些的。下面做了一些数据清洗:

  • 1、分类约束,只考察大类,把譬如: digital/appliances/small_home_appliance
    digital/appliances/television折算成digital
  • 2、有一些素材不是那么优质,主题点很多,反正数据2000W+,只筛选主题分类代码只有一种类别的素材
  • 3、约束字数,不能有1个字以及字数超过8

'新闻关键词''新闻label'字段,同质化挺多,经过筛选之中,两个语料质量都挺高的。


2 准备主题词包素材

主题词包素材,包括四样内容:

  • 每个词出现在哪些主题之中,topic
  • 每个词出现在哪些主题之中,同时统计每个词主题频次,topic_detail
  • 每个词TF,tf
  • 每个词IDF,idf

每个单词的格式样式为:

{'word':{'idf':1,'tf':1,'topic': ['new','sports']'topic_detail':{'digital': 16,'emotion': 4,'general_positive': 0}}
}

其中'topic''topic_detail'是对应的。同时自己写了一个计算TFIDF的过程,但是计算IDF必须要不断遍历全文件,花了好几天时间终于计算出结果。

最终整理得到了如下为'网易云音乐'的主题内容:

{'idf': 9.0134188194616147,'tf': 88,'topic': ['digital','news_tech','news_entertainment','news_baby','news_game','news_car','news_house','emotion','news_finance'],'topic_detail': {'digital': 16,'emotion': 4,'general_positive': 0,'news': 0,'news_agriculture': 0,'news_astrology': 0,'news_baby': 2,'news_car': 2,'news_collect': 0,'news_comic': 0,'news_culture': 0,'news_design': 0,'news_edu': 0,'news_entertainment': 35,'news_fashion': 0,'news_finance': 1,'news_food': 0,'news_game': 4,'news_health': 0,'news_history': 0,'news_home': 0,'news_house': 1,'news_military': 0,'news_novel': 0,'news_pet': 0,'news_politics': 0,'news_society': 0,'news_sports': 0,'news_tech': 28,'news_travel': 0,'news_world': 0,'science_all': 0,'technique': 0,'video_ent': 0}}

记录每个词的词频、IDF,以及分属主题以及每个主题出现频次。


3 MOneTopic 无监督主题得分流程

有些主题判定分出关键内容之后就打上一个标签,但是每个词语的属性很多样,那么句子的属性也有可能有很多属性。
基于前面整理的词包素材内容,包含词粒度的四样内容:每个词分属主题、分属主题频数、词TF/IDF信息。
那么接下来的流程就是:

3.1 一句话输入:

网易云音乐是一款专注于发现与分享的音乐产品,依托专业音乐人、DJ、好友推荐及社交功能,为用户打造全新的音乐生活。

3.2 用户词典载入

jieba.add_word并规定词性,然后分词时候根据自定义的词性就可以比较好的筛选出这些关键词。当然这些关键词把顺序打乱了。

3.3 计算主题得分

这边主题得分可以有两种类型:

  • 粗粒度:每个词分属主题topic、
  • 细粒度:分属主题频数topic_detail

    {‘perTopic’: {‘digital’: {‘degree’: 5.1740782122905022, ‘num’: 1362},
    ‘news_baby’: {‘degree’: 1.3448044692737429, ‘num’: 354},
    ‘news_culture’: {‘degree’: 1.4739664804469272, ‘num’: 388},
    ‘news_entertainment’: {‘degree’: 19.64022346368715, ‘num’: 5170}}

那么这个就是细粒度版本的,可以看到每个主题的计数都很夸张,这个把每个单词的属性;

{'totalTopic': {'digital': {'degree': 2.6153846153846154, 'num': 6},'news_entertainment': {'degree': 2.6153846153846154, 'num': 6},'news_finance': {'degree': 2.6153846153846154, 'num': 6},'news_tech': {'degree': 3.4871794871794872, 'num': 8}

粗粒度版本中的主题数量就没那么夸张。

这边的筛选规则是,超过这些主题内容的数值的90%分位数的进行保留。

3.4 贴上关键词的TF/IDF

从词包之中拿出来,贴出:

{'DJ': {'idf': 10.794004988091546,'tf': 14,'tfidf': 151.11606983328164},'产品': {'idf': 12.403442900525645, 'tf': 2, 'tfidf': 24.80688580105129},'分享': {'idf': 12.808908008633811, 'tf': 1, 'tfidf': 12.808908008633811},'发现': {'idf': 12.403442900525645, 'tf': 2, 'tfidf': 24.80688580105129},'好友': {'idf': 10.729466466953975, 'tf': 15, 'tfidf': 160.94199700430963},'打造': {'idf': 10.457532751470332, 'tf': 20, 'tfidf': 209.15065502940664},'推荐': {'idf': 11.7102957199657, 'tf': 5, 'tfidf': 58.551478599828499},'生活': {'idf': 10.668841845137539, 'tf': 16, 'tfidf': 170.70146952220063},'用户': {'idf': 12.403442900525645, 'tf': 2, 'tfidf': 24.80688580105129},'社交功能': {'idf': 12.403442900525645, 'tf': 2, 'tfidf': 24.80688580105129},'网易云音乐': {'idf': 9.0134188194616147, 'tf': 88, 'tfidf': 793.18085611262211},'音乐': {'idf': 4.4418402757952107, 'tf': 8605, 'tfidf': 38222.035573217785},'音乐人': {'idf': 8.4458093838454467, 'tf': 156, 'tfidf': 1317.5462638798897}}

4 MOneTopic 函数记录

在本篇使用的函数中,笔者为了方便自己记忆,有如下的函数:

  • getPseg:按照词性进行分词,可以有效将定义的关键词暴露出来;
  • totalTopic,粗粒度主题得分,每个词基本属性,不带词频,[‘体育’,’新闻’]
  • perTopic,细粒度主题打分,每个基本属性+带词频,[‘体育’:10,’新闻’:1]
  • ShowTfidf,根据词典把每个词的IDF、TF灌入;
  • TopN,主要对totalTopic/perTopic进行排序处理,原则是大于90%分位数的保留,该函数可以调节。
  • TopicClassifier,主函数,如下解释。
TopicClassifier(sentense,TopicDict,topic_class,percs = 90,allowPOSs = ['topic'])

其中,

  • sentense为输入单个句子;
  • TopicDict为今日头条整理的词典;
  • topic_class,如附件;
  • percs,代表粗粒度、细粒度主题得分的时候,筛选前90%分位数;
  • allowPOSs ,代表分词的时候,给入的词性。

MOneTopic 无监督主题标记设想

由于整理出来的质量高的分类都是新闻类的,所以笔者自己整理的数据集比较适合鉴别新闻类文本的主题。
主题标记的粗粒度以及细粒度版本都各有自己优缺点。

那么模块如何使用,就留由看客自己鉴定了。


案例一:

‘网易云音乐是一款专注于发现与分享的音乐产品,依托专业音乐人、DJ、好友推荐及社交功能,为用户打造全新的音乐生活。’

关键词:音乐、音乐人、网易云音乐、打造、生活
细粒度主题:娱乐、数码
粗粒度主题:科技、娱乐、数码、金融


案例二:

‘世界杯小组赛进入最后一轮,前2轮表现极其出色的C罗赢得了全世界的称赞,就连葡萄牙总统马塞洛-雷贝洛-德索萨也在同俄罗斯总统普京会面时,也不禁自夸:我们葡萄牙可是有C罗这种顶级巨星的。’

关键词:C罗、马塞洛、葡萄牙、表现、总统、俄罗斯总统普京
细粒度主题:体育
粗粒度主题:体育、国际、健康


案例三:

‘《创造101》终于收官了——经过昨晚(6月23日)的一夜鏖战,十一名女团人选最终确定:孟美岐、吴宣仪、杨超越、段奥娟、yamy、赖美云、紫宁、Sunnee(杨芸晴)、李紫婷、傅菁、徐梦洁。’

关键词:创造101、女团、杨超越
细粒度主题:娱乐
粗粒度主题:娱乐、时尚、体育

MOne︱基于词包的无监督多主题得分 练习题相关推荐

  1. bert获得词向量_无监督语义相似度匹配之Bert抽取文本特征实战

    今天记一次采用bert抽取句子向量的实战过程,主要是想感受一下bert抽取出来的句子特征向量是否真的具有不错的语义表达. 在此之前,我们来回顾一下,如果我们想拿到一个句子的特征向量可以采用什么样的方式 ...

  2. 基于图像重建损失的无监督变化检测

    阅读翻译:Unsupervised Change Detection Based on Image Reconstruction Loss Abstract: 为了训练变化检测器,使用在同一区域的不同 ...

  3. 基于模糊规则学习的无监督异构领域自适应

    摘要 异构领域自适应是一种借助源域知识为语义相关但特征空间不同的目标域建模的技术.现有的异构领域自适应方法大多属于半监督方法,这些方法要求目标域中存在一部分已标记样本,然而这种数据集在很多异构领域自适 ...

  4. CVPR 2021 | ShapeInversion: 基于GAN逆映射的无监督点云补全方法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 摘要 · 看点 在CVPR 2021上,商汤科技-南洋理工大学联合 AI 研究中心 S-Lab 提出了 ...

  5. 基于句子嵌入的无监督文本摘要(附代码实现)

    ©PaperWeekly· 作者|高开远 学校|上海交通大学 研究方向|自然语言处理 本文主要介绍的是一个对多种语言的邮件进行无监督摘要抽取的项目,非常详细.文本摘要也是非常有意思的 NLP 任务之一 ...

  6. 【阅读论文】基于统计特征的无监督时间序列异常检测方法

    文章目录 摘要 1.介绍 2.相关工作 3.问题描述 4.方法 4.1 统计特征 4.2提取特征总结 4.3 学习阶段算法 4.4测试阶段算法 5.结果 5.1 YOB评价:单变量 5.3对合成数据集 ...

  7. TricycleGAN:基于形状先验的无监督图像合成和分割

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...

  8. Github大热论文 | U-GAT-IT:基于GAN的新型无监督图像转换

    作者丨武广 学校丨合肥工业大学硕士生 研究方向丨图像生成 生成对抗网络(GAN)在这几年的发展下已经渐渐沉淀下来,在网络的架构.训练的稳定性控制.模型参数设计上都有了指导性的研究成果.我们可以看出 1 ...

  9. 基于深度学习和无监督血管分割的OCTA图像中央凹血管区分割 -- ICASSP2021 阅读笔记

    文章目录 文章信息 标题 出处 关键词 任务背景 任务需求 背景 贡献 提出的方法 实验 数据集描述 OCTAGON3 sFAZDA TA 实验指标 小结 文章信息 标题 FOVEAL A V ASC ...

最新文章

  1. Python,C++中点云 .las转.pcd
  2. 企业级的开源备份工具之磁盘柜存储配置
  3. ASP.NET WebServices 因 URL 意外地以“/HelloWorld”结束,请求格式无法识别。
  4. 神策数据获华农保险2020年“最佳合作机构”荣誉称号
  5. C++中类的拷贝控制
  6. 一本通 1064:奥运奖牌计数--AC
  7. 支持向量机的基本原理
  8. python基础自动化测试_Python自动化测试基础之HelloWorld
  9. python图形库使用教程_PySide——Python图形化界面入门教程(四)
  10. 利用HTML和CSS做的简历模板
  11. c#语言打印九九乘法表,C#打印九九乘法表
  12. 如何统计一列中姓名重复出现的次数,并且只标注在第一次出现姓名的位子
  13. 企业直播要如何做?硬件设备、网络环境有哪些要求?
  14. 桂电计算机专业2021推免人数,2021届计算机科学与技术学院推免公示
  15. 京东20210618活动脚本
  16. CTO也糊涂的常用术语:功能模块、业务架构、用户需求、文档
  17. 【DG】 DataGuard 中处理archive gap的方法
  18. vue3 ref 和reactive的区别
  19. 常用数学公式 关于正态分布的20210806
  20. Could not connect to SMTP host: smtp.163.com, port: 465, response: -1

热门文章

  1. Node.js API方法
  2. DML 数据操纵语言
  3. error C2712: Cannot use __try in functions that require object unwinding
  4. kindeditor自定义插件插入视频代码
  5. 贪心 FZU 2013 A short problem
  6. 【记录】[2014.2.12]网新第一天
  7. @Override错误
  8. 64位Win8企业版出现“Unknown Hard Error”系统警告的一个解决方法
  9. 完美的xslt数值函数与字符串函数
  10. 谈谈MVC项目中的缓存功能设计的相关问题