我从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
不在同一群集中?
答案 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作为群集参数
答案 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