短文本主题建模
原标题:短文本主题建模
来源:AI研习社 链接:https://www.yanxishe.com/TextTranslation/2077
主题建模的目的是在文本语料库(例如邮件或新闻文章)中查找主题(或群集),而无需事先了解这些主题。这就是主题建模的真正威力,您不需要任何带标签或带注释的数据,只需原始文本即可从这个混乱的主题建模算法中,找到文本所涉及的主题!
在这篇文章中,我们将描述最流行的主题建模方法LDA背后的直觉和逻辑,并了解其在短文本上的局限性。鉴于这篇文章是关于短文本主题建模(STTM)的,我们将不涉及LDA的细节。愿意加深对LDA的了解的读者可以在这里和这里找到有关LDA的精彩文章和有用的资源。
然后,在第二部分中,我们将介绍STTM的新方法,最后在第三部分中介绍如何轻松地将其(拟合/预测✌️)应用于玩具数据集并评估其性能。
已经熟悉LDA和主题建模的读者可能想跳过第一部分,直接转到第二和第三部分,它们介绍了一种用于短文本主题建模及其Python编码的新方法。
I.隐狄利克雷分配模型
最受欢迎的主题建模算法是LDA(隐Dirichlet分配模型)。首先,让我们先解开这个令人印象深刻的名字,对它的作用有一个直觉的认识。
● 它是隐式的,因为主题是“隐藏的”。我们有一堆文本,我们希望算法将它们放入对我们有意义的聚类中。例如,如果我们的文本数据来自新闻内容,则通常发现的集群可能与中东政治,计算机,太空有关……但是我们还不知道。
● Dirichlet代表模型在生成文档——主题和单词——主题分布之前使用的Dirichlet分布。
● 它用于分配,因为我们想为文本分配主题。
下面的图1描述了LDA步骤如何明确表达以在文档集内找到主题。
“通过对这些主题的混合进行采样然后从该混合采样中抽取单词来生成文档”(LDA原始论文的Andrew Ng,David Blei和Michael Jordan)。
图1:使用Dirichlet分布的LDA文档生成过程。
注意:在上图1中,为了便于说明,我们在词汇表中设置了K = 3个主题和N = 8个词。为了便于说明,我们还将这些主题命名为“计算机,空间和中东政治”(而不是将它们称为主题1,主题2和主题3)。确实,我们的任务是了解找到的3个主题与它们的内容有关的计算机,空间和中东政治(我们将在第三部分STTM管道的主题归因中更深入地看到这一部分)。
简而言之,LDA通过使用Dirichlet分布作为先验知识来生成由主题组成的文档,然后对其进行更新,直到它们与基本事实相符。
II. 短文本主题建模(STTM)
尽管在中长文本(>50个词)上,尤其是邮件和新闻差不多是这种字数规模,取得很好的结果,但在Tweets,Reddit帖子或者StackOverflow标题等短文本上表现就不佳了。
图2:短文本和其主题
看看图2的短文本的例子,说明之前的假设——一篇文本是由多个主题混合而成——不再正确了。我们现在需要假设一篇短文本只有一个主题。
Gibbs采样的Dirichlet混合模型是一种改造的LDA算法,它假设一个主题对应于一篇文档,在STTM任务上表现出非常不错的结果。一篇文章里面的词是从同一主题分布中生成的,而不是像原始的LDA从多个主题中生成。
进入代码和实践之前,让我们从一个相同的叫电影爱好群的过程中去体会GSDMM,可以帮助我们理解STTM底层的不同的步骤和做法,以及怎么有效调整超参(LDA里的alpha beta)
想像一群学生待在餐馆里,随机坐在K张桌子边。被要求在纸上写下他们最喜欢的电影(但是要求必须是短列表)。目的是进行聚类,让相同的群有相同的电影爱好。为了达成目的,一个接一个,学生要根据两点规则选择一个新桌子:
● 规则一:选择人多的群。这条规则是保障了完整性,有相同电影爱好的人都在同一个群
● 规则二:选择有近似爱好的群。这条规则目的是提高同质性,同一群,爱好类似
重复这个过程,我们期望有些桌子可以撤走了,有些桌子可以坐更多的人,最终就有了电影爱好群。这简洁地说明了GSDMM算法做了什么!
III. STTM实施
在这一部分中,我们将使用来自Scikit-learn的20个新闻组数据集(用于文本主题建模)从一个具体示例构建完整的STTM管道。
首先,我们需要从Github下载STTM脚本到我们的项目文件夹中。
cd sttm_project
git clone https://github.com/rwalk/gsdmm.git
现在,我们可以开始实现STTM流程(这是我notebook的版本)。
# Useful libs
from sklearn.datasets import fetch_20newsgroups
import pickle
import pandas as pd
import numpy as np
# STTM lib from Github
from gsdmm import MovieGroupProcess
# Custom python scripts for preprocessing, prediction and
# visualization that I will define more in depth later
from preprocessing import tokenize
from topic_allocation import top_words, topic_attribution
from visualisation import plot_topic_notebook
# Load the 20NewsGroups dataset from sklearn
cats = ['talk.politics.mideast', 'comp.windows.x', 'sci.space']
newsgroups_train = fetch_20newsgroups(subset=’train’, categories=cats)
但是,在本练习中,我们将不会使用新闻的全部内容从新闻中推断主题,而仅考虑新闻的主题和第一句话(请参见下面的图3)。确实,对于短篇小说主题建模,我们需要短篇小说……显然
此外,为了便于说明,我们将仅查看3个主题(均匀分布在数据集中)。这些主题如下:
● 中东政治
● 太空
● Windows X
图3:有关该主题的新闻示例:WindowsX。我们将这两个突出显示的句子连接在一起,得到一个文档。
# Preprocessing and tokenization
tokenized_data = tokenize(df, form_reduction='stemming', predict=Fals
以下是我为此任务执行的预处理步骤:
● 使用spaCy分词器进行分词
● 删除停用词和1个字符词
● 词干(根据我的经验,我发现词干与词干比词干在短文本上有更好的聚类)
● 删除空文档和带有30多个标记的文档
● 删除唯一标记(术语频率= 1)
图4:我们根据文档中关键词数量匹配了对应的短文本,参考了这个文档
但是,必须记住,预处理取决于数据,如果使用其他数据集,则应考虑采用另一种预处理方法。
现在我们的数据已清理并处理为正确的输入格式,我们准备训练模型
# Train STTM model
# Init of the Gibbs Sampling Dirichlet Mixture Model algorithm
# K = number of potential topic (which we don't know a priori)
# alpha =
# beta =
# n_iters = number of iterations to
mgp = MovieGroupProcess(K=10, alpha=0.1, beta=0.1, n_iters=30)
vocab = set(x for doc in docs for x in doc)
n_terms = len(vocab)y = mgp.fit(docs, n_terms)
# Save model
with open(‘dumps/trained_models/v1.model’, “wb”) as f:
pickle.dump(mgp, f)
f.close()
让我们深入了解GSDMM模型
一THE END一
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com
热门资源
应用笔画宽度变换...
应用背景:是盲人辅助系统,城市环境中的机器导航...
GAN之根据文本描述...
一些比较好玩的任务也就应运而生,比如图像修复、...
端到端语音识别时...
从上世纪 50 年代诞生到 2012 年引入 DNN 后识别效...
人体姿态估计的过...
人体姿态估计是计算机视觉中一个很基础的问题。从...
谷歌发布TyDi QA语...
为了鼓励对多语言问答技术的研究,谷歌发布了 TyDi...
智能在线
400-630-6780
聆听.建议反馈
E-mail: support@tusaishared.com