2014-01-08 13 views
15

私は茶色のクラスタリングアルゴリズムをhttps://github.com/percyliang/brown-clusterから実行しました。また、Pythonの実装https://github.com/mheilman/tan-clusteringも実行しました。そして、彼らは両方とも、一意のトークンごとに何らかのバイナリと別の整数を与えます。たとえば:Brownクラスタリングアルゴリズムの出力は何を意味しますか?

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

はバイナリと整数は何を意味するのでしょうか?最初linkから

、バイナリはhttp://saffron.deri.ie/acl_acl/document/ACL_ANTHOLOGY_ACL_P11-1053/

を参照してください、bit-stringとして知られている。しかし、私はdog and mouse and cat 1つのクラスタで、the and chasedが同じクラスタ内にないことを出力から言うのですか?

+1

を3を得、それはそれぞれの行があることを言う:<<クラスタがビット列として表現します>入力>で単語の回数が発生します。 – carla

+1

それはどういう意味ですか?ビット列として表されるクラスタ? – alvas

+0

あなたは正確に何を分類したいのかについていくつかの詳細を教えてもらえますか?この場合、私はいくつかの参考文献を探すことができます。それ以外の場合は、一般的な手順はないかもしれません。専門知識や事前定義された方策についてもっと詳しく考えています。 –

答えて

15

私が正しく理解していれば、アルゴリズムはあなたの木を与え、あなたはクラスタを得るために、いくつかのレベルでそれを切り捨てるする必要があります。これらのビット列の場合は、まず最初にL文字を取得する必要があります。

例えば、第二の文字で切断すると、次の2つのクラスタあなたは

110   dog   

111   mouse  
111   cat   

を取得する3番目の文字で

10   chased  

11   dog   
11   mouse  
11   cat   

を与える切削戦略は、しかし別の主題です。

+0

「切り取り」戦略についてのリンクやチュートリアルはありますか? – alvas

+0

「K」クラスターがあり、取得するとすぐにカットするという専門知識があることもあります。それ以外の場合は、いくつかの尺度を定義します。[wikipedia article](http://en.wikipedia.org/wiki/Hierarchical_clustering)は、開始するのに適しています。 –

0

私の推測では、次のとおりです。

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 
+0

しかし、それは私にクラスタを与えません、それは私に類似性を与えるだけですか? – alvas

+0

単語が含まれるクラスタのセットは、ビット列プレフィックスのセットに相当します。したがって、ビット列1110の単語はクラスタ1,11、および111に含まれています。 – cyborg

1

整数は、文書内で単語が何回表示されたかのカウントです。 (I Pythonの実装でこれをテストしている。)Python実装の上部のコメントから

の代わりに、例えば窓を(使用して、Brownら、秒のように4。 )、この は、同じドキュメントの2つのランダムに選択されたクラスタがc1とc2となる確率を使用してPMIを計算しました。また、 のクラスタトークンとペアの総数はペアごとに一定であるため、 このコードでは確率の代わりにカウントを使用します。

Python実装のコードからは、単語、ビット列、単語数が出力されていることがわかります。パーシー・梁の実装(https://github.com/percyliang/brown-cluster)で

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

-Cパラメータを使用すると、単語クラスタの数を指定することができます。出力には、コーパス内のすべての単語と、クラスタに注釈を付けるビット列と、次の形式の単語頻度が含まれます。<bit string> <word> <word frequency>。出力内の別個のビット列の数は、所望のクラスタの数に等しく、同じビット列を有する語は、同じクラスタに属する。

4
は、あなたのランニングを変更

:./wcluster --text INPUT.TXT --c 3

--c数

この数は、クラスタの数を意味し、デフォルトは50です。あなたに」デフォルトの入力には3つの文しかないので、単語の異なるクラスタを区別することはできません。 50のクラスタを3つのクラスタに変更すると、その違いを知ることができます。

私は入力に3つのつぶやきを入力し、現在のクラスタパラメータとして最初のリンクで

enter image description here

関連する問題