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

17

我已经运行了来自https://github.com/percyliang/brown-cluster的Brown聚类算法,以及Python实现的https://github.com/mheilman/tan-clustering。它们都会对每个独特的标记提供某种二进制和另一个整数。例如:

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

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

根据第一个链接,二进制被称为比特串(bit-string),参见http://saffron.deri.ie/acl_acl/document/ACL_ANTHOLOGY_ACL_P11-1053/

但我怎样从输出中判断dog and mouse and cat是一个聚类(cluster),而the and chased不在同一个聚类中呢?


1
在你提供的第一个链接中,它说每一行都是:<用位串表示的簇> <单词> <单词在输入中出现的次数> !! - carla
1
这到底是什么意思?以位串表示的簇? - alvas
你能详细说明一下你想要分类的内容吗?如果可以的话,我可以尝试寻找一些参考资料。否则,可能没有通用的程序,我认为这更多是关于专业知识和/或预定义措施的问题。 - Łukasz Kidziński
我需要从未注释的语料库中提取语义相关的聚类。 - alvas
当然,这就是聚类的思想,但那些分层算法只会给你一个层次结构。在你提供的例子中,不清楚狗、老鼠和猫是否应该在同一簇中。这取决于所需的粒度级别。 - Łukasz Kidziński
显示剩余3条评论
5个回答

18

如果我理解正确的话,该算法会给你一棵树,你需要在某个级别上截断它以得到聚类。在这些比特串的情况下,你只需取前L个字符。

例如,在第二个字符处切割会给出两个聚类。

10           chased     

11           dog        
11           mouse      
11           cat        

在第三个字符处,您会得到

110           dog        

111           mouse      
111           cat        

不过,制割策略是一个独立的主题。


你有关于“cutting”策略的链接/教程吗? - alvas
有时候您具有专业知识,知道只需要 K 个聚类就可以切割了。否则,您需要定义一些度量标准,维基百科文章是一个好的起点。 - Łukasz Kidziński

4
改变你的运行方式:./wcluster --text input.txt --c 3
--c数字
这个数字表示集群的数量,默认值为50。你无法区分不同单词的不同集群,因为默认输入只有三个句子。将50个集群更改为3个集群,你就可以看出它们之间的区别。
我把三条推文输入到输入框中,并将集群参数设置为3。 enter image description here

我们如何选择最优化的聚类数量? - MaybeNextTime

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

有没有办法找到输入语料库的最佳聚类数? - MaybeNextTime

1
整数表示单词在文档中出现的次数。(我已在Python实现中测试过。)
从Python实现的顶部注释中可以看到:
不像使用窗口(例如Brown等人,第4节),该代码使用两个随机选择的聚类c1和c2来计算PMI的概率。另外,由于跨对之间的聚类令牌和对的总数保持恒定,因此该代码使用计数而不是概率。
从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]))

0

是的,但这并没有给我聚类,只是给了我相似度对吧? - alvas
该单词所包含的簇集合等同于位串前缀集合。因此,具有位串1110的单词包含在1、11和111簇中。 - cyborg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接