龙空技术网

简洁详尽讲解文本聚类

AI火箭营 136

前言:

今天朋友们对“用层次聚类算法进行词语聚类”大致比较关心,我们都需要了解一些“用层次聚类算法进行词语聚类”的相关知识。那么小编在网上搜集了一些对于“用层次聚类算法进行词语聚类””的相关资讯,希望看官们能喜欢,咱们快快来学习一下吧!

用于单词和文档的聚类的大量方法不胜枚举,让我们仔细研究其中几种。

本文涵盖的主题包括k均值、布朗聚类、tf-idf聚类、主题模型和潜在的Dirichlet分布(也称为LDA)。

聚簇是数据科学中最大的主题之一,其规模如此之大,以至于你很容易会发现有大量书籍正探讨它的每一个细节。文本聚类的子主题也不例外。因此,虽然本文无法提供详尽的概述,但是本文涵盖了它的主要方面。话虽如此,让我们从共识开始,什么是聚簇,什么不是聚簇。

实际上,聚簇不过是包含相似对象的组。聚类是用于将对象分为这些组的过程。

聚簇内部的对象应尽可能相似。不同聚簇中的对象应尽可能不同。但是谁定义“相似”的含义呢?我们将稍后再讲。

现在,你可能已经听说过分类。在对对象进行分类时,还可以将它们分为不同的组,但是它和聚簇相比有一些重要的区别。分类是指根据具有组际隶属关系的已知对象,将之前未曾见过的新对象放入组中,新对象也就是所谓的训练数据。这意味着我们可以有可靠的东西与新对象进行比较。但进行聚类时,我们是从一块空白画布开始:所有对象都是新对象!因此,我们将分类称为一种监督方法,而聚类则是一种无监督的方法。

这也意味着用于分类的正确数目的组是已知的,而在聚类中则没有这样的数目。请注意,它不仅未知且根本不存在,我们要根据自己的目的选择合适数量的聚簇。很多时候,这意味着尝试后选择效果最好的一种。

聚类的种类

在深入研究具体的聚类算法之前,让我们首先建立一些描述和区分它们的方法。以下几种方法可以实现:

在硬集群中,每个对象都完全属于一个聚簇。在软集群中,一个对象可以属于一个或多个聚簇。成员资格可以是部分的,也就是说比某些聚簇,对象属于另一些聚簇的可能性高。在分层集群中,集群以分层方式迭代组合,最终以一个根聚簇结束。你还可以将层次结构聚类视为二叉树。所有不遵循该原理的聚类方法都可以简单地描述为扁平聚类,但有时也称为非分层或非聚类方法。你通常可以通过在你选择的级别上水平“切割”树来将分层聚类转换为平坦聚类。

分层聚类的树形图称为树状图。连接在较低层级上的对象比连接在树上较高层的对象更相似。

分层方法可以进一步分为两个子类别。

聚集(“自下而上”)方法首先将每个对象放入其自己的群集中,然后继续统一它们。

分开的方法(“自上而下”)的作用相反:它们从根开始并不断分割,直到只剩下单个对象为止。

你获取一些数据,用你选择的聚类算法和ta-da,就完成了!尽管从理论上讲可能是可行的,但事实通常并非如此。尤其是在处理文本时,在聚类之前和之后必须执行几个步骤。实际上,对文本进行聚类的过程通常是混乱的,并且以诸多失败的试验为标志。但是,如果尝试以理想的线性方式绘制它,它可能看起来像这样:

还有一些额外的步骤,对吧?不用担心-无论如何,你可能会出于直觉做到这一点。但是,自己最好考虑好每个步骤,并记住多种应对可能存在问题的解决方法。

聚类词

在接下来的几段中,我们将研究单词的聚类方法。让我们看一下其中的一组:

对我们来说,我们可以立即看出哪些词属于同一词。显然应该有一个聚簇,其中的动物带有单词``Aardvark''和``Zebra'',一个聚簇中的副词带有``on''和``under''。但是对于计算机来说是否同样明显?

在谈论具有相似含义的单词时,我们通常会遵循语言学中的分布假设。该假设指出,具有相似含义的单词将出现在相似单词的上下文之间。你可以说“盒子在架子上”,也可以说“盒子在架子下”。并且仍然产生有意义的句子。“上”、“下”两词之间在一定程度上可以互换。

创建单词嵌入时会使用此假设。单词嵌入将词汇表的每个单词映射到n维向量空间。具有相似上下文的单词将大致出现在向量空间的相同区域中。其中的一种嵌入是Weston,Ratle和Collobert在2008年开发的。在此处你可以看到单词向量一个有趣的部分(使用t-SNE缩减为二维):

请注意,月份,名称和位置是如何整齐地分组在一起,这将在下一步将它们聚类时派上用场。

k均值

现在,我们将看一下最著名的基于矢量的聚类算法:k均值。k均值的作用是将一个聚类分配返回给每个对象的k个可能聚类之一。概括一下我们先前学到的东西,这是一个困难的,平坦的集群方法。让我们看看k均值过程的样子:

K均值在向量空间中分配k个随机点作为k个簇的初始虚拟均值。然后,将每个数据点分配给平均值最近的聚类。接下来,重新计算每个聚类的实际平均值。根据均值的偏移,重新分配数据点。重复此过程,直到集群的平均值停止移动。

K表示它不是唯一的基于矢量的聚类方法。其他常用的方法包括DBSCAN,它是一种支持人口稠密的群集和期望最大化(EM)的方法,该方法假设每个群集的潜在概率分布。

布朗聚类

还有一些用于聚类单词的方法,不需要这些单词已经作为矢量可用。被引用最多的此类技术是Brown群集,该算法由Brown等人在1992年提出。(与以罗德岛布朗大学命名的棕色语料库无关)。

布朗聚类是一种分层聚类方法。如果在树中的正确位置上进行切割,还可以产生漂亮而平坦的簇,如下所示:

你还可以查看小的子树,找到包含近似同义词的单词对的聚类,例如评价和评估或会话和讨论。

如何实现的?同样,此方法依赖于分布假设。它引入了一个质量函数,描述了周围的上下文单词对当前聚类中单词的出现的预测程度(所谓的互信息)。然后,它遵循以下过程:

通过将每个单词分配给自己的唯一聚簇来初始化。直到只剩下一个簇(根):合并两个产生的并集具有最佳质量函数值的簇。

这就是为什么评价和评估这么早就合并的原因。由于两者都出现在极为相似的环境中,因此上面的质量函数仍然提供了非常好的价值。我们从逐渐统一的单个元素簇开始的事实意味着该方法是聚集的。

今天布朗平均值仍然有在使用!在Owoputi等人的出版物中(2013)棕色聚类法被用来寻找在线会话语言中应有的语音标签部分。结果既有趣又准确:

虽然本段结束了关于单词聚类的章节,但本文中没有讨论单词聚类更多的方法。一种非常有前途和高效的词聚类方法是基于图的聚类,也称为谱聚类。使用的方法包括基于最小生成树的聚类,马尔可夫链聚类。

聚类文件

通常,也可以通过查看矢量格式的每个文档来完成文档的聚类。但是文档很少有上下文。你可以想像一本书在整洁的书架上与其他书籍并排站立,但是通常这不是大型数字文档看起来的样子。

向量化文档的最快方法是给字典中的每个单词赋予其自己的向量维数,然后仅对每个单词和每个文档的出现次数进行计数。这种不考虑单词顺序而查看文档的方式称为``词袋法''。牛津英语词典包含300,000多个主要条目,不包括同形异义词。这是一个很大的维度,并且大多数维度可能会获得零值。

在一定程度上,你可以通过删除文档集合中未使用的所有单词维来抵消此问题,但最终仍然会遇到很多维。而且,如果你突然看到一个包含先前未使用过的单词的新文档,则必须更新每个文档向量,并为其添加新维度和零值。因此,为简单起见,假设我们的文档收集没有增长。

tf-idf

请看下面的小玩具示例,其中仅包含两个简短文档d1和d2,以及由此产生的单词向量包:

你会看到,像“我”和“爱”这样的抽象的单词会获得与实际辨别两个文件(如披萨和巧克力)的单词相同的价值。抵消这种行为的一种方法是使用tf-idf,这是一种数值统计数据,用作减轻次重要单词影响的加权因子。

Tf-idf代表术语频率和文档反向频率,这是用于加权的两个因素。术语频率只是一个单词在特定文档中出现的次数。如果我们的文件是“我爱巧克力,而巧克力爱我”,则“爱”一词的词频将为两个。此值通常通过将其除以给定文档中的最高术语频率来归一化,从而导致术语频率值介于0(对于文档中未出现的单词)和1(对于文档中最常见的单词)之间。术语频率是按单词和文档计算的。

另一方面,仅按单词计算逆文档频率。它指示单词在整个语料库中出现的频率。通过取其对数来反转该值。还记得我想摆脱的无处不在的词吗?由于1的对数为零,因此完全消除了它的影响。

基于这些公式,我们的示例获得以下值:

查看最后两列,我们看到只有最相关的单词才能获得较高的tf-idf值。所谓的停用词,即在我们的文档集中无处不在的词,其值等于或接近0。

接收到的tf-idf向量仍然与单词向量的原始包一样高维。因此,经常使用降维技术(例如潜在语义索引(LSI))使它们更好处理。正如前面针对单词聚类所述,k-means,DBSCAN和EM之类的算法也可以在文档向量上使用。可能的距离度量包括欧几里得距离和余弦距离。

潜在狄利克雷分配(LDA)

通常,仅具有文档簇是不够的。

主题建模算法是一种统计方法,可以分析原始文本中的单词以发现贯穿它们的主题,这些主题之间的联系方式以及它们随着时间的变化(Blei,2012)。

所有主题模型均基于相同的基本假设:

·每个文档都包含一个主题分布,并且

·每个主题均由单词组成。

除了诸如概率潜在语义分析(pLSA)之类的其他主题模型外,潜在狄利克雷分布是最著名和使用最广泛的模型。仅通过查看其名称,我们就可以找到很多有关其工作原理的信息。

潜在的是指隐藏的变量,狄利克雷分布是相对于其他概率分布的概率分布,而分配是指根据两者分配一些值。为了更好地理解这三个方面的作用,让我们看一下LDA给我们带来的结果。以下主题是通过将LDA模型与《科学》杂志上的17,000篇文章拟合而发现的100个主题的摘录。

你应该如何解释这些主题?主题是单词上的概率分布。有些单词更可能出现在主题中,有些则更少。你在上方看到的是每个主题中10个最常见的词,不包括停用词。请务必注意,这些主题实际上并没有名称“遗传学”或“进化”。这些只是我们人类用来概括主题内容的术语。尝试将主题视为单词概率分布1或单词概率分布23来代替。

但这不是LDA提供给我们的全部。此外,它还告诉我们每个文档中出现了哪些主题以及占哪个百分比。例如,有关可以检测DNA中特定疾病流行程度的新设备的文章中可能包含48%疾病,31%遗传学和21%计算机的主题组合。

为了解如何使计算机知道好主题以及如何找到主题,我们将再次构建一个玩具示例。假设我们的语料库词汇仅由几个表情符号组成。

此词汇表上可能的主题或单词概率分布可能看起来像这样:

作为人类,我们可能将这些主题标识为``食物,笑脸和动物''。让我们假设给出了主题。为了解LDA所做的基本假设,让我们看一下文档的生成过程。即使看起来不太现实,作者也可以采取以下步骤:

1.选择要在文本中写多少个单词。

2.选择文本应涵盖的主题混合。

3.对于文档中的每个单词:

·从混合中画出一个词应与之相关的话题

·从所选主题的单词分布中绘制单词

基于这些步骤,可能是以下文档:

请注意,即使从主题3提取披萨表情符号的可能性很小,但仍然有可能源自该主题。现在我们有了想要的结果,我们只需要找到一种方法来扭转这一过程。但实际上,我们面临着:

从理论上讲,我们可以使计算机尝试单词和主题的所有可能组合。除了这可能需要一个永恒的事实之外,我们究竟怎么知道哪种组合才有意义,而哪种组合却没有呢?为此,狄利克雷分布派上了用场。与其像上面的图片那样绘制分布,不如在相应位置的主题单纯形上绘制文档。

我们还可以从我们的语料库中抽取很多其他文档。它可能看起来像这样:

或者,如果我们事先选择了其他主题,例如:

在第一个变体中,文档清晰可见,并且可以理解不同的主题,而在第二个变体中,文档或多或少是相似的。此处选择的主题无法以有意义的方式分隔文档。这两个可能的文档发行版不过是两个不同的Dirichlet发行版而已!这意味着我们找到了一种描述主题上“良好”分布的方式!

同样的原则适用于主题中的单词。好的主题在单词上的分布会有所不同,而坏的主题将与其他单词具有大致相同的单词。在LDA模型中,通过两个超参数alpha和beta描述了狄利克雷分布的这两种外观。通常,你希望将狄利克雷分布参数保持在一个以下。看看动画中,不同的值如何改变分布。

好的单词和主题分布通常通过使用诸如折叠的吉布斯采样或期望传播之类的技术来近似。两种方法都可以迭代地改善随机初始化的单词和主题的分布。但是,但可能永远找不到“完美”的分布。

还记得简介中介绍的聚类流程图吗?特别是最后一步称为最终评估?

使用聚类方法时,应始终牢记,即使特定模型可能导致最小的矢量平均运动或最小的概率分布值,但这并不意味着它是“正确的”。有很多数据集,k均值无法正确聚类,甚至LDA都可以产生对人类没有任何意义的主题。

简而言之:所有模型都是错误的,但是有些模型是有用的。

标签: #用层次聚类算法进行词语聚类 #用层次聚类算法进行词语聚类分析的步骤是什么 #聚类分析树状图解读 #如何解读聚类分析树状图的结果 #聚类分析树状图的意义