算法工程师进化-NLP之主题模型
1 引言
主题模型是文本挖掘的重要工具,近年来在学术界和工业届都获得了非常多的关注。学术界的工作主要集中在建模层面,即提出各种各样的主题模型来适应不同的场景,因此缺乏指导主题模型在工业场景落地的资源和文献。
本文主要是以《Familia:开源的中文主题模型应用工具包》为参考资料,入门NLP领域。该文结合开源工具Familia(百度开源),总结主题模型在工业届的一些典型应用案例,从而方便用户找到适合自己任务的模型以及该模型的应用方式。
2 主题模型概念
以LDA为代表的主题模型,训练的结果一般是不同主题下每个语义相关词的重要程度;也就是说基于大量的网页预料,模型可以训练得到多种主题(隐变量)下各主题的关键词。基于训练的结果就可以评估一个文档的主题分布。
主题模型在工业届的应用范式可以分为两类:语义表示和语义匹配。
3 语义表达
主题模型的产生的主题分布可以看做文档的语义表示,该表示能够用于文档分类、聚类、内容丰富度分析、CTR预估等多种任务。
基于主题模型的文档特征表示可是分为两类:一类是经过主题模型降维,得到文档在主题上的多项分布;另一类是联合使用主题向量和文档主题分布,生成文档的向量表示。
3.1 新闻质量分类
为了提升用户体验,通常需要构建一个分类器自动过滤低质量的新闻。首先我们设计一些传统特征:新闻来源站、新闻内容长度、图片数量、新闻热度等等。除了这些人工特征,也可利用主题模型来计算每篇新闻的主题分布,作为附加特征和人工特征一起组成新特征集合,然后对7000篇文章进行人工标注,新闻质量划分为0/1/2共3个档位,其中0档表示质量最差,2档表示质量最优。基于训练集,我们采用GBDT在5000篇新闻上进行训练,并在另外2000篇新闻数据上做测试。从实验结果来看,主题分布作为特征扩充可以有效提升分类器的效果。
3.2 新闻聚类
文档的主题分布可看做是包含语义信息的一个降维过程,低维的主题分布特征可以用来对文档进行聚类。基于主题分布特征进行K-means聚类,可以发现新闻的主题分布可以很好的完成聚类任务。
3.3 网页内容丰富度
丰富度一定程度上反映了网页的质量。通过计算网页的主题分布,可以进一步计算该分布的信息熵,作为衡量网页内容丰富程度的指标,信息熵越大,表示网页内容越丰富。那么网页内容丰富度有什么重要作用呢?它可以作为一维特征引入更为复杂的网页排序函数中。
4 语义匹配
工业届中很多应用都有在语义上衡量文本相似度的需求,这类需求可以统称为语义匹配。根据文本长度不同,可以细分为三类:短文本-短文本语义匹配,短文本-长文本语义匹配和长文本-长文本语义匹配。需要注意的是基于主题模型的语义匹配通常作为经典文本匹配技术的补充,而不是取代。
4.1 短文本-短文本语义匹配
工业届的很多场景都会应用到短文本-短文本的语义匹配,例如:在网页搜索中,我们需要度量用户查询(query)和网页标题的语义相关性,在查询(query)推荐中,我们需要度量query和其他query的相似度。由于主题模型在短文本上的效果不理想,在短文本-短文本匹配任务中词向量的应用比主题模型要更加普遍。
4.2 短文本-长文本语义匹配
短文本-长文本语义匹配在工业届的应用更加普遍。例如:在搜索引擎中,我们需要计算一个用户查询(query)和一个网页正文(content)的语义相关度。由于query通常较短,而网页content较长,因此query与content的匹配与上文提及的短文本-短文本不同,通常使用短文本-长文本语义匹配,已得到更好的匹配效果。
在计算相似度的时候,我们规避对短文本直接进行主题映射,而是根据长文本的主题分布,计算该分布生成短文本的概率,作为它们之间的相似度。
- 案例1:用户查询-广告页面相似度
方法:首先通主题模型学习得到广告的主题分布,再计算用户查询和广告页面的语义相似度,该相似度作为一维特征,应用于更复杂的排序模型中。
- 案例2:文档关键词抽取
在分析文档时,我们往往会抽取一些文档的关键词作为标签,这些标签在用户画像和推荐任务中扮演重要角色。从文当中抽取关键词最常用的方法是利用词的TF和IDF信息,此外还可以利用主题模型,估计一个文档产生单词的概率作为该单词的重要度指标。
4.3 长文本-长文本语义匹配
通过使用主题模型,我们可以得到两个长文本的主题分布,再通过计算两个二项分布的距离来衡量它们之间的相似度。
- 案例1:新闻个性化推荐
方法:互联网应用中,当我们积累了大量用户行为之后,这些行为信息对应的文本内容可以作为一个抽象文档,对该文档进行主题映射获得的主题分布可以作为用户画像,例如:在新闻个性化推荐中,我们将用户近期阅读的新闻(或者新闻标题)合并成一篇长文档,并将该文档的主题分布作为表达用户阅读兴趣的用户画像。通过计算每篇实时新闻的主题分布与用户画像的距离,就可以作为向用户推送新闻的选择依据。
- 案例2:小说个性化推荐
方法:基于特征的矩阵分解可以增加一些全局特征、用户特征以及物品特征,使得模型的在推荐上可以取得更好的效果。另外我们还可以构建用户画像和每个小说主题分布的距离,该距离作为全局特征,加入到SVDFeature中训练。
- 垂类新闻CTR预估
方法:利用新闻-用户相似度(语义匹配),新闻主题特征(主题分布)和其他常规统计特征(时间、新闻源、点击率等),训练模型,从而预估CTR。
5 参考资料
算法工程师进化-NLP之主题模型的更多相关文章
- NLP︱LDA主题模型的应用难题、使用心得及从多元统计角度剖析
将LDA跟多元统计分析结合起来看,那么LDA中的主题就像词主成分,其把主成分-样本之间的关系说清楚了.多元学的时候聚类分为Q型聚类.R型聚类以及主成分分析.R型聚类.主成分分析针对变量,Q型聚类针对样 ...
- 算法工程师进化-SQL
1 引言 SQL操作往往是程序员必备的技能,对于算法工程师而言,熟练掌握SQL操作则更为重要.本文以<SQL语句执行顺序>作为学习资料,总结SQL的理论部分. 2 SQL查询语句的执行顺序 ...
- TF-IDF与主题模型 - NLP学习(3-2)
分词(Tokenization) - NLP学习(1) N-grams模型.停顿词(stopwords)和标准化处理 - NLP学习(2) 文本向量化及词袋模型 - NLP学习(3-1) 在上一篇博文 ...
- [综] Latent Dirichlet Allocation(LDA)主题模型算法
多项分布 http://szjc.math168.com/book/ebookdetail.aspx?cateid=1&§ionid=983 二项分布和多项分布 http:// ...
- 文本主题模型之LDA(二) LDA求解之Gibbs采样算法
文本主题模型之LDA(一) LDA基础 文本主题模型之LDA(二) LDA求解之Gibbs采样算法 文本主题模型之LDA(三) LDA求解之变分推断EM算法(TODO) 本文是LDA主题模型的第二篇, ...
- 文本主题模型之LDA(三) LDA求解之变分推断EM算法
文本主题模型之LDA(一) LDA基础 文本主题模型之LDA(二) LDA求解之Gibbs采样算法 文本主题模型之LDA(三) LDA求解之变分推断EM算法 本文是LDA主题模型的第三篇,读这一篇之前 ...
- Spark:聚类算法之LDA主题模型算法
http://blog.csdn.net/pipisorry/article/details/52912179 Spark上实现LDA原理 LDA主题模型算法 [主题模型TopicModel:隐含狄利 ...
- nlp算法工程师养成记 目标要求
时间规定: 2018.12.07-2018.02.15 能力养成: linux, shell python, c++(会多少算多少) tensorflow, keras, pytorch(tf优先) ...
- Spark机器学习(8):LDA主题模型算法
1. LDA基础知识 LDA(Latent Dirichlet Allocation)是一种主题模型.LDA一个三层贝叶斯概率模型,包含词.主题和文档三层结构. LDA是一个生成模型,可以用来生成一篇 ...
随机推荐
- alibaba之Nacos
本文为转载文章 原文链接:https://windmt.com/2018/11/09/intro-to-spring-cloud-alibaba-nacos/ 上个月最后一天的凌晨,Spring Cl ...
- Oracle 实例管理
理解初始化参数文件实例由内存中构建它的参数来定义.许多参数(但不是全部)可以在启动后更改.有些参数在启动时就固定了,只能在关闭实例并再次启动时更改. 静态和动态参数文件参数文件由两类:静态参数文件(也 ...
- C# 参数关键字params的作用
为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,要求: (1)在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params ...
- oracle中查看一张表是否有主键,主键在哪个字段上
利用Oracle中系统自带的两个视图可以实现查看表中主键信息,语句如下:select a.constraint_name, a.column_name from user_cons_columns a ...
- Python %操作符 字符串格式化
%操作符(字符串格式化,string formatting),说明如下: %[(name)][flags][width].[precision]typecode (name)为命名 flags可以有+ ...
- vue项目获取当前地址栏参数(非路由传参)
项目中遇到一个需求,就是另一个管理系统带参直接单纯的跳转跳转到vue pc项目中的某个页面,后再初始化查询数据,参数以地址栏的形式传入 管理系统:打开新地址地址 let obj = { id: 21, ...
- 建立复数类Complex,并且进行赋值,求和,取模等操作
#include "pch.h" #include <iostream> #include<cmath> using namespace std; clas ...
- MVC三层架构的分层开发思想
- python学习笔记(一)学习资料记录
相关资料网站 1. python3简明教程 适合新学者,因为可以在线操作,并且校验结果,同时还有考试系统.比较基础 2. python数据分析数据科学中文英文工具书籍下载 免费的中英文数据的PDF下载 ...
- python+MongoDB使用示例
本博客起源于博主的大三NoSQL课程设计,采用python+MongoDB结合方式,将数据从txt文件导入MongoDB之中,再将其取出以作图.主要技术是采用python与MongoDB结合存储读取方 ...