Format: text/x-python
⬇ Download File (2.4 KB)
   1  from brownclustering.helpers import *
   2  from brownclustering.core import *
   3  
   4  
   5  class BrownClusteringValidation(BrownClustering):
   6      def __init__(self, corpus, m):
   7          super().__init__(corpus, m)
   8  
   9          self.helpers = []
  10          self.helpers.append(RawClusteringHelper(corpus))
  11          self.helpers.append(ModerateClusteringHelper(corpus))
  12          self.helpers.append(EnhancedClusteringHelper(corpus))
  13  
  14      @staticmethod
  15      def arg_max(_benefit, _helper):
  16          max_benefit = float('-inf')
  17          best_merge = None
  18          for i in range(_benefit.shape[0]):
  19              for j in range(i + 1, _benefit.shape[1]):
  20                  if max_benefit < _benefit[i, j]:
  21                      max_benefit = _benefit[i, j]
  22                      best_merge = (i, j)
  23          return best_merge
  24  
  25      def validate(self):
  26          words = self.ranks(self.vocabulary)
  27          tops = words[0:self.m]
  28  
  29          count = 0
  30          _words = []
  31          for w in tops:
  32              _words.append(w[0])
  33              if len(_words) > 2:
  34                  for helper in self.helpers:
  35                      helper.append_cluster(_words)
  36                  _words = []
  37                  count += 1
  38  
  39          if len(_words) > 0:
  40              for helper in self.helpers:
  41                  helper.append_cluster(_words)
  42              count += 1
  43  
  44          itr = 0
  45          for w in words[self.m:]:
  46              itr += 1
  47              print(str(itr) + "\t" + str(datetime.datetime.now()))
  48  
  49              last_benefit = None
  50              for helper in self.helpers:
  51                  helper.append_cluster([w[0]])
  52                  _benefit = helper.compute_benefit()
  53                  if last_benefit is not None:
  54                      print(_benefit - last_benefit)
  55                  last_benefit = _benefit
  56                  best_merge = self.arg_max(_benefit, helper)
  57  
  58              print(best_merge)
  59              for helper in self.helpers:
  60                  helper.merge_clusters(best_merge[0], best_merge[1])
  61  
  62          for _ in range(count - 1):
  63              itr += 1
  64              print(str(itr) + "\t" + str(datetime.datetime.now()))
  65              last_benefit = None
  66              for helper in self.helpers:
  67                  _benefit = helper.compute_benefit()
  68                  if last_benefit is not None:
  69                      print(_benefit - last_benefit)
  70                  best_merge = self.arg_max(_benefit, helper)
  71  
  72              print(best_merge)
  73              for helper in self.helpers:
  74                  helper.merge_clusters(best_merge[0], best_merge[1])