Что означает выход алгоритма кластеризации Брауна?
Я запустил алгоритм коричневой кластеризации из 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
Что означает бинарное и целое число?
Из первой ссылки двоичный файл известен как bit-string
, см. http://saffron.deri.ie/acl_acl/document/ACL_ANTHOLOGY_ACL_P11-1053/
Но как я могу сказать из вывода, что dog and mouse and cat
- это один кластер, а the and chased
находится не в одном кластере?
Ответы
Ответ 1
Если я правильно понимаю, алгоритм дает вам дерево, и вам нужно усечь его на некотором уровне, чтобы получить кластеры. В случае этих бит строк вы должны просто взять первые L
символы.
Например, резка на втором символе дает вам два кластера
10 chased
11 dog
11 mouse
11 cat
На третьем символе вы получите
110 dog
111 mouse
111 cat
Стратегия резания - это другой предмет.
Ответ 2
В реализации Перси Лянга (https://github.com/percyliang/brown-cluster) параметр -C
позволяет указать количество кластеров слов. Вывод содержит все слова в корпусе вместе с битовой строкой, аннотирующей кластер и частоту слов в следующем формате: <bit string> <word> <word frequency>
. Количество отдельных строк бит в выводе равно числу желаемых кластеров, а слова с одной и той же битовой строкой принадлежат одному и тому же кластеру.
Ответ 3
Измените работу:./wcluster --text input.txt - c 3
- c число
это число означает количество кластеров, а по умолчанию - 50. Вы не можете различать разные кластеры слов, потому что вход по умолчанию имеет только три предложения. Измените 50 кластеров на 3 кластера, и вы можете сказать разницу.
Я ввожу три твита во вход и даю 3 в качестве параметра кластера
![введите описание изображения здесь]()
Ответ 4
Целые числа - это количество раз, сколько раз это слово отображается в документе. (Я тестировал это в реализации python.)
Из комментариев в верхней части реализации python:
Вместо использования окна (например, как в Brown et al., sec.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
Мое предположение:
В соответствии с рисунком 2 в Brown et al 1992 кластеризация иерархична и чтобы получить от корня до каждого слова "лист", которое у вас есть чтобы принять решение вверх/вниз. Если 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