BERTopic:NLP主题模型的未来!

edee2bd434af08d7c384d648473031e1.png

文| ZenMoore
编| 小轶

以前我一直以为,主题建模(提取文档的主题词)这种机器学习时代就开始研究的基础工具,现在肯定已经到头了,虽然...有时效果可能不是那么让人满意。

但突然看到一则推文:“彻底疯了!不需要预先清洗数据,就能够快速拿到质量难以置信的主题!” “NLP 主题模型的未来!”

49cb6a11a405a432dd204d17b9effa29.png6e1583b0b686d375be967e0628bae349.png

好家伙!让人又爱又恨又离不开的主题模型,终于要升华了吗?!!

看了论文之后,恍然大悟,完全没有想到现在主流主题模型的问题竟然出在这么细节的地方:基于密度聚类和基于中心采样(主题词)之间的 gap ! 而且这个问题也竟然可以通过非常简单的方式解决......

回顾一下之前的主题建模的方式,可以简单地分成两种:

  1. 基于词袋的模型:比如 LDA(潜在狄利克雷分配)、NMF(非负矩阵分解) 等。

  2. 基于预训练词嵌入的聚类方法:比如 Top2Vec[1], CTM[2], Sia et al., 2020[3]等。

基于词袋的方法主要是基于文档-单词的共现频率特征来抽取主题。其缺点在于:没有充分考虑每个单词的上下文语义 。例如 LDA 算法,假定主题的先验分布和单词的先验分布都服从狄利克雷分布,又假定每个主题的单词分布、每个文档的主题分布均服从多项分布,然后再在“文档-单词”共现数据上通过 EM 等算法去求解得到主题。

在深度学习时代,我们更偏好使用基于预训练词嵌入的方式。一般而言,这类方法首先通过一个预训练的模型(比如 Doc2Vec、Word2Vec、GloVe、BERT)计算出文档的向量表示以及单词的向量表示,然后把它们嵌入到同一个语义空间中。假定主题相似的文档在嵌入空间中的位置也是相近的(聚类),然后从这个嵌入空间的簇中去采样主题词。

通常这些簇以基于密度的方式聚类[5]形成。这样聚类后形成的簇不一定是“球状”的(sphere-like),每个簇的边界形状可以千奇百怪(如下图)。

  • 基于质心的聚类:假定每个簇是一个球状结构(sphere-like) (其实是一个并不太合理的约束...)

  • 基于层次的聚类:假定数据点存在层次关系,例如“国家”-“省份”-“城市”这种。

  • 基于密度的聚类:挨在一起的就是一类的,不一定必须是 sphere-like 所以,基于层次和密度的聚类是最合理的方式。

然而,此前的方法是怎么做的呢?例如 Top2Vec[1],它会先将簇的质心(centroid) 作为主题向量, 然后认为:对于一个给定的词语,其词向量与主题向量距离越近,则它越能代表这一主题

这就出现问题了朋友们:聚类时是基于密度的,采词却是基于与质心的距离!(盲生发现了华点!)

举个栗子。在下图中有一个长条状的簇,其质心用红色“X”标记。按照 Top2Vec 的做法,采词空间如红色圆周所示。可以看到,采词空间中有一部分并不在簇,就很容易误采到其他簇的单词

26ebac10a3264e392e63e16b9dd9a828.png
▲红色的圆圈就是所谓的“采词空间”,很明显超出了簇的范围

而今天要介绍的这篇 BERTopic, 使用一种基于类别的 TF-IDF 变体,解决了这个问题:聚类和采词之间的不一致不兼容问题(gap)。

论文标题
BERTopic: Neural topic modeling with a class-based TF-IDF procedure

论文作者
Maarten Grootendorst

论文链接
https://arxiv.org/pdf/2203.05794.pdf

原理

BERTopic 方法的步骤如下:

  1. 首先使用预训练模型计算 document embeddings (比如常用的 Sentence-BERT 等)

  2. 因为 document embeddings 维度很高,在嵌入空间中就非常稀疏,不容易进行聚类,所以需要先进行降维,比如 PCA 或者 t-SNE 等方法,这里用的是 UMAP[4]

  3. 基于层次和密度进行聚类,这里用的是典型的 HDBSCAN[5] 算法

  4. 划重点:使用 class-based TF-IDF 变体提取每个簇的主题词

因为上文所说的这个 gap 产生的原因,本质上就是“采词空间”没有收束到对应的簇上。所以只要想办法把候选集合定在簇里面就好了!😋

当然可以通过缩小 sphere 来约束,但是这样肯定会漏掉不少候选词...

静态主题建模

静态主题建模假定时间是静止的当下,不考虑文档主题分布随着时间的变化。

回顾一下 TF-IDF 算法 :

式子中,t 代表单词(term), d 代表文档(document), 这个值的意思是 t 在 d 中的词频乘以 log(语料总文档数量 比 包含t的文档的数量)。

BERTopic 使用的是相同的策略,只不过文档 d 做了一些改变:将一个 cluster (也就是一个类 class) 中的所有文档拼接起来作为新的单个文档 d. 这样 TF-IDF 公式就变成了 c-TF-IDF:

402 Payment Required

其中,c 表示 class, A 表示每个 class 的平均单词数量, 表示 class c 中 t 的频率, 表示所有 class 中 t 的频率。

就这样,簇 c 里的每个单词 t 都有了一个分数,分数越高,越能代表这个簇的主题~ 显然这个候选集合是收束在簇 c 的范围里面的。

动态主题建模

和静态主题建模不同,动态主题建模考虑到了文档本身随时间的变化特征,即2022年的文档和2012年的文档主题分布是不一样的,2022年大家在讨论的主题是“三体”即将上映,而2012年大家讨论的主题是“2012世界末日”.

针对这种情况,本文引入了新的 TF-IDF 公式:

402 Payment Required

这里的 i 表示第 i 个 timestep.

平滑化

对于动态主题建模另外一个可能有用的假设是,不同 timestep 的 topic 可能是线性相关的,因此作者引入了平滑技巧(optional):

  1. 首先进行 L1-normalization (即除以 L1-norm), for each topic and timestep.

  2. 然后对 normalized vector 进行 average 平滑操作:将第 i 时刻的值与第 i-1 时刻的值进行一个平均作为新的第 i 时刻的值。

效果

作者使用 "all-mpnetbase-v2" SBERT model 作为 embedding model, 在 20 NewsGroups、BBC News、Trump 等数据集上进行了实验,对比结果如下图:

8b3f11f042e0bf90d2239d7006998b53.png
▲可见,BERTopic 有更好的综合能力

然后不同的 embedding model 对效果也会有影响:

5d5d24b5640c5ab5beb69b3761d86849.png

对于动态主题建模,BERTopic 也有很好的综合效果:

101bcc181dc2b6a573804f2e05abdee6.png
▲Evolve 表示使用了上文介绍的平滑技巧

总结下来就是:

BERTopic 优点:弥合了基于密度聚类和基于中心采样之间的 gap;适用于各种语言模型,从而可以根据需要与实际资源量灵活选择可用模型;嵌入聚类和主题生成(采词)是解耦的两个阶段;静态、动态主题建模用的是同一套框架, minimal change.

缺点:没有考虑单文档多主题;因为仅仅考虑了文档的上下文表示而主题词仍然来源于词袋,所以主题当中的单词可能高度相似从而具有一定的冗余性。

写在最后

看完这篇文章之后,最大的感觉就是:细心!太细心了!

密度聚类和中心采样之间的 gap, 这个盲点,真的需要一番好眼力才能发现 😂!所以,做科研,不一定必须追快打新,把 picture 定得多么多么大,能敏锐地发现一些别人发现不了的“小”问题,也是不小的成果。

Finally, 贴一段 BERTopic 的使用示例代码:

from bertopic import BERTopic
from sklearn.feature_extraction.text import CountVectorizer# we add this to remove stopwords
vectorizer_model = CountVectorizer(ngram_range=(1, 2), stop_words="english")model = BERTopic(vectorizer_model=vectorizer_model,language='english', calculate_probabilities=True,verbose=True
)
topics, probs = model.fit_transform(text)

代码来源于:https://www.pinecone.io/learn/bertopic/

然后去更新你的常备 toolkit 吧~ (😉)

f2b31b80a79b6fd3760dbaeaaea1a8a8.jpeg萌屋作者:ZenMoore

智源实习生🧐,爱数学爱物理爱 AI🌸 想从 NLP 出发探索人工认知人工情感的奥秘🧠🤖!个人主页🌎 zenmoore.github.io 知乎🤔 ZenMoore, 微信📩 zen1057398161 嘤其鸣矣,求其友声✨!

作品推荐

  1. 一文跟进Prompt进展!综述+15篇最新论文逐一梳理

  2. 图灵奖大佬+谷歌团队,为通用人工智能背书!CV 任务也能用 LM 建模!

  3. 以4%参数量比肩GPT-3!Deepmind 发布检索型 LM,或将成为 LM 发展新趋势!?

ebb165450e769cdbcf60602885963322.jpeg后台回复关键词【入群

加入卖萌屋NLP、CV、搜推广与求职讨论群

 0dd3100f5d533cd69bef185d6632ff4a.png

[1] Dimo Angelov. 2020. Top2vec: Distributed representations of topics. arXiv preprint arXiv:2008.09470.

[2] Federico Bianchi, Silvia Terragni, and Dirk Hovy. 2020a. Pre-training is a hot topic: Contextualized document embeddings improve topic coherence. arXiv preprint arXiv:2004.03974.

[3] Suzanna Sia, Ayush Dalmia, and Sabrina J Mielke. 2020. Tired of topic models? clusters of pretrained word embeddings make for fast and good topics too! arXiv preprint arXiv:2004.14914.

[4] Leland McInnes, John Healy, Nathaniel Saul, and Lukas Grossberger. 2018. Umap: Uniform manifold approximation and projection. The Journal of Open Source Software, 3(29):861.

[5] Leland McInnes, John Healy, and Steve Astels. 2017. hdbscan: Hierarchical density based clustering. The Journal of Open Source Software, 2(11):205.

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

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

相关文章

K 近邻法(K-Nearest Neighbor, K-NN)

文章目录1. k近邻算法2. k近邻模型2.1 模型2.2 距离度量2.2.1 距离计算代码 Python2.3 kkk 值的选择2.4 分类决策规则3. 实现方法, kd树3.1 构造 kdkdkd 树Python 代码3.2 搜索 kdkdkd 树Python 代码4. 鸢尾花KNN分类4.1 KNN实现4.2 sklearn KNN5. 文章完整代码k近邻法&#xf…

通用人工智能可行吗?组合泛化视角漫谈

"乌鸦为什么像写字台?"因为它们都能produce a few notes (鸟叫/笔记),因为乌鸦和写字台都是思想与记忆的象征(北欧神话),又或者因为,这本身就是一句没有道理的话&#xff…

Transformer 在美团搜索排序中的实践

引言 美团搜索是美团 App 连接用户与商家的一种重要方式,而排序策略则是搜索链路的关键环节,对搜索展示效果起着至关重要的效果。目前,美团的搜索排序流程为多层排序,分别是粗排、精排、异构排序等,多层排序的流程主要…

ACL‘22杰出论文:Prompt范式有bug!

‍文 | pythonGPT-3等超大模型的兴起,也带来了 in-context learning (语境学习)的新范式。在语境学习中,模型并不使用梯度下降,根据监督样本调整参数;而是将监督样本的输入输出接起来作为prompt&#xff08…

程序员面试金典 - 面试题 02.06. 回文链表(快慢指针+链表反转)

1. 题目 编写一个函数,检查输入的链表是否是回文的。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1)…

美团外卖持续交付的前世今生

0. 前言 美团外卖自2013年创建以来,业务一直在高速发展,目前日订单量已突破3000万单,已成为美团点评最重要的业务之一。美团外卖所承载的业务,从早期单一的美食业务发展成为了外卖平台业务。目前除餐饮业务外,闪购、跑…

百万悬赏!寻找“模型越大,效果越差”的奇葩任务!

文 | 天于刀刀犹记 2018 年底谷歌开源 BERT 后,一大批基于 Attention 机制 Transformer 结构的大模型横空出世。XLNet、MPNet、ERNIE,NLP 任务彻底迈入大规模语料训练 fintune 的时代。之前一段时间爆火的 prompt 概念也离不开大模型中最基本的预训练 M…

程序员面试金典 - 面试题 02.08. 环路检测(快慢指针)

1. 题目 给定一个有环链表,实现一个算法返回环路的开头节点。 有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。 示例 1: 输入:head [3,2,0,-4], pos 1 输出&#xff1…

Batch size 没必要设为2的次方!?

文 | 付瑶最近刷到一个话题很有趣,搬来和大家一起讨论下:“batch-size 一定要大小为2的幂吗?不这样设置会有啥差别吗?”发帖人认为大家都进入一个误区。坚持选择batch-size的大小为2的幂次数是因为曾经被告知从计算的角度是对训练效率有益的。但是这个“…

ICDAR 2019论文:自然场景文字定位技术详解

自然场景文字定位是文字识别中非常重要的一部分。与通用的物体检测相比,文字定位更具挑战性,文字在长宽比、尺度和方向上有更大范围的变化。针对这些问题,本文介绍一种融合文字片段及金字塔网络的场景文字定位方法。该方法将特征金字塔机制应…

程序员面试金典 - 面试题 10.01. 合并排序的数组

1. 题目 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。 初始化 A 和 B 的元素数量分别为 m 和 n。 示例: 输入: A [1,2,3,0,0,0], m 3 B [2,5,6], n 3输出: [1,2,2,3,5,6]来源&…

LeCun论文被指「洗稿」? LSTM之父发文怒怼:抄我的还标原创

编 | 好困 Joey David源 | 新智元LSTM之父、暴脾气大爷Jrgen Schmidhuber又开炮了?这回怼的是LeCun,说最近的新论文是炒了自己20多年前的冷饭,只不过换了种说法而已。图灵奖得主Yann Lecun,作为AI界的三巨头之一,他发表…

ESLint 在中大型团队的应用实践

引言 代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到,并或多或少会思考过这一问题。随着前端应用的大型化和复杂化,越来越多的前端工程师和团队开始重视 JavaScript 代码规范。得益于前端开源社区的繁盛&#xff…

程序员面试金典 - 面试题 02.05. 链表求和

1. 题目 给定两个用链表表示的整数,每个节点包含一个数位。 这些数位是反向存放的,也就是个位排在链表首部。 编写函数对这两个整数求和,并用链表形式返回结果。 示例: 输入:(7 -> 1 -> 6) (5 -> 9 ->…

互联网人到最后拼的是体力

文 | 卫夕源 | 卫夕指北互联网人到最后拼的是体力,这么说可能有点绝对。但如果我们将时间线拉长,体力代表的精力绝对是一个人能在互联网领域保持长期竞争力的最重要的因素。至少也是最重要的之一。1.很多互联网人退出了职场竞争,看起来是心力…

谷歌、斯坦福联合发文:我们为什么一定要用大模型?

文 | Harris语言模型已经深刻变革了自然语言处理领域的研究和实践。近年来,大模型在多个领域都取得了重要的突破。它们无需在下游任务上微调,通过合适的指令或者提示就可以取得优异的性能,甚至有时让人为之惊叹。例如,GPT-3 [1] 可…

程序员面试金典 - 面试题 02.04. 分割链表

1. 题目 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。 示例: 输入…

深度学习在搜索业务中的探索与实践

本文根据美团高级技术专家翟艺涛在2018 QCon全球软件开发大会上的演讲内容整理而成,内容有修改。 引言 2018年12月31日,美团酒店单日入住间夜突破200万,再次创下行业的新纪录,而酒店搜索在其中起到了非常重要的作用。本文会首先介…

京东金融,你到底是坏,还是码农裁多了??

7.12更新:部分基金赎回的钱已经到账小金库了,今日从小金库提现时又提示银行卡已删除,不过这次可以点击重新绑定,重新绑定时会报错“绑定的卡与原卡一致”,流程没法走完。但这时候再退回去却发现“银行卡已删除”的提示没有了。于是…

程序员面试金典 - 面试题 17.14. 最小K个数(快排划分O(n))

1. 题目 设计一个算法&#xff0c;找出数组中最小的k个数。以任意顺序返回这k个数均可。 示例&#xff1a; 输入&#xff1a; arr [1,3,5,7,2,4,6,8], k 4 输出&#xff1a; [1,2,3,4]提示&#xff1a; 0 < len(arr) < 100000 0 < k < min(100000, len(arr))来…