布朗聚类算法输出是啥意思?
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
不在同一个集群中?
【问题讨论】:
在您提供的第一个链接中,它说每一行是:如果我理解正确,该算法会为您提供一棵树,您需要在某个级别截断它以获得集群。如果是这些位字符串,您应该只取第一个 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 中。以上是关于布朗聚类算法输出是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
WEKA 上针对 ECG 频率/幅度的良好聚类/分类算法是啥?