网站关键词优化排名推荐入门seo技术教程
一、概述
LDA(Latent Dirichlet Allocation,隐含狄利克雷分布)是一种降维算法,适用于文本建模。一篇新闻文本可能会有一个诸如“体育”或“教育”等的主题,也可能有多个主题。使用LDA可以将文本中的单词作为输入,为其分配多个主题。
LDA是一种用于自然语言处理等的算法。该算法可以根据文本中的单词找出潜在的主题,并描述每个文本是由什么主题组成的,还可以用于说明一个文本不只有一个主题,而是有多个主题。 例如,一篇真实的新闻文本可能包含多个主题,如“体育”和“教育”等,使用LDA就可以很好地描述这种新闻文本。
为了便于理解,我们来思考几个具体的例子。对以下5个例句应用LDA,结果会是什么样 呢?假设这些例句中的主题数为2。
1. We go to school on weekdays.
2. I like playing sports.
3. They enjoyed playing sports in school.
4. Did she go there after school?
5. He read the sports columns yesterday.
我们可以将主题看作单词的概率分布。推测出的主题A和主题B的单词的概率分布如图所示,school是主题A的代表性单词,sports是主题B的代表性单词。此外,也可以推测文本中包含的主题的比例,从而以主题的概率分布(主题分布)描述各文本。如图所示,LDA可以利用主题分布和单词分布创建文本数据。
具体做法是基于文本的主题分布选择主题,之后基于主题的单词分布选择文本中的单词。重复这一操作,就能得到生成文本的模型。下面的“算法说明”部分将介绍如何根据输入数据计算主题分布和单词分布。
1. 基于文本的主题分布为单词分配主题。
2. 基于分配的主题的单词分布确定单词。
3. 对所有文本中包含的单词执行步骤1和步骤2的操作。
二、算法说明
LDA通过以下步骤计算主题分布和单词分布。
1. 为各文本的单词随机分配主题。
2. 基于为单词分配的主题,计算每个文本的主题概率。
3. 基于为单词分配的主题,计算每个主题的单词概率。
4. 计算步骤2和步骤 3中的概率的乘积,基于得到的概率,再次为各文本的单词分配主题。
5. 重复步骤2 ~ 步骤4的计算,直到收敛。
根据步骤4中计算得到的概率,为各文本的单词分配主题。由于步骤2中确定了文本的主题概率,所以在同一个文本内,某些主题被选中的可能性较大。另外,同一个文本中的单词往往被选为同一主题。通过重复这样的计算,文本分配到特定主题的概率就会增加。同时,由于与每个主题相关联的单词更容易被选中,所以单词作为代表主题的词的概率也会增加。
三、示例代码
下面使用scikit-learn实现基于LDA的主题模型的创建。我们使用一个名为20 Newsgroups的 数据集,这个数据集是20个主题的新闻组文本的集合,每个文本属于一个主题。
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
# 使用remove去除正文以外的信息
data = fetch_20newsgroups(remove=('headers', 'footers', 'quotes'))
max_features = 1000
# 将文本数据变换为向量
tf_vectorizer = CountVectorizer(max_features=max_features,
stop_words='english')
tf = tf_vectorizer.fit_transform(data.data)
n_topics = 20
model = LatentDirichletAllocation(n_components=n_topics)
model.fit(tf)
print(model.components_) # 各主题包含的单词的分布
print(model.transform(tf)) # 使用主题描述的文本
四、详细说明
使用主题描述文本
下面我们仔细看一下刚刚在“算法说明”部分训练的LDA的结果。下图按照概率从高到低的顺序列出了每个主题分布中的单词,由此我们可以知道哪些单词代表主题。
例如,主题16是关于体育的,主题18是关于计算机的……我们可以根据主题中包含的单词来解释主题。
另一些主题要么只包含数值,要么包含的都是一些不能表达主题的没有特指的单词,如下图所示。这些结果乍一看很难解释,下面通过停用词(为了提高精度而排除在外的单词)来对其进行改进。
接下来,我们来看一下文本的主题分布。下图所示为某文本的主题分布图。由于它包含了较多主题18的成分,可以断定这是关于计算机的文本。这个文本的实际主题是comp.sys.mac.hardware,是关于苹果公司的Mac的文本。
如果只用单词来描述文本的特征,就很难直观地理解,但通过LDA,我们就能够用主题来描述文本的特征。