布朗聚类算法输出是啥意思?

Posted

技术标签:

【中文标题】布朗聚类算法输出是啥意思?【英文标题】:What does the Brown clustering algorithm output mean?布朗聚类算法输出是什么意思? 【发布时间】:2014-01-26 17:47:31 【问题描述】:

我已经从 https://github.com/percyliang/brown-cluster 运行了 brown-clustering 算法,还运行了一个 python 实现 https://github.com/mheilman/tan-clustering。他们都为每个唯一令牌提供某种二进制和另一个整数。例如:

0        the        6
10        chased        3
110        dog        2
1110        mouse        2
1111        cat        2

二进制和整数是什么意思?

从第一个link开始,二进制被称为bit-string,见http://saffron.deri.ie/acl_acl/document/ACL_ANTHOLOGY_ACL_P11-1053/

但是我如何从输出中得知dog and mouse and cat 是一个集群而the and chased 不在同一个集群中?

【问题讨论】:

在您提供的第一个链接中,它说每一行是: !! 这是什么意思?簇表示为位串? 您能否详细说明您想要分类的内容?在这种情况下,我可以尝试寻找一些参考资料。否则,可能没有任何通用程序,我想这更多的是关于专家知识和/或预定义的措施。 我需要从未注释的语料库中提取语义相关的聚类。 当然,这就是聚类的想法,但那些层次算法只是给你层次。在您给出的示例中,不清楚 dog mouse 和 cat 是否应该在一个集群中。这仅取决于请求的粒度级别。 【参考方案1】:

如果我理解正确,该算法会为您提供一棵树,您需要在某个级别截断它以获得集群。如果是这些位字符串,您应该只取第一个 L 字符。

例如,在第二个字符处切割会给你两个簇

10           chased     

11           dog        
11           mouse      
11           cat        

在你得到第三个字符时

110           dog        

111           mouse      
111           cat        

但切割策略是另一回事。

【讨论】:

您有任何关于cutting 策略的链接/教程吗? 有时你有一些专业知识,知道只有K 簇,你一得到它们就剪掉。否则你定义一些度量,wikipedia article 是一个很好的起点。【参考方案2】:

在 Percy Liang 的实现 (https://github.com/percyliang/brown-cluster) 中,-C 参数允许您指定词簇的数量。输出包含语料库中的所有单词,以及注释集群的位串和以下格式的单词频率:<bit string> <word> <word frequency>。输出中不同位串的数量等于所需簇的数量,具有相同位串的单词属于同一个簇。

【讨论】:

有什么方法可以找到输入语料库的最佳聚类数?【参考方案3】:

改变你的跑步方式:./wcluster --text input.txt --c 3

--c数

这个数字表示簇的个数,默认是50个。你无法区分不同的词簇,因为默认输入只有三个句子。将 50 个集群更改为 3 个集群,您就可以分辨出差异。

我在输入中输入了 3 条推文,并给出 3 作为集群参数

【讨论】:

如何选择优化的簇数?【参考方案4】:

整数是单词在文档中出现次数的计数。 (我已经在 python 实现中对此进行了测试。)

来自python实现顶部的cmets:

而不是使用窗口(例如,在 Brown 等人的第 4 节中),这 代码使用两个随机选择的概率计算 PMI 来自同一文档的集群将是 c1 和 c2。此外,由于 集群令牌和对的总数在对之间是恒定的, 此代码使用计数而不是概率。

从python实现中的代码我们看到它输出了单词、位串和单词计数。

def save_clusters(self, output_path):
    with open(output_path, 'w') as f:
        for w in self.words:
            f.write("\t\t\n".format(w, self.get_bitstring(w),
                                          self.word_counts[w]))

【讨论】:

【参考方案5】:

我的猜测是:

根据Brown et al 1992 中的图 2,聚类是分层的,要从根到每个单词“叶子”,您必须做出向上/向下的决定。如果 up 为 0,down 为 1,则可以将每个单词表示为一个位串。

来自https://github.com/mheilman/tan-clustering/blob/master/class_lm_cluster.py:

# the 0/1 bit to add when walking up the hierarchy
# from a word to the top-level cluster

【讨论】:

是的,但这并没有给我集群,它只会给我相似性,对吧? 包含该词的簇集等价于位串前缀集。因此位串为 1110 的单词包含在簇 1、11 和 111 中。

以上是关于布朗聚类算法输出是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

聚类算法的性能指标是啥? [关闭]

对这些数据进行聚类的最佳算法是啥

Scikit 的 DBSCAN 聚类算法中的噪声样本是啥?

WEKA 上针对 ECG 频率/幅度的良好聚类/分类算法是啥?

使用 python scikit-learn 执行无监督文本分类(聚类)的最佳算法是啥?

K-means 聚类算法中的收敛条件是啥?