Brown聚类算法输出意味着什么?

时间:2014-01-08 14:48:05

标签: python algorithm machine-learning nlp cluster-analysis

我从https://github.com/percyliang/brown-cluster运行了棕色聚类算法,还运行了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不在同一群集中?

5 个答案:

答案 0 :(得分:17)

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

例如,在第二个字符处剪切会为您提供两个聚类

10           chased     

11           dog        
11           mouse      
11           cat        

你得到的第三个角色

110           dog        

111           mouse      
111           cat        

切割策略虽然是另一个主题。

答案 1 :(得分:4)

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

答案 2 :(得分:4)

更改您的运行:./ wcluster --text input.txt --c 3

- c号

此数字表示群集的数量,默认值为50.您无法区分不同的词群,因为默认输入只有三个句子。将50个集群更改为3个集群,您可以区分它们。

我在输入中输入三条推文,并将3作为群集参数

extract it

答案 3 :(得分:1)

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

从python实现顶部的注释:

  

而不是使用窗口(例如,如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]))

答案 4 :(得分:0)

我的猜测是:

根据Brown et al 1992中的图2,聚类是分层的,要从根到每个单词“leaf”,你必须做出一个向上/向下的决定。如果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