百科问答小站 logo
百科问答小站 font logo



主题模型(topic model)到底还有没有用,该怎么用? 第1页

  

user avatar   gck1989421 网友的相关建议: 
      

主题模型当然有用咯,谁用谁知道!这次我来展示下它的9个“变种”(短文本、细粒度、加入先验知识、作者写作偏好、主题内涵随时间的变迁、融入词嵌入特性、语言模型加持、transformer系语境加持、图文混合主题聚合):

  • Biterm Topic Model
  • Multi-Grain Topic Model
  • Topic Modeling with Minimal Domain Knowledge
  • Author-Topic Model
  • Dynamic Topic Models
  • Embedded Topic Model /LDA2VEC
  • Topically-Driven-Language-Model
  • BERTopic
  • Image-Text Mix Topic Model

(1)短文本主题建模的利器 ---Biterm Topic Model

从原理上说,BTM是一个非常适合于短文本的topic model,同时,作者说它在长文本上表现也不逊色于LDA。
BTM模型首先抽取biterm词对。抽取的方法是:去掉低频和stopword;对于短文本(如tweets或百度知道等),取一个doc中的任意两个词对 ;对于长文本,需要两个词在一定的距离之内,这个窗长一般取到30~60效果较好.然后通过biterm对文档集合进行建模.

LDA的问题是稀疏性。LDA中每个文档对应一个theta,每个词对应一个z。对于短文本,由于词少,z-->theta这一步的统计可能不具备统计意义。因为每个文本单独对应于theta,所以增加文本数量不能克服这种短文本带来的缺陷。

传统的解决之道有两个。1.是将多个短文本聚合成一个长文本。比如LDA-U将一个user的多个发言聚合在一起减少稀疏影响。但这种做法与应用相关,需要有外部信息来辅助找到聚合的单位。2.是利用一个长文档文本集作为辅助数据,将长文本的一些信息先以某种形式抽取反应到先验中,从而间接地提供给短文本。看似很美好,问题在于,与transfer learning类似,这个知识能不能传还两说,得先找到一个总体主题分布类似的长文档集。

总体来说,LDA并不适用于短文本,LDA-U略好,但是基于user的聚合受限于应用和领域知识。

mixture of unigram在这里表现比LDA系列更好,原因是它对于所有文档用同一个theta,克服了短文本稀疏性问题。这个模型的问题是,它假设了整个文档对应于一个z,这比较粗糙和strong了,会导致一个topic类内距离很大,因为对于长文本,较远的段落之间可能语义差异很大了。在长文本以及K较大的时候,这个模型效果会比较差,但在短文本上,这个缺陷倒是不那么明显,因此效果好于LDA系列

最后是BTM模型。可以认为BTM综合了上述二者的优点。BTM跟mix一样,利用了整个文本集合来估计一个theta,解决了稀疏问题(我们通常有海量数据)。放宽了mix中对整个doc必须同属于一个z的约束(相当于从整doc放松到了窗口长度类的两个词),加强了LDA中每个词对应于一个Z的假设(BTM中约束了窗长内的两个词组成一个biterm对应于一个z)。这个假设很接近于人类认知,因为我们知道,通常在较短的一段文本内,topic变化不大。

说一句题外话,前几天听了一个知识图谱的讲座。他们也是用一个共现词对来排歧作为LDA的补充。比如 李娜+青藏高原 这个词对,可以很大程度上将李娜和其他人(比如另一个做音乐的李娜,无法被LDA所区分)区分开来。unigram是一个极端,一大堆词是另一个极端了。BTM相当于是这种思路在TM系列模型中的一个探索。从另一个角度,2gram或许也可以替换term作为LDA的单元,而BTM的尝试是将连续的2gram放开,允许中间有一个窗长。总的来说,这是一个相当有意思的思路,而且非常nature。

原文:blog.csdn.net/windows2/

(2)多主题文本建模的利器 --- Multi-Grain Topic Model

考虑这样一个应用场景,有关于联想、戴尔、苹果三台笔记本电脑的若干评论数据,Multi-Grain Topic Model(细粒度的主题模型)基于全局和局部信息,既发现了宏观上的大主题,比如评论对应的品牌 --- 联想、戴尔、苹果;微观上的小主题,苹果电脑对应的性能话题、联想电脑对应的性价比话题等,二者相互补充,比LDA返回的信息量要大很多。

(3)掺入少许先验知识的主题模型---Topic Modeling with Minimal Domain Knowledge

Topic Modeling with Minimal Domain Knowledge(加入少许先验知识的主题模型)通过关联解释(Correlation Explanation )进行主题建模会产生丰富的主题,这些主题可以最大限度地提供一组文本数据的信息。这种方法优化了稀疏二进制数据(Sparse Binary Data)的Correlation Explanation框架,允许对大型语料库进行主题建模。此外,该方法支持分层主题建模(Hierarchical Topic Modeling),提供一种整合领域知识的机制(Integrating Domain Knowledge) ---通过锚定词汇(Anchor Words)和信息瓶颈(The Information Bottleneck)来实现。这种半监督的锚定(Semi-Supervised Anchoring)是灵活的,允许用户提升进主题表示的效果 --- 通过添加指定主题的锚定词汇来得到解释性较高的主题。

与LDA(隐狄利克雷模型)不同,CorEx主题模型及其分层和半监督扩展不会对文档的生成方式做出任何假设。但是,它们仍然可以在各种指标中找到具有一致性和有意义的主题。一篇TACL论文对LDA的无监督和半监督变体进行了详细比较:

Gallagher,Ryan J.,Kyle Reing,David Kale和Greg Ver Steeg,《Anchored Correlation Explanation: Topic Modeling with Minimal Domain Knowledge》 ,2017

此项目可用于任何稀疏且二进制的数据集(Any Sparse Binary Dataset)。原则上,0 ~ 1范围内的连续值也可以用作输入,但是其效果未得到很好的测试。

以下以50,000条汽车评论数据为例,展示该模型的核心代码和结果:

       #词汇表 words = list(np.asarray(text_pred.get_feature_names()))  #加入锚定词汇,分别是汽车油耗、外观、噪音和空间这四个先验主题关键词列表 anchor_words = [['油耗','省油'],  ['外观','外形','颜值','线条','前脸','时尚','造型','流畅'], ['噪音','胎噪','噪音控制','隔音'], ['空间','座位','拥挤']]    # 训练带入先验知识的主题模型 topic_model = tp.Coret(                         n_hidden=20 ,                         max_iter=100000,                         verbose=0,                         count='fraction',                         seed=2019                                              )       topic_model.fit(X_pro , #输入为稀疏词汇表示    words=words,    anchors = anchor_words,  anchor_strength=10  #锚定强度,数值越大,主题模型训练的结果受锚定词汇的影响就越大  )     

从训练好的主题模型中看看某类结果:

       topic_model.get_topics(topic=1, n_words=50)     

[('外观', 0.4301756671083077),
('颜值', 0.10011823545089653),
('外形', 0.06618560083637216),
('时尚', 0.054193038069410004),
('前脸', 0.04076140897169324),
('线条', 0.03466495921583512),
('造型', 0.03414006949798674),
('外观设计', 0.01699050254486039),
('流畅', 0.015337625168866267),
('动感', 0.013126344098356961),
('运动感', 0.009363907127811736),
('审美', 0.008732302601110832),
('流线型', 0.006803817188302315),
('流线', 0.005895597474292352),
('修长', 0.005593062618077139),
('大气', 0.0429432014991769),
('漂亮', 0.02758077948725461),
('好看', 0.026179714467314867),
('霸气', 0.019231105222624518),
('车身', 0.011562041254648874),
('帅气', 0.010466043602329844),
('年轻', 0.009713247431314121),
('耐看', 0.005438103102823669),
('侧面', 0.005305290826161348),
('硬朗', 0.0038887516195419613),
('优美', 0.0029589904380173705),
('拉风', 0.002908911717486192),
('担当', 0.0023775974040011207),
('年轻化', 0.0018363016664206797),
('前卫', 0.001832502305643267),
('颜控', 0.0015342721148661927),
('美观', 0.0014017725126286868),
('外貌协会', 0.0012673785507941234),
('始于', 0.0012147432527814328),
('最喜欢的', 0.0010902856328509434),
('大嘴', 0.0010611885609235778),
('非常时尚', 0.0009028912355990731),
('时尚运动', 0.0008869927507607518),
('霸气十足', 0.0008189071364794647),
('霸气侧漏', 0.0008159337276194864),
('我很喜欢', 0.0007621695922389888),
('高大', 0.0007571559888997631),
('征服', 0.0007147440291617015),
('很喜欢', 0.0006925125995887599),
('运动时尚', 0.0006689225076177874),
('耐看型', 0.0005580945500139648),
('正义', 0.0005483286604124153),
('威武霸气', 0.0005316584992590537),
('改款', 0.0005285499612510017),
('小巧', 0.0005192749777102133)]

再看看整体的效果:

       topics = topic_model.get_topics(n_words=30)   for topic_n,topic in enumerate(topics):     words,mis = zip(*topic)     topic_str = str(topic_n)+': '+','.join(words)     print(topic_str)     

0: 油耗,省油,平均,市区,百公里,综合,经济,上下班,磨合期,接受,油价,一公里,堵车,百公里油耗,惊喜,省钱,最低,节省,油钱,毛钱,费油,七个,油表,拥堵,国道,下降,成本,想象,郊区,预期
1: 外观,颜值,外形,时尚,前脸,线条,造型,外观设计,流畅,动感,运动感,审美,流线型,流线,修长,大气,漂亮,好看,霸气,车身,帅气,年轻,耐看,侧面,硬朗,优美,拉风,担当,年轻化,前卫
2: 隔音,噪音,胎噪,噪音控制,效果,听不到,风噪,安静,降噪,关上,很安静,听不见,隔绝,两个世界,外界,窗户,杂音,车外,静谧,nvh,车隔音,隔音棉,抑制,什么声音,密封,噪声,开窗,超棒,地步,静音性
3: 空间,拥挤,座位,后排,宽敞,后备箱,乘坐,内部,储物,车内,前排,腿部,身高,超大,头部,够用,轴距,二郎腿,充足,利用率,压抑,宽松,宽裕,三个人,个子,充裕,成年人,拉货,前后排,绰绰有余
4: 代步,问题,生活,用车,容易,天气,工具,平常,不好,享受,下雨,下班,车里,车真,过车,gl8,回老家,跑跑,外面,不多,放松,上车,没出,毛病,起码,没事,下车,开开,外出,第二天
5: 满意,车子,喜欢,车最,适合,家用,就是他,部分,类型,面子,和动力,家庭,莫过于,最最,探界者,需求,我喜欢的,三点,卡罗拉,说到,对我来说,说到最,喜欢的,商务,无非,普拉多,女生,霸道,女孩子,比较适合
6: 座椅,舒服,音响,放倒,调节,舒适,包裹,皮质,bose,视野,包裹性,开阔,地板,真皮,音质,位置,中央,舒适度,音乐,柔软,坐上,玻璃,长途,腰部,纯平,支撑,一键,主驾驶,坐姿,扶手
7: 吸引,符合,颜色,红色,年轻人,白色,第一眼,回头率,魂动,气质,犀利,黑色,深深,个性,不失,低调,外表,张扬,稳重,车漆,骚气,优雅,眼看,眼球,看脸,美式,轿跑,大街,口味,独特
8: 非常,不错,同级,优势,启辰,无论是,d60,空间表现,总体,优点,别车,一体,水平,感觉特别,真心,配合,均匀,体现,整个车,稍微,值得一提的,提升,空间感觉,人马,发挥,程度,实用性,缺点,车做,组合
9: 价格,性价比,价位,优惠,车型,品牌,级别,合资,便宜,实惠,合资车,国产车,预算,国产,同等,力度,合适,大众,迈锐宝,中华,看过,销售,十万,落地,划算,哈弗,值得,裸车,车中,亲民
10: 动力,发动机,超车,加速,变速箱,油门,强劲,起步,提速,推背感,涡轮,平顺,充沛,换挡,速度,给油,增压,高速,输出,随叫随到,排量,很快,声音,一脚,顿挫感,舍得,马力,自然吸气,顿挫,自吸
11: led,格栅,进气,大灯,晚上,尾灯,日间行车灯,车灯,镀铬,日行灯,炯炯有神,前大灯,转向灯,远近,亮度,灯光,视觉,眼睛,车顶,流水,有神,大眼睛,装饰,协调,点亮,夜间,光源,眼大,白天,冲击力
12: 操控,底盘,驾驶,精准,转向,扎实,灵活,转弯,轻松,行驶,性能,方向,上手,操控性,乐趣,指向,路面,调教,悬挂,通过性,颠簸,轻盈,平稳,过程,地盘,虚位,体验,调校,路况,弯道
13: 功能,配置,自动,巡航,实用,倒车影像,钥匙,全景,后视镜,电动,导航,胎压监测,天窗,空调,一键启动,大屏,影像,齐全,中控,自适应,加热,启动,雷达,启停,定速,倒车,定速巡航,多功能,手机,语音
14: 内饰,设计,做工,风格,用料,精致,整体,豪华,车头,上档次,十足,简洁,科技感,大方,腰线,给人,高端,饱满,中控台,尾部,搭配,车尾,档次,简约,细节,整车,轮毂,气息,充满,圆润
15: 马自达,阿特兹,宝马,创驰蓝天,蓝天,凯美瑞,新款,老款,跑车,奥迪,奔驰,凯迪拉克,君威,有点,昂克赛拉,传统,完美,全新,日系车,cx5,东瀛,形容,雅阁,设计师,设计理念,惊艳,改变,钢丝,称号,打动
16: 朋友,选择,时间,suv,试驾,当初,提车,选车,老婆,一眼,回家,家里,cx4,一段,身边,看中,轿车,大家,推荐,网上,同事,打算,差不多,纠结,相中,媳妇,看上,上班,好多,印象
17: 孩子,一家人,出行,自驾游,接送,小孩,出门,家人,周末,出去玩,老人,出游,游玩,全家,行李,旅行,大人,旅游,出去旅游,睡觉,安全座椅,物品,宝宝,排空,行李箱,休息,家里人,购物,排放,搬家
18: #NUMBER,公里,担心,不用,显示,抬头,开车,以内,时速,宝骏,体重,来回,双离合,手自一体,小时,实际,爱信,加油,保持,里程,数据,一千,全程,一万,车速,正常,死角,老家,一趟,自动挡
19: 系统,方向盘,斑马,手感,仪表盘,液晶,安全性,操作,保养,电子,新手,质量,刹车,保障,放心,材料,省心,清晰,行车,按键,仪表,费用,保证,后期,耐用,助力,品质,软质,碰撞,材质

(4)揭示不同作者写作主题分布的主题模型 --- Author-Topic Model

ATM模型(author-topic model)也是“概率主题模型”家族的一员,是LDA主题模型(Latent Dirichlet Allocation )的拓展,它能对某个语料库中作者的写作主题进行分析,找出某个作家的写作主题倾向,以及找到具有同样写作倾向的作家,它是一种新颖的主题探索方式。

笔者之前分析过“人人都是产品经理”上作家的写作主题,分析某些牛X作家喜欢写哪方面的文章(比如“产品运营”、“数据分析”、“新媒体运营”等)写作了啥,主题相似度的作者有哪些。

首先,先从文本中“析出”若干主题,经过探索,10个主题的区分度正好。根据各个主题下的主题词特征,笔者将这10个主题归纳为 :“行业动态”、“电商运营”、“商业模式”、“产品运营”、“社交媒体”、“互金产品”、“数据运营”、“用户研究”、“产品设计”和“新媒体运营”。

同时,在数据处理的过程中,模型建立了作者(author)、主题(topic)及文档(document)之间的映射关联关系,以dict的形式保存数据。

(5)分析话题热点变迁的主题模型 --- Dynamic Topic Models

蕴含时间因素的主题,尽管它包含的关键词会随着时间的变化而产生相应的变化,但它如构成要素不断更新换代的“忒修斯之船(The Ship of Theseus)”一般,即使同一主题下的开端和末尾中的主题词没有一个是相同的,但还是原先的主题,保留有相同的语境。(By having a time-base delement to topics, context is preserved while key-words may change.)

针对某个话题随时间的变迁情况(This implements topics that change over time)。鄙喵运用的模型是DTM模型 (Dynamic Topic Models ),它是“概率主题模型”家族的一员,用于对语料库中主题演变进行建模。

还是针对人人都是产品经理上的文章数据,先从“产品运营&数据分析”中“解析”出如下6个子话题,它们是“运营”、“商业模式”、“流量运营&数据分析”、“品牌营销&数据分析”、“电商运营”和“内容运营”,如下表所示:

针对Topic2,也就是“流量运营&数据分析”在2012.05~2017.07间的话题变迁情况感兴趣,于是将这6年间出现的主题词重新整合,制成下面的热力图:

上图中纵轴是主题词,横轴是年份,颜色由浅入深代表数值的由小到大。从中可以明显的看出,“流量运营&数据分析”子话题下的“数据”、“数据分析”、“运营”和“业务”在该话题中始终处于“核心地位”,保持较高且稳定的word_prob值。而“渠道”、“游戏”、“互金”在近3年的word_prob值有了较大的提升,说明社区的作者在近期比较关注这3个主题词所代表的领域,间接表明它们在互联网中的话题热度呈现上升趋势。

(6)与词嵌入融合的主题模型 --- Embedded Topic Model

主题模型的主要功能之一就在于分析大量文档以学习其中有意义的词汇模式和语义内涵。 但现有的主题模型都存在一个问题 --- 在处理巨量且存在许多长尾词、低频词的情况下,现有的很多主题模型都无法学习到具有可解释性、便于人们理解的主题。 为此,嵌入式主题模型(ETM,Embedded Topic Model )应运而生,这是一种将传统主题模型与词嵌入(Word Embeddings)“嫁接”在一起的文档生成模型。 特别地,它使用分类分布(Categorical Distribution)对每个词汇进行建模,其自然参数是词嵌入及其嵌入的指定主题(Assigned Topic)之间的内积。


由此,即使是在用于海量词汇表且存在稀有词、长尾词的情况下,ETM仍然能发现可解释的主题。 在相关作者的论文中,发明者还表示它在主题质量和预测性能方面优于现有的主题模型,例如LDA。

(7)理解自然语言的利器---LDA2VEC

lda2vec模型试图将word2vec和LDA中的最佳部分混合到一个框架中。 word2vec在捕捉词汇之间的词法关系方面能力很强,但是生成的向量在很大程度上无法解释,并且很难表征文档。 而另一方面,LDA可以被很好地被理解,但是不能像word2vec这样对本局部词汇关系进行建模。 此时LDA2VEC应运而生,该模型可以构建词汇和文档主题,使其可解释。

与LDA相比,lda2vec还包含更多的上下文语境和语义特征。 LDA表明词汇是由文档向量所生成的; 但是文本数据中可能会有各种影响主题的“边信息”。 例如,某个客户在某个特定时间、某个特定区域中写了关于某个特定item ID的评论。 在这种情况下,lda2vec会提供所有的item(例如,从衬衫中分离牛仔裤),时间(冬季与夏季),地区(沙漠与沿海)和客户(运动与职业装)的主题。

(8)Topically-Driven-Language-Model

本文作者Jey Han Lau, Timothy Baldwin and Trevor Cohn (2017))创造性的将LDA主题模型和语言模型融合在了一起,可以通过语言模型生成的语句来解释主题,将其中的语言模型换成时下流行且强大的GPT2,并结合PPLM(Plug and Play Language Models: a Simple Approach to Controlled Text Generation)绝对是大杀器,但是速度贼慢。。。。

感兴趣的可以去读原文《Topically Driven Neural Language Model

下面是关于新冠肺炎疫情的若干新闻的模型分析结果片段:

Epoch =12001 TRAIN 77864/77864: tm ppl = 46573.947; lm ppl = 507.707; word/sec = 9449.5 VALID 77864/77864: tm ppl = 40674.441; lm ppl = 350.481; word/sec = 16706.0 Topics ====== Topic 0 [ 10.51 ] : [培训_机构, 上课, 课程, 家长, 培训行业, 授课, 高三, 寒暑假, 招生, 教育培训, 教培, 开课, 退费, 转线, 留学, 面试, 教师, 辅导机构, 课时费, 推迟_开学]

Topic 1 [ 8.38 ] :[婚礼, 婚庆, 摄影师, 摄影, 下岗, 物料, 新人, 工作室, 拍摄, 行业_从业者, 布置, 取消_婚礼, 摄像, 主持人, 婚礼_延期, 婚礼_取消, 婚纱, 婚期, 改期, 道具]

Topic 2 [ 7.81 ] : [gdp, 第三产业, 亿元, 一季度, 增速, 第二产业, 百分点, gdp_增速, 中国_gdp, 增长率, 万亿元, 同比, 第一产业, 经济_增速, 高于, gdp_增长, 一季度]

Topic 3 [ 10.70 ] :[超级传播者, 广东, 扩散, 超级, 预防, 传染性, 耽误, 传人, 症状, 发病, 病毒传播, 宿主, 证据, 不幸, 社交, 毒王, 已有, 院士, 传染给, 传播者, 轻微, 定义]

Topic 4 [ 10.75 ] : [世界卫生组织, 公共, 后果, who, 观察, 列为_疫区, 证明, 大国, 认定, 警惕, 事后, 列入, 人群_密集, 交通工具, 突发事件, 视为_疫区, 负面, 各国, 定性]

Topic 5 [ 6.87 ] : [草莓, 一斤, 农民, 大棚, 果农, 成熟, 夏天, 路边, 产地, 草莓_大棚, 请假, 丹东, 柿子, 草莓_价格, 辽宁, 能卖, 季节, 地里, 辛辛苦苦, 忙活, 大棚_草莓]

Topic 6 [ 10.56 ] : [票房, 春节_票房, 大年初一_票房, 影片, 收获, 撤档, 唐探, 电影票, 姜子牙, 暑期, 夺冠, 熊出没, 粉丝, 热门, 观众, 退出, 老实, 囧妈, 院线, 系列, 徐峥]

Topic 7 [ 10.26 ] : [战争, 香港, 恢复正常, 到来, 提醒, 病情, 蔓延, 教育局, 态势, 终止, 教育部, 预案, 各项, 社会秩序, 一律, 课外辅导, 认知, 中东, 机构_停课, 摧毁_房价]

Topic 8 [ 8.71 ] : [高考, 大学, 教育_行业, 注定, 分数线, 毕业, 高校, 就业, 春季, 考研, 考试, 春招, 毕业生, 合适, 延迟_开学, 应届, 秋招, 应届生, 考生, 复试, 申请, 难度]

...

Random Generated Sentences ========================== Temperature = 1.2

Topic 8 : 新冠肺疫情逐步好转,许多省份提出将优先安排初3高三返校

Topic 4 : WHO:无证据显示病毒会在夏季消失,欧洲疫情扩散

Topic 3 : 国际在线,外媒分析:病毒“超级传播者”对疫情影响为何如此重大?

Topic 6 : 多国家纷纷叫停电影,海外疫情影响不容乐观

Topic 7 :

....

(9)BERTopic

近期,经常有小伙伴会在知乎后台或者直接通过微信向我咨询以下问题:

  • 如何对大量的短文本数据进行高效建模?
  • 在LDA建模时,如何确定主题数?
  • 主题模型得到的结果解释性程度不高、看不懂咋办?
  • 主题模型对上下文语境捕捉能力不足咋办?

在没有任何类别或标签的情况下,利用无监督技术来提取文档主题是一个自然而然的想法,虽然LDA和NMF等主题模型已经被广泛采用,而且在大多时候效果还不错(主要是长文本),但是,笔者总觉得通过超参数调优来发掘有意义的话题需要花费相当大的精力,而且很多时候吃力不讨好---出来的结果奇差无比,上面的几个问题也印证了这一点。鉴于此,笔者想结合时下SOA的BERT---因为它在近两年的各种NLP任务中表现优异,而且使用预训练模型不需要有标注的数据,更重要的是BERT可以产生出高质量的、带有上下文语境信息的词嵌入和句嵌入。

BERTopic是一种话题建模技术,它利用BERT嵌入和c-TF-IDF来创建密集的集群,使话题易于解释,同时在话题描述中保留重要词汇。其核心步骤主要是做三件事:

  • 用基于BERT的Sentence Transformers提取语句嵌入
  • 通过UMAP和HDBSCAN,将文档嵌入进行聚类,语义相近的语句将聚集成簇群
  • 用c-TF-IDF提取主题词

另外,如果你不想在整个文档上应用主题建模,而是想在段落层面上应用,笔者则建议您在创建语句嵌入之前将数据进行一定程度的拆分。最后,笔者想说的是,决定聚类效果好坏的关键因素在于Sentence Transformers提取语句嵌入这一环节,要想达到较好的效果,需要自行针对任务训练预训练模型,这是另一个大的话题,笔者有过这样的实践,后续可以单独写一篇文章来说明。

       Most 20 Important words in TOPIC 0 :  [('马儿', 0.24457507362737524),  ('马儿跑', 0.2084888573356569),  ('不吃', 0.09709590737397493),  ('油耗', 0.06709136386307156),  ('目前', 0.059650379616285276),  ('不让', 0.05319169690659243),  ('想要', 0.04764441180247841),  ('左右', 0.046580524081679016),  ('跑得快', 0.045400507911056986),  ('哪有', 0.044559365280351336),  ('公里', 0.041230968367632854),  ('高速', 0.039234425817170064),  ('行驶', 0.03890482349013843),  ('10', 0.037022144019066686),  ('个油', 0.03682216481709768),  ('动力', 0.03616975159734934),  ('正常', 0.03520558703001095),  ('市区', 0.034599821025087185),  ('毕竟', 0.03458202416009574),  ('道理', 0.031503940772350914)] '************************************************************' Most 20 Important words in TOPIC 1 :  [('油耗', 0.09524385306084004),  ('高速', 0.05653143388720487),  ('左右', 0.05463694726066372),  ('市区', 0.04736812727722961),  ('公里', 0.04426042823825784),  ('个油', 0.0437019462752025),  ('10', 0.04124126267133629),  ('目前', 0.04106957747526032),  ('接受', 0.03392843290427474),  ('11', 0.03258066460138708),  ('平均', 0.03254166004110595),  ('百公里', 0.026974405367215754),  ('12', 0.02667734417832382),  ('现在', 0.026547861579869568),  ('省油', 0.024521146178990254),  ('比较', 0.023967370074638887),  ('行驶', 0.02337617146923143),  ('平时', 0.02231213384456322),  ('开车', 0.02225259142975045),  ('磨合期', 0.019891589132560176)] '************************************************************' Most 20 Important words in TOPIC 2 :  [('老虎', 0.1972807028214997),  ('油耗', 0.08030819950496665),  ('美系车', 0.051452721555236586),  ('现在', 0.04511691339526969),  ('10', 0.04164581302410513),  ('个油', 0.041420858563077104),  ('美国', 0.04121728175026878),  ('左右', 0.03493195487672415),  ('平均', 0.03288881578728298),  ('目前', 0.029076698183196633),  ('12', 0.028824764053369055),  ('高速', 0.028687350320703176),  ('11', 0.0263147428710808),  ('基本', 0.025791405022289656),  ('百公里', 0.025566436389413978),  ('驾驶', 0.02511085197343242),  ('郊区', 0.023879719505057788),  ('多公里', 0.023290821021098026),  ('习惯', 0.023170932368572476),  ('朋友', 0.022668297504425915)] '************************************************************' Most 20 Important words in TOPIC 3 :  [('油耗', 0.09774756730680972),  ('凯迪拉克', 0.08150929317053307),  ('左右', 0.03704063760365755),  ('个油', 0.03393914525278086),  ('节油', 0.033147790968701116),  ('目前', 0.029322670672030947),  ('耗油', 0.028607158460688595),  ('市区', 0.028138942560105483),  ('11', 0.027057690984927343),  ('接受', 0.027035026157737122),  ('毕竟', 0.025713800165879153),  ('现在', 0.025636969123009515),  ('美系车', 0.025507957831906663),  ('平均', 0.02536302802175033),  ('之前', 0.024645241362404695),  ('动力', 0.023532574041308225),  ('比较', 0.02351138127209341),  ('降低', 0.021912206107234797),  ('正常', 0.02137825605852441),  ('可能', 0.02017083805610775)] '************************************************************'     

...

       Most 20 Important words in TOPIC 31 :  [('满意', 0.4749794864152499),  ('地方', 0.3926757136985932),  ('没有', 0.21437689162047083),  ('发现', 0.17910831839903818),  ('目前', 0.11420499815982257),  ('暂时', 0.09540746799339411),  ('挖掘', 0.08502606632538356),  ('不好', 0.06606868576085345),  ('满满', 0.06546918040522966),  ('挑剔', 0.06351786367717983),  ('后续', 0.05924768082325757),  ('其实', 0.05517858296374464),  ('没什么', 0.0467681518553301),  ('真的', 0.04629681210390699),  ('癫得', 0.04599618482379703),  ('我太多', 0.04599618482379703),  ('定为', 0.04599618482379703),  ('3w', 0.04599618482379703),  ('能吐槽', 0.04599618482379703),  ('相对', 0.045510230820616476)] '************************************************************' Most 20 Important words in TOPIC 32 :  [('外观', 0.19202697740762065),  ('喜欢', 0.09742663275691509),  ('好看', 0.06539925997592003),  ('吸引', 0.051963718413741596),  ('时尚', 0.04628469650846298),  ('大气', 0.045441921472445655),  ('个性', 0.0447603686071089),  ('个人', 0.03601467530065024),  ('反正', 0.03586746904278288),  ('霸气', 0.03438681357345092),  ('不用', 0.03315500048740606),  ('漂亮', 0.03302680521368137),  ('外观设计', 0.032328941456855734),  ('非常', 0.032326600304463396),  ('外形', 0.03215438082478295),  ('觉得', 0.03126961228563091),  ('不错', 0.029505153223353325),  ('看起来', 0.02949619921569243),  ('顺眼', 0.026753843592622728),  ('帅气', 0.026252936525869065)] '************************************************************'     

(10)Image-Text Mix Topic Model

之前和近段时间,在做售前直接面向客户的时候,有些客户会问到,你们文本处理很在行,但文本只是网络大数据的一部分,图片(包括视频)在网络上的比重越来越高,能否和文本一并做分析呢?比如打标签(图文采用的标签是一套体系)、做热门话题发现(图文混合),以及图文混合检索(以图搜文、以文搜图等)。很明显,这是一个多模态数据分析问题。

针对这个图文数据分析的问题,笔者近期做了一定的探索,现分享一下成果~一言以蔽之,要想实现上述需求,只需将把图像和文本都放入一个新的语义空间(Latent Semantic Space),这样文本和图像数据在不断训练的过程中就能“对齐”,然后使用对比学习的方法学习到图文之间的语义关联性,即分别对图像和文本编码(文本是一整句话而不是标签,比如“一群小孩在滑滑梯上玩耍”),然后两两计算cosine相似度,再针对每个图片的一行或文本的一列进行分类,找出匹配的正例。原理如下图所示:

纯理论的笔者就不展开了,详细的可以参看原汁原味的blog(openai.com/blog/clip/)或者论文(arxiv.org/abs/2103.0002)。笔者发现,现在外网开源的只有针对英文或其他西文的模型,中文的还没有。基于此,笔者搜罗了近200万图文数据对,但笔者的数据量和计算资源极其匮乏,所以就想到利用LiT-tuning训练一个clip范式的模型:

LiT-tuning最近提出了一种图文微调范式 LiT-tuning(Locked-image Text tuning),该范式表明权重固定的图像编码器和可学习的文本编码器在 VLP模型中效果最好。他们在对比学习设置中也采用了同样的方式,即只更新文本编码器的权重,而不更新图像编码器的权重。

具体而言,LiT-tuning方法旨在教一个中文的文本编码器从一个现有的图像编码器中读取合适的表示,该图像编码器是在英文数据集上预训练过。还为每个编码器添加了一个可选的可学习线性变换层,它将两种模式的表示映射到相同的维度。LiT-tuning 之所以效果很好,是因为它解耦了用于学习图像特征和视觉语言对齐的数据源和技术。并且,图像描述器事先使用相对干净或(半)手动标注的图像进行了良好的预训练。

将这一想法扩展到多语言数据源,并尝试将在英文数据源上预训练的固定了的图像编码器和可训练的中文文本编码器对齐。此外,LiT-tuning 方法显著加快了训练过程并减少了内存需求,因为它不需要为视觉编码器计算梯度。

笔者在colab上陆陆续续(colab上对长时间使用有限制,搞不好什么时候断掉了...)训练了近3 epoch,现展示下效果~

测试一:图文匹配

笔者构造了20+关于草地、草坪、草原的描述,以及6个相关的图片,旨在测试模型对场景和描述更为细微的语义差异捕捉能力。

图文主题混合发掘

笔者基于Unsplash 25K开源数据集(25000+张高质量摄影图片),再加上朱自清的散文集,对二者进行图文主题混合发掘/聚类。

基于模型自动识别,排除噪音类别外,一共是252个主题。

图文混合主题会将语义/话题接近的图文自动聚合在一起:可以以文搜图:

上述内容在鄙喵的公众号上有更为完整的展示,可以感兴趣的可以搜索Social Listening与文本挖掘详细查看。

PS:主题模型就是一把大杀器,用的好不好全看个人,跟它自身没啥关系~

我之前写的几篇文章,上面的部分示例出自这里:

【CODE】LDA2vec : 当LDA遇上word2vec

以上。




  

相关话题

  人工智能的意义和价值是什么? 
  单bert可以用来做文本相似度计算任务吗? 
  如何正确理解小概率事件,以及概率和哲学的关系? 
  刷leetcode使用python还是c++? 
  请问人工神经网络中的activation function的作用具体是什么?为什么ReLu要好过于tanh和sigmoid function? 
  NLP文本匹配问题的本质是不是 对于要预测的句子,遍历候选句子 从训练数据集里寻找最相似的pair? 
  国内目前的量化交易是否很少涉及到机器学习? 
  微软小冰测颜值是否比较准?为什么? 
  Transformer是如何处理可变长度数据的? 
  机器学习相关岗位面试中,有哪些加(zhuang)分(bi)项? 

前一个讨论
评价男人的老实与夸赞女人的贤惠都是一个意思吗?
下一个讨论
如何把梯度传递过Argmax?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利