推荐系统三十六式学习笔记:原理篇.内容推荐05|从文本到用户画像有多远?

目录

  • 从文本开始
  • 构建用户画像
    • 一、结构化文本
      • 1、TF-IDF
      • 2、TextRank
      • 3、内容分类:
      • 4、实体识别
      • 5、聚类
      • 6、词嵌入
    • 二、标签选择
      • 1、卡方检验
      • 2、信息增益
  • 总结

对于一个早期的推荐系统来说,基于内容推荐离不开用户构建一个初级的画像,这种初级的画像一般叫做用户画像(User Profile),今天我就来讲一讲从大量文本数据中挖掘用户画像常常用到的一些算法;

从文本开始

用户这一端比如说有:
1、注册资料中的姓名、个人签名;
2、发表的评论、动态、日志等;
3、聊天记录;

物品这一端也有大量文本信息,可以用于构建物品画像(Item Profile),并最终帮助丰富用户画像(User Profile),这些数据举例来说有:
1、物品的标题、描述;
2、物品本身的内容(一般指新闻资讯类);
3、物品的其他基本属性的文本;

文本数据是互联网产品中最常见的信息表达形式,数量多、处理快、存储小,因为文本数据的特殊地位,所以今天专门介绍一些建立用户画像过程中用到的文本挖掘算法。

构建用户画像

要用物品和用户的文本信息构建出一个基础版的用户画像,大致需要做这些事;
1、把所有非结构化的文本结构化,去粗取精,保留关键信息;
2、根据用户行为数据把物品的结构化结果传递给用户,与用户自己的结构化信息合并;

第一步最关键也最基础,其准确性,粒度,覆盖面都决定了用户画像的质量,这一步用到很多文本挖掘算法。
第二步会把物品的文本分析结果,按照用户历史行为把物品画像(Item Profile)传递给用户。

一、结构化文本

我们拿到的文本,常常是自然语言描述的,非结构化的,但是计算机在处理时,只能使用结构化的数据索引,检索,然后向量化后再计算;所以文本分析,就是为了将非结构化的数据结构化。

从物品端的文本信息,我们可以利用成熟的NLP 算法分析得到的信息有下面几种。
1、关键词提取:最基本的标签来源,也为其他文本分析提供基础数据,常用TF-IDF和TextRank。
2、实体识别:人物、位置和地点、著作、影视剧、历史事件和热点事件等,常用于基于词典的方法结合CRF模型。
3、内容分类:将文本按照分类体系分类,用分类来表达较粗粒度的结构化信息。
4、文本:在无人制定分类体系的前提下,无监督地将文本划分成多个类簇也很常见,别看不是标签,簇类编号也是用户画像的常见构成。
5、主题模型:从大量已有文本中学习主题向量,然后再预测新的文本在各个主题上的概率分布情况,其实这也是一种聚类思想,主题向量也不是标签形式,也是用户画像的常用构成。
6、嵌入:也叫Embedding,从词到篇章,无不可以学习这种嵌入表达。嵌入表达就是为了挖掘出字面意思之下的语义信息,并且用有限的维度表达出来。

下面我来介绍几种常见的文本结构化算法。

1、TF-IDF

TF全称就是Term Frequency,是词频的意思,IDF就是Inverse Document Frequency是逆文档频率的意思。TF-IDF 提取关键词的思想来自信息检索领域,其实思想很朴素,
包含了两点:在一篇文本中反复出现的词会更重要,在所有文本中都出现的词更不重要。这两点就分别量化成 TF和IDF两个指标;
1、TF,就是词频,要提取关键词在文本中出现的次数;
2、IDF,是提前统计好的,在已有的所有文本中,统计每一个词出现在了多少文本中,记为n,也就是文档频率,一共有多少文本,记为N。

IDF就是这样计算:

在这里插入图片描述
计算过程为:词出现的文档数加1,再除总文档数,最后结果再取对数。

IDF的计算公式有这么几个特点:
1、所有词的N都是一样的,因此出现文本数越少(n)的词,它的IDF值越大;
2、如果一个词的文档频率为0,为防止计算出无穷大的IDF,所以分母中会有一个1;

计算出TF和IDF后,将两个值相乘,就得到每一个词的权重。根据该权重筛选关键词的方式有:
1、给定一个K,取Top K个词,这样做简单直接,但有一点,如果总共得到的词个数少于K,那么所有词都是关键词了,显然这样做不合理。
2、计算所有词权重的平均值,取在平均值之上的词作为关键词;

另外,在某些场景下,还会加上以下其他过滤措施,如:只提取动词和名词作为关键词。

2、TextRank

TextRank是PageRank的私生子之一,著名的pagerank算法是Google用来衡量网页重要性的算法,TextRank算法的思想也与之类似,可以概括为:
1、文本中,设定一个窗口宽度,比如k个词,统计窗口内的词和词的共线关系,将其看成无向图。图就是网络,由存在连接关系的节点构成,所谓无向图,就是节点之间的连线不考虑从谁出发,有关系就可以了。

2、所有词初始化的重要性都是1;
3、每个节点把自己的权重平均分配给“和自己有连接”的其他节点;
4、每个节点将所有其他节点分给自己的权重求和,作为自己的新权重;
5、如此反复迭代第3,4两步,直到所有的节点权重收敛为止。

通过TextRank计算后的词语权重,呈现出这样的特点:那些有共线关系的会互相支持对方成为关键词。

3、内容分类:

在门户网站时代,每个门户网站都有自己的频道体系,这个频道体系就是一个非常大的内容分类体系,这一做法也延伸到了移动互联网UGC时代,图文信息流APP的资讯内容也需要被自动分类到不同的频道中,从而能够得到最粗粒度的结构化信息,也被很多推荐系统用来在用户冷启动时探索用户兴趣。

在门户时代的内容分类,相对来说容易,因为那时候的内容都是长文本,长文本的内容分类可以提取很多信息,而如今UGC当道的时代,短文本的内容分类则更困难一些。短文本分类方面的经典算法是SVM,子啊工具上现在最常用的是Facebook开源的FastText。

4、实体识别

命名实体识别(也常常被简称为NER,Name-Entity Recognition)在NLP技术中常常被认为是序列标注问题,和分词、词性标注属于同一类问题。

所谓序列标注问题,就是给你一个字符序列,从左往右遍历每个字符,一边遍历一边对每一个字符分类,分类的体系因序列标注问题不同而不同;
1、分词问题:对每一个字符分类为“词开始”“词中间”“词结束”三类之一;
2、词性标注:对于每一个分好的词,分类为定义的词性集合之一;
3、实体识别:对每一个分好的词,识别为定义的命名实体集合之一;

对于序列标注问题,通常的算法就是隐马尔可夫模型(HMM)或者条件随机场(CRF),我们在推荐系统中主要是挖掘出想要的结构化结果,对其中原理有兴趣再去深入了解。

实体识别还有比较实用化的非模型做法:词典法。提前准备好各种实体的词典,使用trie-tree数据结构存储,拿着分好的词去词典里找,找到某个词就任务是提前定义好的实体。以实体识别为代表的序列标注问题上,工业级别的工具SpaCy比NLTK在效率上优秀一些;

5、聚类

传统聚类方法在文本中的应用,今天逐渐被主题模型取代,同样是无监督模型,以LDA为代表的主题模型更能够更准确地抓住主题,并且能够得到软聚类的效果,也就是说可以让一条文本属于多个类簇。

LDA模型需要设定主题个数,如果你有时间,那么这个K可以通过一些实验来对比挑选,方法是:每次计算K个主题两两之间的平均相似度,选择一个较低的K值;在推荐系统领域,只要计算资源够用,主题数可以尽量多一些。

另外,需要注意的事,得到文本在各个主题上的分布,可以保留概率最大的前几个主题作为文本的主题。LDA工程上较难的是并行化,如果文本数量没有到海量程度,提高单机配置是可以的,开源的LDA训练工具有Gensim,PLDA等可供选择。

6、词嵌入

关于嵌入,是一个数学概念。以词嵌入为例来说吧。
词嵌入,也叫作Word Embedding。前面讲到的结构化方案,除了LDA,其他得到的一下标签无一例外都是稀疏的,而词嵌入则能够为每一个词学习得到一个稠密的向量。

比如北京,可能包含“首都,中国,北方,直辖市,大城市”等等这些词义在所有文本上是有限的,比如128个,于是每个词就有一个128维的向量表达,向量中各个维度上的值大小代表了词包含各个语义的多少。

得到这些向量可以做:
1、计算词和词之间的相似度,扩充结构化标签;
2、累加得到一个文本的稠密向量;
3、用于聚类,会得到比使用词向量聚类更好的语义聚类效果。

这方面当属大名鼎鼎的Word2Vec了,Word2Vec是用浅层神经网络学习得到每个词的向量表达,Word2Vec最大的贡献在于一些工程技巧上的优化,使得百万词的规模是在单机上可以几分钟轻松跑出来,得到这些词向量后可以聚类或者进一步合成句子向量再使用;

二、标签选择

用户端的文本,物品端的文本如何结构化,得到诸如标签(关键词,分类等)、主题、词嵌入向量。接下来就是第二步:如何把物品的结构化信息给用户呢?

我们想一想,用户在产品上看到了很多我们用各种逻辑和理由展示给他的物品,他只从中消费了一部分物品。现在问题就是,到底是哪些特性吸引了他消费呢?

我们把用户对物品的行为,消费没有消费看成是一个分类问题。用户用实际行动帮我们标注了若干数据,那么挑选出他实际感兴趣的特性就变成了特征选择问题。

最常用的两个方法:卡方检验(CHI)和信息增益(IG)。基本思想是:
1、把物品的结构化内容看成文档;
2、把用户对物品的行为看成是类别;
3、每个用户看到过的物品就是一个文本集合;
4、在这个文本集合上使用特征选择算法选出每个用户关心的东西。

1、卡方检验

CHI就是卡方检验,本身是一种特征选择方法。

前面的TF-IDF和TextRank都是无监督关键词提取算法,而卡方检验(CHI)则是有监督的,需要提供分类标注信息。

为什么需要呢?在文本分类任务中,挑选关键词是为了分类任务服务,而不仅仅是挑选出一种直观上看着重要的词。

卡方检验本质上在检验词和某个类别C相互独立这个假设是否成立,和这个假设偏离越大,就越说明这个词和类别C关联紧密,那当然这个词就是关键词了。

计算一个词Wi和Cj的卡方值,需要统计四个值:
1、类别为 C j C_j Cj的文本中出现词 W i W_i Wi的文本数A;
2、词 W i W_i Wi在非 C j C_j Cj的文本中出现的文本数B;
3、类别为 C j C_j Cj的文本中没有出现词 W i W_i Wi的文本数C;
4、词 W i W_i Wi在非 C j C_j Cj的文本中没有出现的文本数D;

在这里插入图片描述
然后按照如下公式计算每一个词和每一个类别的卡方值:

在这里插入图片描述
关于这个卡方值计算,我在这里说明几点:
1、每个词和每个类别都要计算,只要对其中一个类别有帮助都应该留下;
2、由于是比较卡方值的大小,所以公式的N可以不参与计算,因为它对于每个词都一样,就是总的文本数;
3、卡方值越大,意为着偏离词和类比相互独立的假设越远;

2、信息增益

IG即information Gain,信息增益,也是一种有监督的关键词选择方法,也需要有标注信息。要理解信息增益,先理解信息熵;
信息熵,举一个例子,比如一批文本被标注了类别,那么随意挑选一个文本,问你这是什么类别?
如果各个类别的文本数量都差不多,也就是说每个类别的概率都相对较小,则信息熵较大;
如果其中一个类别的文本数明显大于其他类别,你猜这个类比猜对的概率就相对较大,此时这个类别的信息熵则较小;
可以简单理解信息熵和概率成反比,信息熵大,概率低,信息熵小,则概率大;

信息增益表示在得知特征X的信息后,对于分类结果的不确定性的减少程度。具体来说,信息增益是指在得知特征X的取值后,对于分类结果的熵减少的程度。
信息增益的计算公式如下:
信息增益 = 父节点的熵 − 子节点的熵 \text{信息增益} = \text{父节点的熵} - \text{子节点的熵} 信息增益=父节点的熵子节点的熵

信息增益应用最广就是数据挖掘中的决策树分类算法,经典的决策树分类算法挑选分裂节点时就是计算各个属性的信息增益,始终挑选信息增益最大的节点作为分裂节点。

卡方检验和信息增益不同之处在于:前者是针对每一个行为单独筛选一套标签出来,后者是全局统一筛选;
这些方法都是在离线阶段批量完成的,把用户的画像生成配置成离线任务,每天更新一遍,次日就可以使用新的用户画像了。

总结

用户画像对于推荐系统还是非常必要的,而产品中属文本数据越多,那如何用文本数据构建出用户的画像内容呢?
本文按照如下步骤梳理了这一过程:
1、分析用户的文本和物品的文本,使其结构化;
2、为用户挑选有信息量的结构化数据,作为其画像内容;

其中,我们提出了把为用户挑选画像标签看成是特征选择问题,主要方法是卡方检验和信息增益。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】栈的应用

目录 0 引言 1 栈在括号匹配中的应用 2 栈在表达式求值中的应用 2.1 算数表达式 2.2 中缀表达式转后缀表达式 2.3 后缀表达式求值 3 栈在递归中的应用 3.1 栈在函数调用中的作用 3.2 栈在函数调用中的工作原理 4 总结 0 引言 栈(Stack)是一…

MySQL A表的字段值更新为B表的字段值

MySQL A表的字段值更新为B表的字段值 准备数据表 create table person (id int unsigned auto_increment comment 主键 primary key,uuid varchar(32) not null comment 系统唯一标识符32个长度的字符串,mobile varchar(11) null comment 中国国内手机号,nickn…

使用 Ollama 和 Open WebUI 自托管 LLM 聊天机器人(无需 GPU)

✨点击这里✨:🚀原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!) 使用 Ollama 和 Open WebUI 自托管 LLM 聊天机器人(无需 GPU) &#x1f31…

二叉查找树详解

目录 二叉查找树的定义 二叉查找树的基本操作 查找 插入 建立 删除 二叉树查找树的性质 二叉查找树的定义 二叉查找树是一种特殊的二叉树,又称为排序二叉树、二叉搜索树、二叉排序树。 二叉树的递归定义如下: (1)要么二…

10. MySQL 用户

文章目录 【 1. 权限表 】1.1 user 权限表1.1.1 用户列1.1.2 权限列1.1.3 安全列1.1.4 资源控制列 1.2 db 表用户列权限列 1.3 tables_priv 表1.4 columns_priv 表1.5 procs_priv表 【 2. 用户管理 】2.1 创建用户 CREATE USER2.2 用户的登陆、退出登陆 MySQL退出 MySQL 2.3 重…

Java常见错误-内部类-简要分析

Java常见错误-内部类-简要分析 概念分类成员内部类(非静态内部类)静态内部类成员内部类和静态内部类区别 局部内部类匿名内部类 注意事项总结 概念 ​ 内部类,顾名思义,就是在一个类的内部定义的类。这种设计允许将一个类的实现细…

深度学习-10-测试

深度学习-10-测试 本文是《深度学习入门2-自製框架》 的学习笔记,记录自己学习心得,以及对重点知识的理解。如果内容对你有帮助,请支持正版,去购买正版书籍,支持正版书籍不仅是尊重作者的辛勤劳动,也是鼓励…

Web前端ES6-ES13笔记合集(下)

#### 五.ES10新特性 ##### 1. Object.fromEntries > Object.fromEntries()方法允许你轻松地将键值对列表转换为对象 js const arr [["name", "kerwin"], ["age", 100]]; console.log(Object.fromEntries(arr))//{name: kerwin, age: 100} …

pytorch 笔记:pytorch 优化内容(更新中)

1 Tensor创建类 1.1 直接创建Tensor,而不是从Python或Numpy中转换 不要使用原生Python或NumPy创建数据,然后将其转换为torch.Tensor直接用torch.Tensor创建或者直接:torch.empty(), torch.zeros(), torch.full(), torch.ones(), torch.…

树莓派【Raspberry Pi-64位】3b+,Pi4J 2.0入门

一.前言: 前面的文章讲解了树莓派在centos7 arm64版本下的使用,用一款智能小车为例子,做了代码实践。 由于centos7不再维护,且Pi4J 1.x版本也因为WiringPi 的局限,Pi4J从1.x升级为2.x.所以本专栏的技术栈也将进行调整,A.从centos7系统回到Raspberry Pi-64位系统。B.Pi4…

4.通用编程概念

目录 一、变量与常量1.1 变量1.2 常量 二、遮蔽三、数据类型3.1 标量类型1. 整型2. 浮点型3. 布尔类型4.字符类型 3.2 复合类型1. 元组2. 数组 四、函数五、语句和表达式六、函数的返回值 一、变量与常量 1.1 变量 在Rust中默认的变量是不可变的,如果修改其值会导致…

《青少年编程与数学》课程方案:4、课程策略

《青少年编程与数学》课程方案:4、课程策略 一、工程师思维二、使命感驱动三、价值观引领四、学习现代化五、工作生活化六、与时代共进 《青少年编程与数学》课程策略强调采用工程师思维,避免重复造轮子,培养使命感,通过探索兴趣、…

编程语言有哪些?这些希望你都知道

编程语言有哪些 编程语言有很多种,包括但不限于以下几种: Java:当今最普遍使用的开发语言之一,简单易学,且跨平台性非常强,对网络开发的支持令人称赞。Python:语法清楚,干净&#…

【Vue】如何提供访问vuex的数据

文章目录 一、提供数据二、访问Vuex中的数据通过$store访问的语法1)模板中使用2)组件逻辑中使用3)js文件中使用 三、通过辅助函数 - mapState获取 state中的数据 一、提供数据 State提供唯一的公共数据源,所有共享的数据都要统一…

[office] 快速删除excel中的空行和列的方法 #其他#学习方法#经验分享

快速删除excel中的空行和列的方法 用户在网上下载好的Excel表格打开之后发现有很多空白行,怎么样将这些空白行或单元格一次性删除掉呢?下面教大家在Excel中用定位一次性可以把空白行删除 用户在网上下载好的Excel表格打开之后发现有很多空白行,怎么样将…

Vue3 使用audio播放语音+监听播放语音完成事件

需求&#xff1a;输入一段文字&#xff0c;点击语音框&#xff0c;将本地语音&#xff08;提前准备好的&#xff09; 播放出来 播放中效果 代码 <div class"listConAI" click"handleOpenSpeech" ><imgsrc"../../../../assets/images/blueo…

web前端 孙俏:深度探索与实战之路

web前端 孙俏&#xff1a;深度探索与实战之路 在这个数字化、信息化的时代&#xff0c;web前端技术以其独特的魅力&#xff0c;吸引着越来越多的开发者投身其中。今天&#xff0c;我们将跟随孙俏的脚步&#xff0c;一同探索web前端的深度与广度&#xff0c;揭开其神秘的面纱。…

中文文案写作有哪些合适的AIGC工具?

这是计育韬老师第 8 次开展面向全国高校的新媒体技术公益巡讲活动了。而在每场讲座尾声&#xff0c;互动答疑环节往往反映了高校师生当前最普遍的运营困境&#xff0c;特此计老师在现场即兴答疑之外&#xff0c;会尽量选择有较高价值的提问进行文字答疑梳理。 *本轮巡讲主题除了…

【Vue】开启严格模式及Vuex的单项数据流

文章目录 一、引出问题二、开启严格模式 一、引出问题 目标 明确 vuex 同样遵循单向数据流&#xff0c;组件中不能直接修改仓库的数据 这样数据的流向才会更加清晰&#xff0c;将来对数据的修改&#xff0c;都在仓库内部实现的&#xff0c;更易于维护 直接在组件中修改Vuex中…

Git:版本控制的艺术与GitLab实战指南

在当今快速发展的软件开发领域&#xff0c;高效、协同的代码管理是项目成功的关键。Git&#xff0c;作为一款分布式版本控制系统&#xff0c;凭借其强大的功能和灵活性&#xff0c;成为了众多开发者首选的版本控制工具。本文将带您深入探索Git的核心概念、基础操作&#xff0c;…