In [2]:
%cd '/Users/max/Projects/Coreference/'


/Users/max/Projects/Coreference

In [3]:
%cd 'rucoref'
from anaphoralib.corpora import rueval
from anaphoralib.tagsets import multeast
from anaphoralib.tagsets.utils import same_grammemmes
from anaphoralib.experiments import mentionpair
from anaphoralib.experiments import coref_utils
from anaphoralib import utils
from anaphoralib.experiments import utils as exp_utils
%cd '..'
#%load_ext autoreload
#%autoreload 2

scorer_path = 'rucoref/external/reference-coreference-scorers/scorer.pl'
random_state = 42


/Users/max/Projects/Coreference/rucoref
/Users/max/Projects/Coreference

In [4]:
from sklearn.svm import LinearSVC
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import export_graphviz

Initializing:


In [5]:
rucoref_train = rueval.RuCorefCorpus(multeast, rueval)
rucoref_test = rueval.RuCorefCorpus(multeast, rueval)

In [6]:
exp_utils.load_corpus(rucoref_train, 'Corpus-2015/Tokens.train.fixmorph.txt.parsed', 'Corpus-2015/Groups.train.txt')


Number of texts: 126
Number of GS texts: 126
Number of chains in a corpus: 2515
Number of words in all chains: 11453

In [7]:
exp_utils.load_corpus(rucoref_test, 'Corpus-2015/Tokens.test.fixmorph.txt.parsed', 'Corpus-2015/Groups.test.txt')


Number of texts: 55
Number of GS texts: 55
Number of chains in a corpus: 1123
Number of words in all chains: 5104

In [8]:
group_ok = lambda g: g.tag.startswith('N') or (g.tag.startswith('P') and g.lemma[0] in multeast.coref_pronouns)

In [9]:
gs_mentions, gs_group_ids = coref_utils.get_gs_groups(rucoref_test)
gs_groups = gs_mentions

pred_mentions, pred_group_ids = coref_utils.get_pred_groups(rucoref_test, group_ok)
pred_groups = rucoref_test.groups

pred_mentions_gold_bound, pred_gold_bounds_ids = coref_utils.get_pred_groups_gold_boundaries(rucoref_test, group_ok)
pred_groups_gold_bound = rucoref_test.groups

In [10]:
gs_mentions_train, gs_group_ids_train = coref_utils.get_gs_groups(rucoref_train)
gs_groups_train = gs_mentions_train

pred_mentions_train, pred_group_ids_train = coref_utils.get_pred_groups(rucoref_train, group_ok)
pred_groups_train = rucoref_train.groups

pred_mentions_gold_bound_train, pred_gold_bounds_ids = coref_utils.get_pred_groups_gold_boundaries(rucoref_train, group_ok)
pred_groups_gold_bound_train = rucoref_train.groups

Defining the classifier:


In [11]:
class MLMentionPairClassifier(mentionpair.MentionPairClassifier):
    NEEDS_TRAINING = True
    def __init__(self, scorer_path=None):
        self.scorer_path = scorer_path
    
    def train(self, clf, corpus, mentions):
        self.data_x = []
        self.data_y = []
        self.appositives = []
        
        self.tagset = corpus.tagset
        
        for i, text in enumerate(corpus.texts):
            all_mentions = utils.find_mentions(corpus.groups[i], corpus.tagset)
            gs = corpus.gs[i]
            words_index = corpus.words_index[i]

            
            for chain_id in gs['chains']:
                chain = gs['chains'][chain_id]
                for pair in ((chain[i], chain[i+1]) for i in range(len(chain)-1)):
                    text_groups = []
                    for pair_elem in pair:
                        gs_group = gs['groups'][pair_elem]
                        
                        words = [text[words_index[shift]] for shift in gs_group['tokens_shifts']]
                        head = text[words_index[gs_group['head_shift'][0]]]
                        text_groups.append(coref_utils.create_gs_group(gs_group, words, head))
                    
                    self.data_x.append(self.get_feature_vector(corpus.texts[i], corpus.parses[i] if corpus.parses else None, *text_groups))
                    self.data_y.append(True)
                    
                    neg_first = None
                    neg_last = None

                    for i_mention, mention in enumerate(all_mentions):
                        if mention.offset == text_groups[0].offset:
                            neg_first = i_mention
                        if mention.offset == text_groups[1].offset:
                            neg_last = i_mention
                        if neg_first and neg_last:
                            break
                    
                    if not neg_first or not neg_last:
                        continue
                        
                    neg_text_groups = all_mentions[neg_first+1:neg_last]
                    #for neg_pair in ((neg_text_groups[i], neg_text_groups[i+1]) for i in range(len(neg_text_groups)-1)):
                    #    self.data_x.append(self.get_feature_vector(corpus.texts[i], *neg_pair))
                    #    self.data_y.append(False)
                    for neg_group in neg_text_groups:
                        self.data_x.append(self.get_feature_vector(corpus.texts[i], corpus.parses[i] if corpus.parses else None, neg_group, text_groups[1]))
                        self.data_y.append(False)
        
        self.clf = clf
        self.clf.fit(self.data_x, self.data_y)
    
    def pair_coreferent(self, pair, groups, words, parse):
        vctr = self.get_feature_vector(words, parse, *pair)
        return self.clf.predict([vctr])[0]
    
    def get_feature_vector(self, words, parse, group_1, group_2):
        # group_1 — possible antecedent
        # group_2 — anaphor
        
        vctr = []
        feat_names = []
        
        self.feat_names = feat_names
        return vctr

In [83]:
import re

class MLMentionPairMoreFeatures(MLMentionPairClassifier):
    NEEDS_TRAINING = True
    
    def __init__(self, scorer_path, feat_zones=None):
        create_pro_rx = lambda strings: re.compile(ur'(^|\b){}\b'.format(u'|'.join(strings)))
        self.scorer_path = scorer_path
        self.feat_zones = feat_zones if feat_zones else tuple()
        self.modif = set()
        self.relatives = []
        self.deictic_pronouns = []
        self.str_match = []
        self.modif_pairs = []
        self.abbrs = []
        self.synt_roles = []
        self.rx_lat = re.compile('[A-Za-z]')
        self.rx_endings = re.compile(u'(?<=[А-ЯЁа-яё])(а|ы|ой|е)(?= |$)')
        
        self.rx_pro_deictic = create_pro_rx((u'я', u'ты', u'мы', u'вы'))
        self.rx_pro_personal = create_pro_rx((u'мой', u'твой', u'наш', u'ваш'))
        self.rx_pro_reflexive = create_pro_rx((u"свое", 
                                               u"своё", u"своего", u"своей", u"своем", u"своём", u"своему", u"своею", u"свой", u"свои", 
                                               u"своим", u"своими", u"своих", u"свою", u"своя", u"себе", u"себя", u"собой", u"собою"))
        self.rx_pro_possessive = create_pro_rx((u"его", u"ее", u"её", u"ей", u"ему", u"ею", u"им", u"ими", u"их"))
    
    def get_feature_vector(self, words, parse, group_1, group_2):
        # group_1 — possible antecedent
        # group_2 — anaphor
        
        head_1 = group_1.words[group_1.head] if group_1.type != 'word' else group_1
        head_2 = group_2.words[group_2.head] if group_2.type != 'word' else group_2
        
        is_appo = False
        
        is_pronoun = lambda w: len(w.lemma) == 1 and w.lemma[0] in self.tagset.coref_pronouns
        is_deictic_pronoun = lambda w: is_pronoun and self.tagset.extract_feature('person', w) in ('1', '2')
        
        is_proper = lambda w: self.tagset.extract_feature('proper', w) == 'p'
        
        group_1_proper = is_proper(group_1)
        group_2_proper = is_proper(group_2)
        
        is_pronoun_1 = is_pronoun(group_1)
        is_pronoun_2 = is_pronoun(group_2)
        
        number_agrees = lambda p: same_grammemmes('number', p, self.tagset)
        gender_agrees = lambda p: same_grammemmes('gender', p, self.tagset)
        animacity_agrees = lambda p: same_grammemmes('animate', p, self.tagset)
        
        person_1 = self.tagset.extract_feature('person', group_1)
        person_2 = self.tagset.extract_feature('person', group_2)
        
        pronoun_persons = {u'мой': '1', u'наш': '1', u'я': '1', u'мы': '1', u'твой': 2, u'ваш': '2', u'ты': '2', u'вы': '2'}
        
        is_demonstrative = lambda w: [tag.startswith('Pd') or w.lemma[i] == u'этот' for i, tag in enumerate(w.tags)]
        demonstr_1 = is_demonstrative(group_1) if len(group_1.lemma) > 1 else [0]
        demonstr_2 = is_demonstrative(group_2) if len(group_2.lemma) > 1 else [0]
        
        filtered_lemmas_1 = [lemma for (i, lemma) in enumerate(group_1.lemma) if not demonstr_1[i]]
        filtered_lemmas_2 = [lemma for (i, lemma) in enumerate(group_2.lemma) if not demonstr_2[i]]
        
        filtered_lemma_1 = ' '.join(filtered_lemmas_1)
        filtered_lemma_2 = ' '.join(filtered_lemmas_2)
        
        filtered_wforms_1 = [wf for (i, wf) in enumerate(group_1.wordform) if not demonstr_1[i]]
        filtered_wforms_2 = [wf for (i, wf) in enumerate(group_2.wordform) if not demonstr_2[i]]
        
        filtered_wf_1 = ' '.join(filtered_wforms_1)
        filtered_wf_2 = ' '.join(filtered_wforms_2)
        
        modifiers_1 = [group_1.lemma[i] for i in range(len(group_1.tags)) if i != group_1.head and group_1.tags[i][0] == 'N' 
                       and len(lemma) > 1 
                       and self.tagset.extract_feature('case', group_1) == self.tagset.extract_feature('case', group_1.words[i])
                       and self.tagset.extract_feature('case', group_1.words[i]) != 'g'
                      ]
        modifiers_2 = [group_2.lemma[i] for i in range(len(group_2.tags)) if i != group_2.head and group_2.tags[i][0] == 'N'
                       and self.tagset.extract_feature('case', group_2) == self.tagset.extract_feature('case', group_2.words[i])
                       and self.tagset.extract_feature('case', group_2.words[i]) != 'g'
                      ]
        
        if filtered_lemma_1 in pronoun_persons:
            person_1 = pronoun_persons[filtered_lemma_1]
        if filtered_lemma_2 in pronoun_persons:
            person_2 = pronoun_persons[filtered_lemma_2]
        
        person_agr = person_1 == person_2 if person_1 in {'1','2'} or person_2 in {'1', '2'} else -1
        
        n_sentences = -1
        
        self.modif.update(modifiers_1)
        self.modif.update(modifiers_2)
        
        j = i = 0
        if not head_1 in words or not head_2 in words:
            n_sentences = -1
            n_nouns = -1
            dist_words = -1
            print 'no alignment found'
        else:
            i = words.index(head_1)
            j = words.index(head_2)
            
            gr1_end = i + len(group_1.lemma) - group_1.head - 1
            gr2_start = j - group_2.head
            
            between_groups = words[gr1_end+1:gr2_start]
            n_sentences = sum(1 for gr in between_groups if gr.tag == 'SENT')
            n_nouns = sum(1 for gr in between_groups if gr.tag.startswith('N'))
            dist_words = j - i
            
            if gr2_start - gr1_end == 2 and words[gr1_end+1].tag.startswith(',') \
                and same_grammemmes('case', (group_1, group_2), self.tagset) \
                and same_grammemmes('number', (group_1, group_2), self.tagset) \
                and same_grammemmes('gender', (group_1, group_2), self.tagset) \
                and group_1.tag.startswith('N') and group_2.tag.startswith('N'):
                is_appo = True
                self.appositives.append((group_1, group_2, i, j))
                
            # Capital letter heuristic
            #if i > 0:
            #    group_1_proper |= any(w[0].isupper() for w in group_1.wordform) and words[i-1].tag != 'SENT'
            #if j > 0:
            #    group_2_proper |= any(w[0].isupper() for w in group_2.wordform) and words[j-1].tag != 'SENT'
                
        # Endings heuristic
        #if group_1_proper and group_2_proper:
        #    str_match = self.rx_endings.sub(u'', filtered_lemma_1) == self.rx_endings.sub(u'', filtered_lemma_2)
        #else:
        #    str_match = filtered_lemma_1 == filtered_lemma_2
        # No endings heuristic:
        str_match = filtered_lemma_1 == filtered_lemma_2
        
        vctr = []
        self.feat_names = []
        
        if 'soon' in self.feat_zones:
            if not 'dist' in self.feat_zones:
                vctr.append(n_sentences == 1)
                self.feat_names.append('dist==1')

            vctr.append(not is_pronoun_1 and not is_pronoun_2 and str_match)
            self.feat_names.append('str_match')

            is_animate_1 = self.tagset.extract_feature('animate', group_1) in ('y', 'a')
            is_animate_2 = self.tagset.extract_feature('animate', group_2) in ('y', 'a')
            sem_class_agreement = (is_animate_1 and is_animate_2) or (not is_animate_1 and not is_animate_2)
            # Semantic similarity heuristic (head match)
            if not is_pronoun_1:
                sem_class_agreement &= group_1.lemma[group_1.head] == group_2.lemma[group_2.head]

            vctr.append(sem_class_agreement)
            self.feat_names.append('sem_class_agreement')
            
            if not 'morpho' in self.feat_zones:
                vctr.append(is_pronoun_1)
                vctr.append(is_pronoun_2)
                self.feat_names.extend(('i_pronoun', 'j_pronoun'))

                vctr.append(is_pronoun_1 and is_pronoun_2)
                self.feat_names.append('both_pronouns')

            vctr.append(number_agrees((group_1, group_2)))
            vctr.append(gender_agrees((group_1, group_2)))
            self.feat_names.extend(('number-agr', 'gender-agr'))

            vctr.append(group_1_proper and group_2_proper)
            self.feat_names.append('both-proper')
            vctr.append(any(demonstr_2[:group_2.head+1]))
            self.feat_names.append('anaphor-is-demonstrative')

            vctr.append(is_appo)
            self.feat_names.append('appositive')
        
        if 'morpho' in self.feat_zones:
            #vctr.append(is_pronoun_1)
            #vctr.append(is_pronoun_2)
            #self.feat_names.extend(('i_pronoun', 'j_pronoun'))

            #vctr.append(is_pronoun_1 and is_pronoun_2)
            #self.feat_names.append('both_pronouns')
            
            vctr.append(self.rx_pro_deictic.search(filtered_lemma_2) is not None if is_pronoun_2 else -1)
            vctr.append(self.rx_pro_deictic.search(filtered_lemma_1) is not None if is_pronoun_1 else -1)
            self.feat_names.extend(('deictic_pronouns2', 'deictic_pronouns1'))
            
            #if vctr[-1] == True and vctr[-2] == True and filtered_lemma_1 == filtered_lemma_2:
            #    self.deictic_pronouns.append((filtered_lemma_1, filtered_lemma_2))
            #vctr.append(vctr[-1] == True and vctr[-2] == True and filtered_lemma_1 == filtered_lemma_2)
            #self.feat_names.append('same_deictic_pronouns')
            
            vctr.append(self.rx_pro_personal.search(filtered_lemma_2) is not None if is_pronoun_2 else -1)
            vctr.append(self.rx_pro_personal.search(filtered_lemma_1) is not None if is_pronoun_1 else -1)
            
            self.feat_names.append('pers_poss_pronouns2')
            self.feat_names.append('pers_poss_pronouns1')
            
            #vctr.append(person_agr)
            #vctr.append(((vctr[-1] == True and vctr[-3] == True) or (vctr[-2] == True and vctr[-4] == True)) and person_agr)
            #self.feat_names.append('person_agr')
            
            vctr.append((filtered_lemma_2 in (u'который',) 
                        and (words[j-1].tag[0] == ',' or words[j-2].tag[0] == ',') 
                        and dist_words < 4) if is_pronoun_1 else -1)
            if is_pronoun_2 and filtered_lemma_2 in (u'который',):
                self.relatives.append((filtered_lemma_1, filtered_lemma_2, words[j-1], dist_words))
            vctr.append(filtered_lemma_1 in (u'который',) if is_pronoun_2 else -1)
            self.feat_names.append('rel_pronouns1')
            self.feat_names.append('rel_pronouns2')
            
            vctr.append(self.rx_pro_reflexive.search(filtered_lemma_2) is not None if is_pronoun_2 else -1)
            vctr.append(self.rx_pro_reflexive.search(filtered_lemma_1) is not None if is_pronoun_1 else -1)
            self.feat_names.append('refl_pronouns2')
            self.feat_names.append('refl_pronouns1')
            
            vctr.append(self.rx_pro_possessive.search(filtered_lemma_2) is not None if is_pronoun_2 else -1)
            vctr.append(self.rx_pro_possessive.search(filtered_lemma_1) is not None if is_pronoun_1 else -1)
            self.feat_names.append('poss_pronouns2')
            self.feat_names.append('poss_pronouns1')
            
            #vctr.append(not is_pronoun_1 and not is_pronoun_2 
            #            and (filtered_lemma_1.startswith(filtered_lemma_2)
            #            or filtered_lemma_2.startswith(filtered_lemma_1)))
            #self.feat_names.append('substring')
        
        if 'dist' in self.feat_zones:
            vctr.append(n_sentences == 1)
            self.feat_names.append('dist==1')
            vctr.append(n_sentences > 2)
            self.feat_names.append('dist>2')
            vctr.append(n_nouns > 3)
            self.feat_names.append('nouns>3')
            
        if 'lexical' in self.feat_zones:
            vctr.append(not is_pronoun_1 and not is_pronoun_2 
                        and ((len(modifiers_1) and filtered_lemma_2 in modifiers_1)) or ((len(modifiers_2) and filtered_lemma_1 in modifiers_2)))
            #vctr.append(not is_pronoun_1 and not is_pronoun_2 and len(modifiers_1) and filtered_lemma_2 in modifiers_1)
            self.feat_names.append('modif-fullNP')
            if vctr[-1] == True:
                self.modif_pairs.append(('1', ' '.join(modifiers_1), head_1, head_2, '+'.join(group_1.lemma), '+'.join(group_2.lemma)))
                self.modif_pairs.append(('2', ' '.join(modifiers_2), head_1, head_2, '+'.join(group_1.lemma), '+'.join(group_2.lemma)))
            
            is_abbr = (len(filtered_lemmas_1) > 1 or len(filtered_lemmas_2) > 1) and \
                        (''.join([w[0] for w in filtered_lemmas_1]) == filtered_lemma_2 or \
                         ''.join([w[0] for w in filtered_lemmas_2]) == filtered_lemma_1)
            vctr.append(not is_pronoun_1 and not is_pronoun_2 and is_abbr)
            if is_abbr:
                self.abbrs.append((filtered_lemma_1, filtered_lemma_2))
            self.feat_names.append('is_abbr')
        
        if 'synt' in self.feat_zones:
            if parse:
                synt_roles = []
                for group, word_ind in ((group_1, i), (group_2, j)):
                    #word_offset = group.words[group.head].offset if len(group.wordform) > 1 else group.offset
                    synt_roles.append(parse[word_ind][1])
                
                is_subj_1 = synt_roles[0] == u'предик'
                is_subj_2 = synt_roles[1] == u'предик'
                is_obj_1 = synt_roles[0] in (u'1-компл', u'2-компл', u'предл')
                is_obj_2 = synt_roles[1] in (u'1-компл', u'2-компл', u'предл')
                
                vctr.append(is_subj_1 and is_obj_2 and n_sentences == 0)
                self.feat_names.append('subj_and_obj')
                
                #self.synt_roles.append((group_1, synt_roles[0], group_2, synt_roles[1]))
            else:
                is_subj_1 = self.tagset.extract_feature('case', group_1) == 'n' and words[i-1].tag == 'SENT'
                is_subj_2 = self.tagset.extract_feature('case', group_2) == 'n' and words[j-1].tag == 'SENT'
            
            #vctr.append(is_subj_1)
            #vctr.append(is_subj_2)
            #self.feat_names.append('subj1')
            #self.feat_names.append('subj2')
            
            vctr.append(words[i-1].tag == 'SENT')
            vctr.append(words[j-1].tag == 'SENT')
            self.feat_names.append('sent_start_1')
            self.feat_names.append('sent_start_2')
            
            vctr.append(is_subj_1 == is_subj_2 and not is_pronoun_1 and is_pronoun_2 
                        and self.tagset.extract_feature('person', group_2) == '3')
            self.feat_names.append('subj_parallel')
            #self.feat_names.append('both_subj')
            #vctr.append(is_appo)
            #self.feat_names.append('appo')
        
        return vctr

Testing

Soon features only

Soon features with all the heuristics, gold mentions (fixed morphology):


In [197]:
# both 'Endings' and 'Capital letter' heuristics should be uncommented (see the classifier code)
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)

clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(LinearSVC(random_state=42), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $74.50$ & $59.73$ & $66.30$  & $76.20$ & $46.54$ & $57.79$  & $52.25$ \\
\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $74.52$ & $54.20$ & $62.75$  & $75.56$ & $44.46$ & $55.98$  & $49.18$ \\

Soon features without first-capital-letter as a proper noun heuristic. Fixed morphology makes it nearly just the same:


In [199]:
# 'Endings' heuristic should be uncommented, 'Capital letter' heuristic should be commented
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $73.71$ & $58.11$ & $64.99$  & $76.10$ & $45.83$ & $57.21$  & $51.32$ \\

Soon features without endings heuristic. Again, fixed morphology makes it really nearly the same (and in fact better than with one heuristic enabled):


In [201]:
# both 'Endings' and 'Capital letter' heuristics should be commented
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $73.99$ & $59.38$ & $65.88$  & $75.91$ & $46.44$ & $57.62$  & $51.91$ \\

At the same time, turning off head match as a semantic similarity heuristic reduces quality drastically:


In [203]:
# 'Head match' heuristic should be commented
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $73.96$ & $50.49$ & $60.01$  & $79.99$ & $41.01$ & $54.22$  & $47.49$ \\

Soon features with the head match match as a semantic similarity heuristics, gold, gold boundaries and predicted mentions:


In [205]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)

clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, pred_mentions_gold_bound_train)
coref_utils.get_score_table(clf, rucoref_test, pred_mentions_gold_bound, pred_groups_gold_bound, False)

clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, pred_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, pred_mentions, pred_groups, False)


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $73.99$ & $59.38$ & $65.88$  & $75.91$ & $46.44$ & $57.62$  & $51.91$ \\
\textsc{MLMentionPairMoreFeatures} &  $51.19$  & $38.41$ & $52.88$ & $44.49$  & $23.71$ & $41.52$ & $30.18$  & $26.76$ \\
\textsc{MLMentionPairMoreFeatures} &  $37.67$  & $27.80$ & $38.96$ & $32.45$  & $15.74$ & $29.75$ & $20.59$  & $20.25$ \\

Predicted mentions with heads-only evaluation works nearly as gold boundary mentions. The reason for this is that NP extraction using syntax finds nearly all the noun phrases, including the embedded ones. On the other hand, 10% difference between mention detection f-measures means that the parses are far from perfect


In [208]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, pred_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, pred_mentions, pred_groups, True)


\textsc{MLMentionPairMoreFeatures} &  $46.91$  & $36.22$ & $51.00$ & $42.36$  & $21.91$ & $40.48$ & $28.43$  & $24.77$ \\

Optimizing the decision tree a little:


In [13]:
def create_clf(min_samples_leaf=0.005):
    return DecisionTreeClassifier(random_state=random_state, min_samples_leaf=min_samples_leaf)

In [207]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $73.98$ & $62.24$ & $67.61$  & $71.40$ & $49.34$ & $58.36$  & $52.41$ \\

In [92]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, pred_mentions_gold_bound_train)
coref_utils.get_score_table(clf, rucoref_test, pred_mentions_gold_bound, pred_groups_gold_bound, False)


\textsc{MLMentionPairMoreFeatures} &  $51.21$  & $38.58$ & $51.86$ & $44.24$  & $24.02$ & $41.00$ & $30.29$  & $26.28$ \\

Analyzing the results:


In [209]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)

scores, test_groups, test_chains = clf.score(rucoref_test, gs_mentions, gs_groups)
coref_utils.print_chains_in_text(rucoref_test, 1, test_chains, gs_mentions)


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $73.98$ & $62.24$ & $67.61$  & $71.40$ & $49.34$ & $58.36$  & $52.41$ \\
-- SYS --
Мальчик:мальчик(Ncmsny, 17)
мальчика:мальчик(Ncmsgy, 386)
Мальчик:мальчик(Ncmsny, 843)
мальчик:мальчик(Ncmsny, 1089)
мальчик:мальчик(Ncmsny, 1327)
Мальчик:мальчик(Ncmsny, 2122)
Мальчик:мальчик(Ncmsny, 2330)
Мальчик:мальчик(Ncmsny, 2508)
Мальчик:мальчик(Ncmsny, 2616)
мальчика:мальчик(Ncmsgy, 2967)
Мальчика:мальчик(Ncmsay, 3192)
Мальчик:мальчик(Ncmsny, 3348)
Мальчик:мальчик(Ncmsny, 3495)
Мальчик:мальчик(Ncmsny, 4217)
мальчик:мальчик(Ncmsny, 4539)

он:он(P-3msnn, 58)
Она:она(P-3fsnn, 526)
которая:который(P--fsna, 1040)
Она:она(P-3fsnn, 1654)
своего:свой(P--msga, 1692)
Его:его(P-3msan, 1718)
Он:он(P-3msnn, 2160)
свою:свой(P--fsaa, 2186)
которую:который(P--fsaa, 2199)
его:его(P-3msan, 2296)
они:они(P-3-pnn, 2565)
ними:они(P-3-pin, 2696)
Он:он(P-3msnn, 2702)
их:они(P-3-pan, 2705)
нему:он(P-3msdn, 2761)
его:он(P-3msan, 2840)
ним:он(P-3msin, 3241)
Он:он(P-3msnn, 3283)
себя:себя(P----an, 3296)
Они:они(P-3-pnn, 3384)
Они:они(P-3-pnn, 3412)
него:он(P-3msgn, 3427)
он:он(P-3msnn, 3564)
он:он(P-3msnn, 3770)
Мне:я(P-1-sdn, 3807)
Ему:он(P-3msdn, 3860)
Я:я(P-1-snn, 4238)
мне:я(P-1-sdn, 4261)
Я:я(P-1-snn, 4280)
Его:его(P--msga, 4584)

новую хорошую школу:новый хороший школа(Ncfsan, 323)
этой школы:этот школа(Ncfsgn, 570)
новую школу с гуманитарным уклоном:новый школа с гуманитарный уклон(Ncfsan, 801)
музыкальную школу:музыкальный школа(Ncfsan, 872)
новую школу:новый школа(Ncfsan, 2411)
музыкальной школы:музыкальный школа(Ncfsgn, 3636)
музыкальной школы:музыкальный школа(Ncfsgn, 3993)
школу:школа(Ncfsan, 4475)

ребенок:ребенок(Ncmsny, 421)
ребенка:ребенок(Ncmsgy, 1681)
ребенок:ребенок(Ncmsny, 4014)

классом этого друга:класс это друг(Ncmsin, 2540)
собственный класс мальчика:собственный класс мальчик(Ncmsan, 2949)

отец:отец(Ncmsny, 2312)
отцу:отец(Ncmsdy, 3546)
отцу:отец(Ncmsdy, 3904)

красивая и любимая учительница по сольфеджио:красивый и любимый учительница по сольфеджио(Ncfsny, 994)
учительницы:учительница(Ncfsgy, 1624)
Новая учительница:новый учительница(Ncfsny, 1948)

сольфеджио:сольфеджио(Ncnsdn, 1028)
сольфеджио:сольфеджио(Ncnsan, 1476)

друг с детского садика:друг с детский садик(P---snn, 2478)
этого друга:это друг(P---san, 2548)
этот друг:этот друг(P---snn, 2725)

детьми:дитя(Ncnpiy, 1069)
дети:дитя(Ncnpny, 1249)

оперу:опера(Ncfsan, 1076)
опера:опера(Ncfsnn, 2076)
их оперу:они опера(Ncfsan, 2175)

мамой:мама(Ncfsiy, 1142)
маме:мама(Ncfsdy, 3529)
маму:мама(Ncfsay, 3800)
мама:мама(Ncfsny, 3899)
Мама:мама(Ncfsny, 4339)
Маме:мама(Ncfsdy, 4642)

ты:ты(P-2-snn, 2925)
тебе:ты(P-2-sdn, 4243)
Ты:ты(P-2-snn, 4420)
Ты:ты(P-2-snn, 4446)

та:тот(P--fsna, 1861)
той:тот(P--fsga, 2039)

обожаемый старший друг мальчика , еще с детского садика:обожать старший друг мальчик , еще с детский садик(Ncmsny, 363)

мать:мать(Ncfsny, 520)

ребята неграмотные и не понимающие алгебры:ребята неграмотный и не понимать алгебра(Ncmpnn, 3060)

Новенький:новенький(Ncmsny, 3246)

сборная окрестных дворов:сборная окрестный двор(Ncfsnn, 3034)

легко возбудимая натура:легко возбудимая натура(Ncfsnn, 1336)

основной предмет:основной предмет(Ncmsan, 1454)

свою партию:свой партия(Ncfsan, 2186)

заботливая и милая женщина:заботливый и милый женщина(Ncfsny, 4089)

той , продвинутой и почти гуманитарной школки:тот , продвинуть и почти гуманитарный школка(Ncfsgn, 4128)

педагог по фортепьяно:педагог по фортепьяно(Ncmsny, 4066)

две арии Козла:два ария козел(Mcf-a, 1120)

педагогический талант:педагогический талант(Ncmsnn, 1918)

другая преподавательница:другой преподавательница(Ncfsny, 1728)

младше - классника:молодой - классника(Afcmsnf, 2798)

серьезные восьмиклассники:серьезный восьмиклассник(Ncmpny, 2589)



-- GS --
педагог по фортепьяно:педагог по фортепьяно(Ncmsny, 4066)
заботливая и милая женщина:заботливый и милый женщина(Ncfsny, 4089)

музыкальную школу:музыкальный школа(Ncfsan, 872)
музыкальной школы:музыкальный школа(Ncfsgn, 3636)
музыкальной школы:музыкальный школа(Ncfsgn, 3993)

отец:отец(Ncmsny, 2312)
отцу:отец(Ncmsdy, 3546)
отцу:отец(Ncmsdy, 3904)

Новенький:новенький(Ncmsny, 3246)
Он:он(P-3msnn, 3283)
себя:себя(P----an, 3296)

собственный класс мальчика:собственный класс мальчик(Ncmsan, 2949)
сборная окрестных дворов:сборная окрестный двор(Ncfsnn, 3034)
ребята неграмотные и не понимающие алгебры:ребята неграмотный и не понимать алгебра(Ncmpnn, 3060)
Они:они(P-3-pnn, 3384)
Они:они(P-3-pnn, 3412)

классом этого друга:класс это друг(Ncmsin, 2540)
они:они(P-3-pnn, 2565)
серьезные восьмиклассники:серьезный восьмиклассник(Ncmpny, 2589)
ними:они(P-3-pin, 2696)
их:они(P-3-pan, 2705)

обожаемый старший друг мальчика , еще с детского садика:обожать старший друг мальчик , еще с детский садик(Ncmsny, 363)
друг с детского садика:друг с детский садик(P---snn, 2478)
этого друга:это друг(P---san, 2548)
этот друг:этот друг(P---snn, 2725)

две арии Козла:два ария козел(Mcf-a, 1120)
свою партию:свой партия(Ncfsan, 2186)
которую:который(P--fsaa, 2199)

оперу:опера(Ncfsan, 1076)
опера:опера(Ncfsnn, 2076)
их оперу:они опера(Ncfsan, 2175)

детьми:дитя(Ncnpiy, 1069)
дети:дитя(Ncnpny, 1249)

другая преподавательница:другой преподавательница(Ncfsny, 1728)
Новая учительница:новый учительница(Ncfsny, 1948)

красивая и любимая учительница по сольфеджио:красивый и любимый учительница по сольфеджио(Ncfsny, 994)
которая:который(P--fsna, 1040)
учительницы:учительница(Ncfsgy, 1624)
Она:она(P-3fsnn, 1654)
своего:свой(P--msga, 1692)
та:тот(P--fsna, 1861)
педагогический талант:педагогический талант(Ncmsnn, 1918)
той:тот(P--fsga, 2039)

новую хорошую школу:новый хороший школа(Ncfsan, 323)
этой школы:этот школа(Ncfsgn, 570)
новую школу с гуманитарным уклоном:новый школа с гуманитарный уклон(Ncfsan, 801)
новую школу:новый школа(Ncfsan, 2411)
той , продвинутой и почти гуманитарной школки:тот , продвинуть и почти гуманитарный школка(Ncfsgn, 4128)
школу:школа(Ncfsan, 4475)

мать:мать(Ncfsny, 520)
Она:она(P-3fsnn, 526)
мамой:мама(Ncfsiy, 1142)
маме:мама(Ncfsdy, 3529)
маму:мама(Ncfsay, 3800)
мама:мама(Ncfsny, 3899)
тебе:ты(P-2-sdn, 4243)
Мама:мама(Ncfsny, 4339)
Маме:мама(Ncfsdy, 4642)

Мальчик:мальчик(Ncmsny, 17)
он:он(P-3msnn, 58)
мальчика:мальчик(Ncmsgy, 386)
ребенок:ребенок(Ncmsny, 421)
Мальчик:мальчик(Ncmsny, 843)
мальчик:мальчик(Ncmsny, 1089)
мальчик:мальчик(Ncmsny, 1327)
легко возбудимая натура:легко возбудимая натура(Ncfsnn, 1336)
ребенка:ребенок(Ncmsgy, 1681)
Его:его(P-3msan, 1718)
Мальчик:мальчик(Ncmsny, 2122)
Он:он(P-3msnn, 2160)
свою:свой(P--fsaa, 2186)
его:его(P-3msan, 2296)
Мальчик:мальчик(Ncmsny, 2330)
Мальчик:мальчик(Ncmsny, 2508)
Мальчик:мальчик(Ncmsny, 2616)
Он:он(P-3msnn, 2702)
нему:он(P-3msdn, 2761)
младше - классника:молодой - классника(Afcmsnf, 2798)
его:он(P-3msan, 2840)
ты:ты(P-2-snn, 2925)
мальчика:мальчик(Ncmsgy, 2967)
Мальчика:мальчик(Ncmsay, 3192)
ним:он(P-3msin, 3241)
Мальчик:мальчик(Ncmsny, 3348)
него:он(P-3msgn, 3427)
Мальчик:мальчик(Ncmsny, 3495)
он:он(P-3msnn, 3564)
он:он(P-3msnn, 3770)
Мне:я(P-1-sdn, 3807)
Ему:он(P-3msdn, 3860)
ребенок:ребенок(Ncmsny, 4014)
Мальчик:мальчик(Ncmsny, 4217)
Я:я(P-1-snn, 4238)
мне:я(P-1-sdn, 4261)
Я:я(P-1-snn, 4280)
Ты:ты(P-2-snn, 4420)
Ты:ты(P-2-snn, 4446)
мальчик:мальчик(Ncmsny, 4539)
Его:его(P--msga, 4584)

сольфеджио:сольфеджио(Ncnsdn, 1028)
основной предмет:основной предмет(Ncmsan, 1454)
сольфеджио:сольфеджио(Ncnsan, 1476)

Soon + morphology

Gold mentions:


In [210]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('morpho',))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $54.46$ & $18.43$ & $27.54$  & $78.90$ & $29.71$ & $43.16$  & $31.26$ \\

In [211]:
clf.clf.feature_importances_


Out[211]:
array([  4.35131835e-02,   2.82306021e-03,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   2.24390092e-03,   3.99143768e-04,
         6.85288952e-01,   2.65731759e-01])

In [212]:
clf.feat_names


Out[212]:
['deictic_pronouns2',
 'deictic_pronouns1',
 'pers_poss_pronouns2',
 'pers_poss_pronouns1',
 'same_deictic_pronouns',
 'rel_pronouns1',
 'rel_pronouns2',
 'refl_pronouns2',
 'refl_pronouns1',
 'poss_pronouns2',
 'poss_pronouns1']

In [256]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon',))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
export_graphviz(clf.clf, out_file='soon_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $73.98$ & $62.24$ & $67.61$  & $71.40$ & $49.34$ & $58.36$  & $52.41$ \\

In [257]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
export_graphviz(clf.clf, out_file='soon_morph_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.32$ & $62.42$ & $69.86$  & $79.94$ & $47.89$ & $59.89$  & $53.30$ \\

Morphology is making results better at last!


In [258]:
for i, feat_importance in sorted(enumerate(clf.clf.feature_importances_), key=lambda f: f[1], reverse=True):
    print clf.feat_names[i], feat_importance


str_match 0.434983057396
pers_poss_pronouns2 0.240575131816
rel_pronouns1 0.0724784770518
refl_pronouns1 0.0665951971755
deictic_pronouns2 0.0437857083928
gender-agr 0.0435172643989
number-agr 0.0376687535192
sem_class_agreement 0.0260076250174
poss_pronouns1 0.0187800401535
dist==1 0.0155938180605
both-proper 1.4927018678e-05
anaphor-is-demonstrative 0.0
appositive 0.0
deictic_pronouns1 0.0
pers_poss_pronouns1 0.0
rel_pronouns2 0.0
refl_pronouns2 0.0
poss_pronouns2 0.0

In [259]:
scores, test_groups, test_chains = clf.score(rucoref_test, gs_mentions, gs_groups)
coref_utils.print_chains_in_text(rucoref_test, 1, test_chains, gs_mentions)


-- SYS --
Мальчик:мальчик(Ncmsny, 17)
он:он(P-3msnn, 58)

педагогический талант:педагогический талант(Ncmsnn, 1918)
Он:он(P-3msnn, 2160)

новую хорошую школу:новый хороший школа(Ncfsan, 323)
Она:она(P-3fsnn, 526)

мальчика:мальчик(Ncmsgy, 386)
Мальчик:мальчик(Ncmsny, 843)
мальчик:мальчик(Ncmsny, 1089)
мальчик:мальчик(Ncmsny, 1327)
Мальчик:мальчик(Ncmsny, 2122)
Мальчик:мальчик(Ncmsny, 2330)
Мальчик:мальчик(Ncmsny, 2508)
Мальчик:мальчик(Ncmsny, 2616)
мальчика:мальчик(Ncmsgy, 2967)
Мальчика:мальчик(Ncmsay, 3192)
ним:он(P-3msin, 3241)
Он:он(P-3msnn, 3283)
себя:себя(P----an, 3296)
Они:они(P-3-pnn, 3384)
Они:они(P-3-pnn, 3412)
него:он(P-3msgn, 3427)
он:он(P-3msnn, 3564)
он:он(P-3msnn, 3770)
Мне:я(P-1-sdn, 3807)
Ему:он(P-3msdn, 3860)
Я:я(P-1-snn, 4238)
мне:я(P-1-sdn, 4261)
Я:я(P-1-snn, 4280)

ребенок:ребенок(Ncmsny, 421)
ребенка:ребенок(Ncmsgy, 1681)
своего:свой(P--msga, 1692)
Его:его(P-3msan, 1718)

Мальчик:мальчик(Ncmsny, 3348)
Мальчик:мальчик(Ncmsny, 3495)
Мальчик:мальчик(Ncmsny, 4217)
мальчик:мальчик(Ncmsny, 4539)

классом этого друга:класс это друг(Ncmsin, 2540)
собственный класс мальчика:собственный класс мальчик(Ncmsan, 2949)

этой школы:этот школа(Ncfsgn, 570)
новую школу с гуманитарным уклоном:новый школа с гуманитарный уклон(Ncfsan, 801)
музыкальную школу:музыкальный школа(Ncfsan, 872)
новую школу:новый школа(Ncfsan, 2411)
музыкальной школы:музыкальный школа(Ncfsgn, 3636)
музыкальной школы:музыкальный школа(Ncfsgn, 3993)
школу:школа(Ncfsan, 4475)

отец:отец(Ncmsny, 2312)
отцу:отец(Ncmsdy, 3546)
отцу:отец(Ncmsdy, 3904)

красивая и любимая учительница по сольфеджио:красивый и любимый учительница по сольфеджио(Ncfsny, 994)
которая:который(P--fsna, 1040)

сольфеджио:сольфеджио(Ncnsdn, 1028)
сольфеджио:сольфеджио(Ncnsan, 1476)

друг с детского садика:друг с детский садик(P---snn, 2478)
этого друга:это друг(P---san, 2548)
этот друг:этот друг(P---snn, 2725)
нему:он(P-3msdn, 2761)
его:он(P-3msan, 2840)

детьми:дитя(Ncnpiy, 1069)
дети:дитя(Ncnpny, 1249)

оперу:опера(Ncfsan, 1076)
опера:опера(Ncfsnn, 2076)
их оперу:они опера(Ncfsan, 2175)
свою:свой(P--fsaa, 2186)

свою партию:свой партия(Ncfsan, 2186)
которую:который(P--fsaa, 2199)
его:его(P-3msan, 2296)
они:они(P-3-pnn, 2565)
ними:они(P-3-pin, 2696)
Он:он(P-3msnn, 2702)
их:они(P-3-pan, 2705)

мамой:мама(Ncfsiy, 1142)
маме:мама(Ncfsdy, 3529)
маму:мама(Ncfsay, 3800)
мама:мама(Ncfsny, 3899)
Мама:мама(Ncfsny, 4339)
Маме:мама(Ncfsdy, 4642)

легко возбудимая натура:легко возбудимая натура(Ncfsnn, 1336)
Она:она(P-3fsnn, 1654)

учительницы:учительница(Ncfsgy, 1624)
Новая учительница:новый учительница(Ncfsny, 1948)

ты:ты(P-2-snn, 2925)
тебе:ты(P-2-sdn, 4243)
Ты:ты(P-2-snn, 4420)
Ты:ты(P-2-snn, 4446)
Его:его(P--msga, 4584)

та:тот(P--fsna, 1861)
той:тот(P--fsga, 2039)

обожаемый старший друг мальчика , еще с детского садика:обожать старший друг мальчик , еще с детский садик(Ncmsny, 363)

мать:мать(Ncfsny, 520)

ребята неграмотные и не понимающие алгебры:ребята неграмотный и не понимать алгебра(Ncmpnn, 3060)

Новенький:новенький(Ncmsny, 3246)

сборная окрестных дворов:сборная окрестный двор(Ncfsnn, 3034)

основной предмет:основной предмет(Ncmsan, 1454)

заботливая и милая женщина:заботливый и милый женщина(Ncfsny, 4089)

той , продвинутой и почти гуманитарной школки:тот , продвинуть и почти гуманитарный школка(Ncfsgn, 4128)

ребенок:ребенок(Ncmsny, 4014)

педагог по фортепьяно:педагог по фортепьяно(Ncmsny, 4066)

две арии Козла:два ария козел(Mcf-a, 1120)

другая преподавательница:другой преподавательница(Ncfsny, 1728)

младше - классника:молодой - классника(Afcmsnf, 2798)

серьезные восьмиклассники:серьезный восьмиклассник(Ncmpny, 2589)



-- GS --
педагог по фортепьяно:педагог по фортепьяно(Ncmsny, 4066)
заботливая и милая женщина:заботливый и милый женщина(Ncfsny, 4089)

музыкальную школу:музыкальный школа(Ncfsan, 872)
музыкальной школы:музыкальный школа(Ncfsgn, 3636)
музыкальной школы:музыкальный школа(Ncfsgn, 3993)

отец:отец(Ncmsny, 2312)
отцу:отец(Ncmsdy, 3546)
отцу:отец(Ncmsdy, 3904)

Новенький:новенький(Ncmsny, 3246)
Он:он(P-3msnn, 3283)
себя:себя(P----an, 3296)

собственный класс мальчика:собственный класс мальчик(Ncmsan, 2949)
сборная окрестных дворов:сборная окрестный двор(Ncfsnn, 3034)
ребята неграмотные и не понимающие алгебры:ребята неграмотный и не понимать алгебра(Ncmpnn, 3060)
Они:они(P-3-pnn, 3384)
Они:они(P-3-pnn, 3412)

классом этого друга:класс это друг(Ncmsin, 2540)
они:они(P-3-pnn, 2565)
серьезные восьмиклассники:серьезный восьмиклассник(Ncmpny, 2589)
ними:они(P-3-pin, 2696)
их:они(P-3-pan, 2705)

обожаемый старший друг мальчика , еще с детского садика:обожать старший друг мальчик , еще с детский садик(Ncmsny, 363)
друг с детского садика:друг с детский садик(P---snn, 2478)
этого друга:это друг(P---san, 2548)
этот друг:этот друг(P---snn, 2725)

две арии Козла:два ария козел(Mcf-a, 1120)
свою партию:свой партия(Ncfsan, 2186)
которую:который(P--fsaa, 2199)

оперу:опера(Ncfsan, 1076)
опера:опера(Ncfsnn, 2076)
их оперу:они опера(Ncfsan, 2175)

детьми:дитя(Ncnpiy, 1069)
дети:дитя(Ncnpny, 1249)

другая преподавательница:другой преподавательница(Ncfsny, 1728)
Новая учительница:новый учительница(Ncfsny, 1948)

красивая и любимая учительница по сольфеджио:красивый и любимый учительница по сольфеджио(Ncfsny, 994)
которая:который(P--fsna, 1040)
учительницы:учительница(Ncfsgy, 1624)
Она:она(P-3fsnn, 1654)
своего:свой(P--msga, 1692)
та:тот(P--fsna, 1861)
педагогический талант:педагогический талант(Ncmsnn, 1918)
той:тот(P--fsga, 2039)

новую хорошую школу:новый хороший школа(Ncfsan, 323)
этой школы:этот школа(Ncfsgn, 570)
новую школу с гуманитарным уклоном:новый школа с гуманитарный уклон(Ncfsan, 801)
новую школу:новый школа(Ncfsan, 2411)
той , продвинутой и почти гуманитарной школки:тот , продвинуть и почти гуманитарный школка(Ncfsgn, 4128)
школу:школа(Ncfsan, 4475)

мать:мать(Ncfsny, 520)
Она:она(P-3fsnn, 526)
мамой:мама(Ncfsiy, 1142)
маме:мама(Ncfsdy, 3529)
маму:мама(Ncfsay, 3800)
мама:мама(Ncfsny, 3899)
тебе:ты(P-2-sdn, 4243)
Мама:мама(Ncfsny, 4339)
Маме:мама(Ncfsdy, 4642)

Мальчик:мальчик(Ncmsny, 17)
он:он(P-3msnn, 58)
мальчика:мальчик(Ncmsgy, 386)
ребенок:ребенок(Ncmsny, 421)
Мальчик:мальчик(Ncmsny, 843)
мальчик:мальчик(Ncmsny, 1089)
мальчик:мальчик(Ncmsny, 1327)
легко возбудимая натура:легко возбудимая натура(Ncfsnn, 1336)
ребенка:ребенок(Ncmsgy, 1681)
Его:его(P-3msan, 1718)
Мальчик:мальчик(Ncmsny, 2122)
Он:он(P-3msnn, 2160)
свою:свой(P--fsaa, 2186)
его:его(P-3msan, 2296)
Мальчик:мальчик(Ncmsny, 2330)
Мальчик:мальчик(Ncmsny, 2508)
Мальчик:мальчик(Ncmsny, 2616)
Он:он(P-3msnn, 2702)
нему:он(P-3msdn, 2761)
младше - классника:молодой - классника(Afcmsnf, 2798)
его:он(P-3msan, 2840)
ты:ты(P-2-snn, 2925)
мальчика:мальчик(Ncmsgy, 2967)
Мальчика:мальчик(Ncmsay, 3192)
ним:он(P-3msin, 3241)
Мальчик:мальчик(Ncmsny, 3348)
него:он(P-3msgn, 3427)
Мальчик:мальчик(Ncmsny, 3495)
он:он(P-3msnn, 3564)
он:он(P-3msnn, 3770)
Мне:я(P-1-sdn, 3807)
Ему:он(P-3msdn, 3860)
ребенок:ребенок(Ncmsny, 4014)
Мальчик:мальчик(Ncmsny, 4217)
Я:я(P-1-snn, 4238)
мне:я(P-1-sdn, 4261)
Я:я(P-1-snn, 4280)
Ты:ты(P-2-snn, 4420)
Ты:ты(P-2-snn, 4446)
мальчик:мальчик(Ncmsny, 4539)
Его:его(P--msga, 4584)

сольфеджио:сольфеджио(Ncnsdn, 1028)
основной предмет:основной предмет(Ncmsan, 1454)
сольфеджио:сольфеджио(Ncnsan, 1476)


In [260]:
coref_utils.print_chains_in_text(rucoref_test, 30, test_chains, gs_mentions)


-- SYS --
планшетный компьютер iPad:планшетный компьютер ipad(Ncmsnn, 121)
который:который(P--msna, 148)

потребители:потребитель(Ncmpny, 923)
потребителями:потребитель(Ncmpiy, 2373)
которые:который(P---pna, 2388)

надежду:надежда(Ncfsan, 212)
которая:который(P--fsna, 234)
его:его(P--msga, 677)
Их:их(P-3-pan, 708)
свой:свой(P--msaa, 970)

АРПП:арпп(Ncfsnn, 349)
АРПП:арпп(Ncfsgn, 1159)

России:россия(Ncfsgn, 467)
Россию:россия(Ncfsan, 771)
России:россия(Ncfsln, 1206)
России:россия(Ncfsln, 5205)

iPad:ipad(Mc, 475)
iPad:ipad(Mc, 1044)
iPad:ipad(Mc, 1199)
iPad:ipad(Mc, 2912)
iPad:ipad(Mc, 3086)
iPad:ipad(Mc, 3645)
iPad:ipad(Mc, 3917)
iPad:ipad(Mc, 5279)

90 тыс. этих устройств:@card@ тыс. этот устройство(Mc---d, 793)
90 тыс. этих устройств:@card@ тыс. этот устройство(Ncnpgn, 793)
устройств:устройство(Ncnpgn, 1255)
устройства первой волны:устройство первый волна(Ncnpan, 2430)
новые устройства:новый устройство(Ncnpan, 2480)
они:они(P-3-pnn, 2550)

Apple:apple(------, 849)
Apple:apple(Ncfsgn, 1702)
Apple:apple(------, 2199)
корпорация Apple:корпорация apple(------, 4811)

китайцы:китаец(Ncmpny, 2248)
которые:который(P---pna, 2257)

планшеты:планшет(Ncmpan, 941)
новых планшетов:новый планшет(Ncmpgn, 2169)
планшет:планшет(Ncmsan, 2945)
его:его(P--msga, 2984)
он:он(P-3msnn, 3011)
себе:себя(P----ln, 3025)
которые:который(P---pna, 3198)
его:он(P-3msgn, 3346)
свою:свой(P--fsaa, 3540)
собой:себя(P----in, 3569)

США:сша(Ncmpgn, 953)
США:сша(Ncmpln, 1380)
США:сша(Ncmpln, 2832)

председателя правления АРПП Александра Оськина:председатель правление арпп александр оськина(Npmsgy, 1136)
Александра Оськина:александр оськина(Npmsgy, 2730)

компании Zinio:компания zinio(Ncfsgn, 4346)
которой:который(P--fsla, 4364)

AppStore:appstore(Mc, 4400)
AppStore:appstore(SENT, 4682)

Представители издательств , сопутствующих бизнесов и дистрибуторов прессы:представители издательство , сопутствующий бизнес и дистрибуторов пресса(Ncmpny, 533)

РФ:рф(Ncfsln, 180)

Ассоциация распространителей печатной продукции:ассоциация распространитель печатный продукция(Ncfsnn, 300)

рекламную платформу iAd:рекламный платформа iad(Mc, 4835)

систему:система(Ncfsan, 4885)

нового цифрового устройства:новый цифровой устройство(Ncnsgn, 647)

все:все(R-----, 825)

« айпадов »:« айпадов »(!!!, 2306)

нашей стране:наш страна(Ncfsln, 891)

ожидаемый:ожидать(Vmpp-smpfen, 2045)

мега - популярная новинка от Apple:мегабайт - популярный новинка от apple(Ncfsnn, 1675)

Инфотейнмент:инфотейнмент(Ncmsnn, 3480)

основным трендам:основной трендам(Ncmsin, 3180)

медиа:медиа(Ncnsnn, 3331)



-- GS --
планшетный компьютер iPad:планшетный компьютер ipad(Ncmsnn, 121)
который:который(P--msna, 148)
iPad:ipad(Mc, 475)
нового цифрового устройства:новый цифровой устройство(Ncnsgn, 647)
его:его(P--msga, 677)

РФ:рф(Ncfsln, 180)
России:россия(Ncfsgn, 467)
Россию:россия(Ncfsan, 771)
нашей стране:наш страна(Ncfsln, 891)
России:россия(Ncfsln, 1206)
России:россия(Ncfsln, 5205)

надежду:надежда(Ncfsan, 212)
которая:который(P--fsna, 234)

Ассоциация распространителей печатной продукции:ассоциация распространитель печатный продукция(Ncfsnn, 300)
АРПП:арпп(Ncfsnn, 349)
АРПП:арпп(Ncfsgn, 1159)

Представители издательств , сопутствующих бизнесов и дистрибуторов прессы:представители издательство , сопутствующий бизнес и дистрибуторов пресса(Ncmpny, 533)
Их:их(P-3-pan, 708)

90 тыс. этих устройств:@card@ тыс. этот устройство(Mc---d, 793)
планшеты:планшет(Ncmpan, 941)
iPad:ipad(Mc, 1044)
iPad:ipad(Mc, 1199)
устройств:устройство(Ncnpgn, 1255)
мега - популярная новинка от Apple:мегабайт - популярный новинка от apple(Ncfsnn, 1675)
« айпадов »:« айпадов »(!!!, 2306)
устройства первой волны:устройство первый волна(Ncnpan, 2430)
iPad:ipad(Mc, 2912)
планшет:планшет(Ncmsan, 2945)
его:его(P--msga, 2984)
он:он(P-3msnn, 3011)
себе:себя(P----ln, 3025)
iPad:ipad(Mc, 3086)
iPad:ipad(Mc, 3645)
iPad:ipad(Mc, 3917)
iPad:ipad(Mc, 5279)

90 тыс. этих устройств:@card@ тыс. этот устройство(Ncnpgn, 793)
все:все(R-----, 825)

Apple:apple(------, 849)
Apple:apple(Ncfsgn, 1702)
Apple:apple(------, 2199)
корпорация Apple:корпорация apple(------, 4811)

потребители:потребитель(Ncmpny, 923)
свой:свой(P--msaa, 970)

США:сша(Ncmpgn, 953)
США:сша(Ncmpln, 1380)
США:сша(Ncmpln, 2832)

председателя правления АРПП Александра Оськина:председатель правление арпп александр оськина(Npmsgy, 1136)
Александра Оськина:александр оськина(Npmsgy, 2730)

ожидаемый:ожидать(Vmpp-smpfen, 2045)
новых планшетов:новый планшет(Ncmpgn, 2169)

китайцы:китаец(Ncmpny, 2248)
которые:который(P---pna, 2257)

потребителями:потребитель(Ncmpiy, 2373)
которые:который(P---pna, 2388)

новые устройства:новый устройство(Ncnpan, 2480)
они:они(P-3-pnn, 2550)

основным трендам:основной трендам(Ncmsin, 3180)
которые:который(P---pna, 3198)

медиа:медиа(Ncnsnn, 3331)
его:он(P-3msgn, 3346)

Инфотейнмент:инфотейнмент(Ncmsnn, 3480)
свою:свой(P--fsaa, 3540)
собой:себя(P----in, 3569)

компании Zinio:компания zinio(Ncfsgn, 4346)
которой:который(P--fsla, 4364)

AppStore:appstore(Mc, 4400)
AppStore:appstore(SENT, 4682)

рекламную платформу iAd:рекламный платформа iad(Mc, 4835)
систему:система(Ncfsan, 4885)

Morphological features improved the quality and the pronouns aren't clustered together at last. Instead, they are sometimes clustered with the right antecedent. Still, there is a lot of room for improvement.

Soon + morphology + distance


In [262]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
#export_graphviz(clf.clf, out_file='soon_morph_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.32$ & $62.42$ & $69.86$  & $79.94$ & $47.89$ & $59.89$  & $53.30$ \\

In [254]:
# only "n_sentences == 1" feature
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
#export_graphviz(clf.clf, out_file='soon_morph_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.32$ & $62.42$ & $69.86$  & $79.94$ & $47.89$ & $59.89$  & $53.30$ \\

In [264]:
# "n_sentences == 1", "n_sentences == 0" features
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
#export_graphviz(clf.clf, out_file='soon_morph_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.26$ & $62.60$ & $69.95$  & $79.78$ & $47.72$ & $59.72$  & $53.08$ \\

In [266]:
# "n_sentences == 1", "n_sentences > 2" features
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
#export_graphviz(clf.clf, out_file='soon_morph_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.32$ & $62.42$ & $69.86$  & $79.94$ & $47.89$ & $59.89$  & $53.30$ \\

In [267]:
for i, feat_importance in sorted(enumerate(clf.clf.feature_importances_), key=lambda f: f[1], reverse=True):
    print clf.feat_names[i], feat_importance


str_match 0.427593555187
deictic_pronouns2 0.279530111698
refl_pronouns1 0.0712472110123
poss_pronouns1 0.0654638764303
gender-agr 0.0430293225541
dist>2 0.0359964360866
number-agr 0.0298350901349
sem_class_agreement 0.0255658068839
pers_poss_pronouns1 0.0184610043983
dist==1 0.00315327849172
both-proper 0.000124307123274
anaphor-is-demonstrative 0.0
appositive 0.0
deictic_pronouns1 0.0
pers_poss_pronouns2 0.0
rel_pronouns1 0.0
rel_pronouns2 0.0
refl_pronouns2 0.0
poss_pronouns2 0.0

In [272]:
# "n_sentences == 1", "n_sentences > 2", "n_nouns > 2" features
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
#export_graphviz(clf.clf, out_file='soon_morph_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $78.86$ & $62.90$ & $69.99$  & $78.95$ & $48.33$ & $59.96$  & $53.55$ \\

In [273]:
for i, feat_importance in sorted(enumerate(clf.clf.feature_importances_), key=lambda f: f[1], reverse=True):
    print clf.feat_names[i], feat_importance


str_match 0.420510647847
rel_pronouns2 0.232570907799
refl_pronouns1 0.0882222365654
rel_pronouns1 0.0643794948599
deictic_pronouns2 0.042328905206
gender-agr 0.0423165599298
dist>2 0.0354001702676
number-agr 0.0293658659635
sem_class_agreement 0.0251423200492
nouns>2 0.0152381109187
dist==1 0.00440253256606
both-proper 0.000122248028077
anaphor-is-demonstrative 0.0
appositive 0.0
deictic_pronouns1 0.0
pers_poss_pronouns2 0.0
pers_poss_pronouns1 0.0
refl_pronouns2 0.0
poss_pronouns2 0.0
poss_pronouns1 0.0

In [275]:
# "n_sentences == 1", "n_sentences > 2", "n_nouns > 1" features
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
#export_graphviz(clf.clf, out_file='soon_morph_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $78.78$ & $62.50$ & $69.70$  & $79.30$ & $47.96$ & $59.77$  & $53.18$ \\

In [277]:
# "n_sentences == 1", "n_sentences > 2", "n_nouns > 3" features
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
export_graphviz(clf.clf, out_file='soon_morph_dist_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.29$ & $63.01$ & $70.22$  & $79.42$ & $48.39$ & $60.14$  & $53.65$ \\

Distance features are working now although the quality increase is not that big. Adding more distance features may increase the quality further. For comparison, without distance features (only "dist==1") the results are:

\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.32$ & $62.42$ & $69.86$  & $79.94$ & $47.89$ & $59.89$  & $53.30$ \\

In [278]:
for i, feat_importance in sorted(enumerate(clf.clf.feature_importances_), key=lambda f: f[1], reverse=True):
    print clf.feat_names[i], feat_importance


str_match 0.420760851213
rel_pronouns2 0.232709287229
deictic_pronouns1 0.0701087207429
pers_poss_pronouns1 0.0644178005874
deictic_pronouns2 0.0423540908573
gender-agr 0.0423417382357
dist>2 0.0354212333294
number-agr 0.0293514076709
sem_class_agreement 0.0251572797015
refl_pronouns1 0.0181660079546
nouns>3 0.0145258724533
dist==1 0.00456338925963
both-proper 0.000122320765517
anaphor-is-demonstrative 0.0
appositive 0.0
pers_poss_pronouns2 0.0
rel_pronouns1 0.0
refl_pronouns2 0.0
poss_pronouns2 0.0
poss_pronouns1 0.0

Moreover, we can see that the quality for the pronoun resolution has decreased:


In [279]:
scores, test_groups, test_chains = clf.score(rucoref_test, gs_mentions, gs_groups)
coref_utils.print_chains_in_text(rucoref_test, 1, test_chains, gs_mentions)


-- SYS --
Мальчик:мальчик(Ncmsny, 17)
он:он(P-3msnn, 58)
Она:она(P-3fsnn, 526)

классом этого друга:класс это друг(Ncmsin, 2540)
собственный класс мальчика:собственный класс мальчик(Ncmsan, 2949)

новую хорошую школу:новый хороший школа(Ncfsan, 323)
этой школы:этот школа(Ncfsgn, 570)
новую школу с гуманитарным уклоном:новый школа с гуманитарный уклон(Ncfsan, 801)
музыкальную школу:музыкальный школа(Ncfsan, 872)
новую школу:новый школа(Ncfsan, 2411)
музыкальной школы:музыкальный школа(Ncfsgn, 3636)
музыкальной школы:музыкальный школа(Ncfsgn, 3993)
школу:школа(Ncfsan, 4475)

мальчика:мальчик(Ncmsgy, 386)
Мальчик:мальчик(Ncmsny, 843)
мальчик:мальчик(Ncmsny, 1089)
мальчик:мальчик(Ncmsny, 1327)
Мальчик:мальчик(Ncmsny, 2122)
Мальчик:мальчик(Ncmsny, 2330)
Мальчик:мальчик(Ncmsny, 2508)
Мальчик:мальчик(Ncmsny, 2616)
мальчика:мальчик(Ncmsgy, 2967)
Мальчика:мальчик(Ncmsay, 3192)
ним:он(P-3msin, 3241)
Он:он(P-3msnn, 3283)
себя:себя(P----an, 3296)
Они:они(P-3-pnn, 3384)
Они:они(P-3-pnn, 3412)
него:он(P-3msgn, 3427)
он:он(P-3msnn, 3564)
он:он(P-3msnn, 3770)
Мне:я(P-1-sdn, 3807)
Ему:он(P-3msdn, 3860)
Я:я(P-1-snn, 4238)
мне:я(P-1-sdn, 4261)
Я:я(P-1-snn, 4280)
Его:его(P--msga, 4584)

ребенок:ребенок(Ncmsny, 421)
ребенка:ребенок(Ncmsgy, 1681)
своего:свой(P--msga, 1692)
Его:его(P-3msan, 1718)
Он:он(P-3msnn, 2160)

Мальчик:мальчик(Ncmsny, 3348)
Мальчик:мальчик(Ncmsny, 3495)
Мальчик:мальчик(Ncmsny, 4217)
мальчик:мальчик(Ncmsny, 4539)

свою партию:свой партия(Ncfsan, 2186)
которую:который(P--fsaa, 2199)
его:его(P-3msan, 2296)
они:они(P-3-pnn, 2565)
ними:они(P-3-pin, 2696)
Он:он(P-3msnn, 2702)
их:они(P-3-pan, 2705)

отец:отец(Ncmsny, 2312)
отцу:отец(Ncmsdy, 3546)
отцу:отец(Ncmsdy, 3904)

красивая и любимая учительница по сольфеджио:красивый и любимый учительница по сольфеджио(Ncfsny, 994)
которая:который(P--fsna, 1040)
Она:она(P-3fsnn, 1654)

сольфеджио:сольфеджио(Ncnsdn, 1028)
сольфеджио:сольфеджио(Ncnsan, 1476)

друг с детского садика:друг с детский садик(P---snn, 2478)
этого друга:это друг(P---san, 2548)
этот друг:этот друг(P---snn, 2725)
нему:он(P-3msdn, 2761)
его:он(P-3msan, 2840)

детьми:дитя(Ncnpiy, 1069)
дети:дитя(Ncnpny, 1249)

оперу:опера(Ncfsan, 1076)
опера:опера(Ncfsnn, 2076)
их оперу:они опера(Ncfsan, 2175)
свою:свой(P--fsaa, 2186)

мамой:мама(Ncfsiy, 1142)
маме:мама(Ncfsdy, 3529)
маму:мама(Ncfsay, 3800)
мама:мама(Ncfsny, 3899)
Мама:мама(Ncfsny, 4339)
Маме:мама(Ncfsdy, 4642)

учительницы:учительница(Ncfsgy, 1624)
Новая учительница:новый учительница(Ncfsny, 1948)

ты:ты(P-2-snn, 2925)
тебе:ты(P-2-sdn, 4243)
Ты:ты(P-2-snn, 4420)
Ты:ты(P-2-snn, 4446)

та:тот(P--fsna, 1861)
той:тот(P--fsga, 2039)

обожаемый старший друг мальчика , еще с детского садика:обожать старший друг мальчик , еще с детский садик(Ncmsny, 363)

мать:мать(Ncfsny, 520)

ребята неграмотные и не понимающие алгебры:ребята неграмотный и не понимать алгебра(Ncmpnn, 3060)

Новенький:новенький(Ncmsny, 3246)

сборная окрестных дворов:сборная окрестный двор(Ncfsnn, 3034)

легко возбудимая натура:легко возбудимая натура(Ncfsnn, 1336)

основной предмет:основной предмет(Ncmsan, 1454)

заботливая и милая женщина:заботливый и милый женщина(Ncfsny, 4089)

той , продвинутой и почти гуманитарной школки:тот , продвинуть и почти гуманитарный школка(Ncfsgn, 4128)

ребенок:ребенок(Ncmsny, 4014)

педагог по фортепьяно:педагог по фортепьяно(Ncmsny, 4066)

две арии Козла:два ария козел(Mcf-a, 1120)

педагогический талант:педагогический талант(Ncmsnn, 1918)

другая преподавательница:другой преподавательница(Ncfsny, 1728)

младше - классника:молодой - классника(Afcmsnf, 2798)

серьезные восьмиклассники:серьезный восьмиклассник(Ncmpny, 2589)



-- GS --
педагог по фортепьяно:педагог по фортепьяно(Ncmsny, 4066)
заботливая и милая женщина:заботливый и милый женщина(Ncfsny, 4089)

музыкальную школу:музыкальный школа(Ncfsan, 872)
музыкальной школы:музыкальный школа(Ncfsgn, 3636)
музыкальной школы:музыкальный школа(Ncfsgn, 3993)

отец:отец(Ncmsny, 2312)
отцу:отец(Ncmsdy, 3546)
отцу:отец(Ncmsdy, 3904)

Новенький:новенький(Ncmsny, 3246)
Он:он(P-3msnn, 3283)
себя:себя(P----an, 3296)

собственный класс мальчика:собственный класс мальчик(Ncmsan, 2949)
сборная окрестных дворов:сборная окрестный двор(Ncfsnn, 3034)
ребята неграмотные и не понимающие алгебры:ребята неграмотный и не понимать алгебра(Ncmpnn, 3060)
Они:они(P-3-pnn, 3384)
Они:они(P-3-pnn, 3412)

классом этого друга:класс это друг(Ncmsin, 2540)
они:они(P-3-pnn, 2565)
серьезные восьмиклассники:серьезный восьмиклассник(Ncmpny, 2589)
ними:они(P-3-pin, 2696)
их:они(P-3-pan, 2705)

обожаемый старший друг мальчика , еще с детского садика:обожать старший друг мальчик , еще с детский садик(Ncmsny, 363)
друг с детского садика:друг с детский садик(P---snn, 2478)
этого друга:это друг(P---san, 2548)
этот друг:этот друг(P---snn, 2725)

две арии Козла:два ария козел(Mcf-a, 1120)
свою партию:свой партия(Ncfsan, 2186)
которую:который(P--fsaa, 2199)

оперу:опера(Ncfsan, 1076)
опера:опера(Ncfsnn, 2076)
их оперу:они опера(Ncfsan, 2175)

детьми:дитя(Ncnpiy, 1069)
дети:дитя(Ncnpny, 1249)

другая преподавательница:другой преподавательница(Ncfsny, 1728)
Новая учительница:новый учительница(Ncfsny, 1948)

красивая и любимая учительница по сольфеджио:красивый и любимый учительница по сольфеджио(Ncfsny, 994)
которая:который(P--fsna, 1040)
учительницы:учительница(Ncfsgy, 1624)
Она:она(P-3fsnn, 1654)
своего:свой(P--msga, 1692)
та:тот(P--fsna, 1861)
педагогический талант:педагогический талант(Ncmsnn, 1918)
той:тот(P--fsga, 2039)

новую хорошую школу:новый хороший школа(Ncfsan, 323)
этой школы:этот школа(Ncfsgn, 570)
новую школу с гуманитарным уклоном:новый школа с гуманитарный уклон(Ncfsan, 801)
новую школу:новый школа(Ncfsan, 2411)
той , продвинутой и почти гуманитарной школки:тот , продвинуть и почти гуманитарный школка(Ncfsgn, 4128)
школу:школа(Ncfsan, 4475)

мать:мать(Ncfsny, 520)
Она:она(P-3fsnn, 526)
мамой:мама(Ncfsiy, 1142)
маме:мама(Ncfsdy, 3529)
маму:мама(Ncfsay, 3800)
мама:мама(Ncfsny, 3899)
тебе:ты(P-2-sdn, 4243)
Мама:мама(Ncfsny, 4339)
Маме:мама(Ncfsdy, 4642)

Мальчик:мальчик(Ncmsny, 17)
он:он(P-3msnn, 58)
мальчика:мальчик(Ncmsgy, 386)
ребенок:ребенок(Ncmsny, 421)
Мальчик:мальчик(Ncmsny, 843)
мальчик:мальчик(Ncmsny, 1089)
мальчик:мальчик(Ncmsny, 1327)
легко возбудимая натура:легко возбудимая натура(Ncfsnn, 1336)
ребенка:ребенок(Ncmsgy, 1681)
Его:его(P-3msan, 1718)
Мальчик:мальчик(Ncmsny, 2122)
Он:он(P-3msnn, 2160)
свою:свой(P--fsaa, 2186)
его:его(P-3msan, 2296)
Мальчик:мальчик(Ncmsny, 2330)
Мальчик:мальчик(Ncmsny, 2508)
Мальчик:мальчик(Ncmsny, 2616)
Он:он(P-3msnn, 2702)
нему:он(P-3msdn, 2761)
младше - классника:молодой - классника(Afcmsnf, 2798)
его:он(P-3msan, 2840)
ты:ты(P-2-snn, 2925)
мальчика:мальчик(Ncmsgy, 2967)
Мальчика:мальчик(Ncmsay, 3192)
ним:он(P-3msin, 3241)
Мальчик:мальчик(Ncmsny, 3348)
него:он(P-3msgn, 3427)
Мальчик:мальчик(Ncmsny, 3495)
он:он(P-3msnn, 3564)
он:он(P-3msnn, 3770)
Мне:я(P-1-sdn, 3807)
Ему:он(P-3msdn, 3860)
ребенок:ребенок(Ncmsny, 4014)
Мальчик:мальчик(Ncmsny, 4217)
Я:я(P-1-snn, 4238)
мне:я(P-1-sdn, 4261)
Я:я(P-1-snn, 4280)
Ты:ты(P-2-snn, 4420)
Ты:ты(P-2-snn, 4446)
мальчик:мальчик(Ncmsny, 4539)
Его:его(P--msga, 4584)

сольфеджио:сольфеджио(Ncnsdn, 1028)
основной предмет:основной предмет(Ncmsan, 1454)
сольфеджио:сольфеджио(Ncnsan, 1476)

Soon + morphology + distance + lexical

For the comparison:

\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.29$ & $63.01$ & $70.22$  & $79.42$ & $48.39$ & $60.14$  & $53.65$ \\

Without DT optimisation:


In [91]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist'))
clf.train(create_clf(min_samples_leaf=0.0001), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
export_graphviz(clf.clf, out_file='soon_morph_dist_lex_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $78.15$ & $62.22$ & $69.28$  & $77.97$ & $47.43$ & $58.98$  & $52.25$ \\

In [89]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist', 'lexical'))
clf.train(create_clf(min_samples_leaf=0.0001), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
export_graphviz(clf.clf, out_file='soon_morph_dist_lex_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $78.17$ & $62.30$ & $69.34$  & $77.96$ & $47.52$ & $59.04$  & $52.37$ \\

In [90]:
for i, feat_importance in sorted(enumerate(clf.clf.feature_importances_), key=lambda f: f[1], reverse=True):
    print clf.feat_names[i], feat_importance


str_match 0.36755115053
rel_pronouns2 0.205247914997
poss_pronouns1 0.0622135520899
pers_poss_pronouns1 0.0562714821312
number-agr 0.0555103197136
dist>2 0.0518017233242
gender-agr 0.0513454447734
deictic_pronouns2 0.0391501649676
deictic_pronouns1 0.0253726685901
sem_class_agreement 0.0220621852686
refl_pronouns2 0.0178411907812
refl_pronouns1 0.0129641315221
nouns>3 0.0116017093975
dist==1 0.00859351240373
modif-fullNP 0.00461397083666
appositive 0.00441165603147
anaphor-is-demonstrative 0.00145214999794
both-proper 0.00139554510939
poss_pronouns2 0.000599527534198
pers_poss_pronouns2 0.0
rel_pronouns1 0.0
is_abbr 0.0

In [88]:
for i, feat_importance in sorted(enumerate(clf.clf.feature_importances_), key=lambda f: f[1], reverse=True):
    print clf.feat_names[i], feat_importance


str_match 0.456049951565
j_pronoun 0.252226553074
i_pronoun 0.165498810985
gender-agr 0.0456248720127
number-agr 0.0394931088139
sem_class_agreement 0.0272672140394
dist==1 0.0138238395528
both-proper 1.56499570026e-05
both_pronouns 0.0
anaphor-is-demonstrative 0.0
appositive 0.0
modif-fullNP 0.0
is_abbr 0.0

In [86]:
for pair in clf.modif_pairs:
    if pair[1]:
        print pair[0], ': ', pair[1], ' — ', pair[2], pair[3], pair[4]


2 :  вагнер  —  Вагнер:вагнер(Npmsny, 1453) Профессор:профессор(Ncmsny, 1461) вагнер
2 :  вагнер  —  Вагнер:вагнер(Npmsny, 2558) профессор:профессор(Ncmsny, 2926) вагнер
2 :  сергеевна  —  Сергеевна:сергеевна(Npfsny, 946) Елена:елена(Npfsny, 1177) сергеевна
1 :  брат сергеева  —  Семья:семья(Ncfsnn, 3685) Сергеева:сергеева(Npfsny, 3698) семья+,+брат+,+сергеева
1 :  сергеева  —  брат:брат(Ncmsny, 3692) Сергеева:сергеева(Npfsny, 3698) брат+,+сергеева
2 :  тихонович татьяна финогеновна  —  Тихонович:тихонович(Npmsny, 424) Иван:иван(Npmsny, 4584) тихонович
2 :  тихонович татьяна финогеновна  —  Финогеновна:финогеновна(Npfsny, 1243) Иван:иван(Npmsny, 4584) финогеновна
2 :  тихонович татьяна финогеновна  —  Тихоновича:тихонович(Npmsay, 1286) Иван:иван(Npmsny, 4584) тихонович
2 :  тихонович татьяна финогеновна  —  Финогеновна:финогеновна(Npfsny, 1923) Иван:иван(Npmsny, 4584) финогеновна
2 :  тихонович татьяна финогеновна  —  Финогеновна:финогеновна(Npfsny, 2000) Иван:иван(Npmsny, 4584) финогеновна
2 :  тихонович татьяна финогеновна  —  Тихоновичу:тихонович(Npmsdy, 2263) Иван:иван(Npmsny, 4584) тихонович
2 :  тихонович татьяна финогеновна  —  Тихонович:тихонович(Npmsny, 2455) Иван:иван(Npmsny, 4584) тихонович
2 :  тихонович татьяна финогеновна  —  Тихоновича:тихонович(Npmsay, 3140) Иван:иван(Npmsny, 4584) тихонович
2 :  тихонович татьяна финогеновна  —  Тихонович:тихонович(Npmsny, 3526) Иван:иван(Npmsny, 4584) тихонович
2 :  тихонович татьяна финогеновна  —  Тихоновича:тихонович(Npmsay, 3804) Иван:иван(Npmsny, 4584) тихонович
2 :  тихонович татьяна финогеновна  —  Тихонович:тихонович(Npmsny, 4401) Иван:иван(Npmsny, 4584) тихонович
2 :  финогеновна  —  Финогеновна:финогеновна(Npfsny, 1243) Татьяна:татьяна(Npfsny, 1915) финогеновна
2 :  финогеновна  —  Финогеновна:финогеновна(Npfsny, 1923) Татьяна:татьяна(Npfsny, 1992) финогеновна
2 :  тихонович  —  Тихонович:тихонович(Npmsny, 40) Иван:иван(Npmsny, 418) тихонович
2 :  тихонович  —  Тихоновича:тихонович(Npmsay, 1286) Ивану:иван(Npmsdy, 2256) тихонович
2 :  тихонович  —  Тихонович:тихонович(Npmsny, 3526) Ивана:иван(Npmsay, 3798) тихонович
2 :  тихонович  —  Тихонович:тихонович(Npmsny, 4401) Иван:иван(Npmsny, 4584) тихонович
2 :  сэннокс  —  Сэннокс:сэннокс(Npmsny, 4692) лорд:лорд(Ncmsny, 4887) сэннокс
2 :  сэннокс  —  Сэннокс:сэннокс(Npmsny, 4805) лорд:лорд(Ncmsny, 4887) сэннокс
2 :  сэннокс  —  Сэннокс:сэннокс(Npmsny, 4692) леди:леди(Ncfsny, 4800) сэннокс
1 :  проводница  —  парень:парень(Ncmsny, 3912) проводница:проводница(Ncfsny, 3922) парень+,+-+проводница
1 :  школа  —  колхоз:колхоз(Ncmsan, 5514) школу:школа(Ncfsan, 5526) колхоз+,+про+школа
2 :  павловна  —  Павловны:павловна(Npfsgy, 2365) Вера:вера(Npfsny, 2399) павловна
2 :  сатина  —  Сатиной:сатина(Npfsgy, 7475) Наташа:наташа(Npfsny, 7974) сатина
2 :  сатина  —  Сатина:сатина(Npfsny, 8682) Наташа:наташа(Npfsny, 9037) сатина
1 :  миссочкой  —  сестрами:сестра(Ncfpiy, 3479) Миссочкой:миссочкой(Npmsiy, 3490) сестра+и+миссочкой
2 :  маремуха  —  Маремуха:маремуха(Npmsny, 1774) Петька:петька(Npmsny, 1874) маремуха
1 :  незабудка роза гогольяновка гоголь  —  глаза:глаз(Ncmpnn, 2860) гогольяновка:гогольяновка(Ncfsnn, 2923) глаз+-+-+незабудка+;+румяный+роза+щека+;+голубой+суконный+платье+,+гогольяновка+,+из+гимназия+гоголь+-+яновского+;+весь+слово+,+весь+движение+-+-+голубой
1 :  роза гогольяновка гоголь  —  незабудки:незабудка(Ncfpnn, 2869) гогольяновка:гогольяновка(Ncfsnn, 2923) незабудка+;+румяный+роза+щека+;+голубой+суконный+платье+,+гогольяновка+,+из+гимназия+гоголь+-+яновского+;+весь+слово+,+весь+движение+-+-+голубой
1 :  гогольяновка гоголь  —  розы:роза(Ncfpnn, 2888) гогольяновка:гогольяновка(Ncfsnn, 2923) румяный+роза+щека+;+голубой+суконный+платье+,+гогольяновка+,+из+гимназия+гоголь+-+яновского+;+весь+слово+,+весь+движение+-+-+голубой
2 :  васильевна  —  Васильевна:васильевна(Npfsny, 205) Марью:марья(Npfsay, 253) васильевна
2 :  васильевна  —  Васильевне:васильевна(Npfsdy, 2072) Марья:марья(Npfsny, 2242) васильевна
1 :  отец  —  Сундучанский:сундучанский(Npmsny, 3926) отец:отец(Ncmsny, 4111) сундучанский+-+отец
1 :  саломирсков  —  барыня:барыня(Ncfsny, 1507) Саломирсков:саломирсков(Ncmsnn, 1516) этот+барыня+-+саломирсков
1 :  барин  —  лошадь:лошадь(Ncfsny, 2315) барин:барин(Ncmsny, 2332) у+мужик+,+конечно+,+лошадь+плохой+,+и+барин
1 :  барин  —  лошадь:лошадь(Ncfsny, 2315) барина:барин(Ncmsay, 4201) у+мужик+,+конечно+,+лошадь+плохой+,+и+барин
1 :  нос  —  иссиза:иссиза(Ncfsnn, 2288) носу:нос(Ncmsdn, 3857) иссиза+-+красный+нос+,+распространяющий+какой+-+то+лаковый+блеск+по+угреватому+лицо+,+открытый+седой+голова+с+волос
2 :  николаевна  —  Николаевны:николаевна(Npfsgy, 4974) Наталья:наталья(Npfsny, 5160) николаевна
2 :  марковна  —  Марковна:марковна(Npfsny, 358) Ида:ида(Npfsny, 443) марковна
2 :  марковна  —  Марковна:марковна(Npfsny, 1081) Ида:ида(Npfsny, 1242) марковна
2 :  марковна  —  Марковна:марковна(Npfsny, 1408) Ида:ида(Npfsny, 1492) марковна
1 :  море  —  решетка:решетка(Ncfsnn, 651) море:море(Ncnsnn, 671) толстый+железный+решетка+,+за+окно+-+море
1 :  хозе мигуэль диац инсургент флибустьер  —  Мария:мария(Npfsny, 309) инсургент:инсургент(Ncmsny, 334) мария+-+хозе+-+мигуэль+-+диац+,+инсургент+и+флибустьер
1 :  гость  —  честь:честь(Ncfsan, 4744) гостя:гость(Ncmsay, 4750) честь+гость
1 :  аргентина  —  условиях:условие(Ncnpln, 320) Аргентине:аргентина(Ncfsln, 349) условие+валютный+кризис+в+аргентина
1 :  кпу  —  ПР:пр(Ncmsdn, 1130) КПУ:кпу(Ncmsdn, 1135) пр+и+кпу
1 :  дочка мама  —  втроём:втроем(Ncmsin, 2340) дочкой:дочка(Ncfsiy, 2351) втроем+—+с+дочка+и+мама+виктор
1 :  дочь мама  —  супруга:супруга(Ncfsny, 2659) дочь:дочь(Ncfsny, 2668) в+настоящий+время+супруга+,+дочь+и+мама+виктор+бута
2 :  бут  —  Бут:бут(Npmsny, 1275) Алла:алла(Npfsny, 1715) бут
2 :  перельман  —  Перельман:перельман(Npmsny, 415) Григорию:григорий(Npmsdy, 661) перельман
1 :  злоупотребление чечня  —  нарушениях:нарушение(Ncnpln, 610) Чечне:чечня(Ncfsln, 642) нарушение+и+злоупотребление+в+чечня
1 :  чечня  —  злоупотреблениях:злоупотребление(Ncnpln, 623) Чечне:чечня(Ncfsln, 642) злоупотребление+в+чечня
1 :  сша ...  —  убийстве:убийство(Ncnsln, 2949) США:сша(Ncmpln, 3073) жестокий+убийство+анна+политковской+,+бесстрашный+журналистка+,+так+и+в+сша+...
2 :  путин  —  Путина:путин(Npmsgy, 176) президент:президент(Ncmsny, 2705) путин
1 :  сирия проведение прекращение предоставление  —  создании:создание(Ncnsln, 1371) Сирии:сирия(Ncfsln, 1382) создание+в+сирия+плюралистической+многопартийной+система+,+проведение+там+честный+выборы+под+наблюдение+иностранный+представитель+,+прекращение+насилие+и+предоставление+свобода+сми
1 :  сирия  —  событиях:событие(Ncnpln, 1620) Сирии:сирия(Ncfsln, 1631) событие+в+сирия
1 :  австралия дэвид хиллмен  —  Председатель:председатель(Ncmsny, 744) Хиллмен:хиллмен(Npmsny, 937) председатель+sleep+health+foundation+(+австралия+)+дэвид+хиллмен
1 :  дэвид хиллмен  —  Австралия:австралия(Ncfsnn, 782) Хиллмен:хиллмен(Npmsny, 937) австралия+)+дэвид+хиллмен
1 :  хиллмен  —  Дэвид:дэвид(Npmsny, 793) Хиллмен:хиллмен(Npmsny, 937) дэвид+хиллмен
1 :  животное  —  рыбы:рыба(Ncfpny, 1978) животных:животное(Ncnpgy, 2881) рыба+и+морской+животное
1 :  женька скоромахов  —  ихтиолог:ихтиолог(Ncmsny, 1627) Женька:женька(Npcsny, 1779) мой+знакомый+ихтиолог+женька+скоромахов
1 :  let армия группировка  —  Тайба:тайба(Ncfsnn, 2688) LET:let(Ncnpnn, 2695) тайба+(+let+,+армия+за+чистота+)+,+воинственный+группировка+в+пакистан
2 :  газа  —  Газе:газа(Ncfsln, 4381) сектор:сектор(Ncmsnn, 4883) газа
2 :  газа  —  Газы:газа(Ncfsgn, 4657) сектор:сектор(Ncmsnn, 4883) газа
1 :  хамасом  —  Каидой:каидой(Ncfsin, 2865) Хамасом:хамасом(Ncmsin, 2875) каидой+,+и+хамасом
1 :  хамасом  —  Израилем:израиль(Ncmsin, 3641) Хамасом:хамасом(Ncmsin, 3652) израиль+и+хамасом
1 :  министр владимир путин  —  премьер:премьер(Ncmsny, 29) Путина:путин(Npmsgy, 482) российский+премьер+-+министр+владимир+путин
1 :  владимир путин  —  министр:министр(Ncmsny, 37) Путина:путин(Npmsgy, 482) министр+владимир+путин
1 :  путин  —  Владимир:владимир(Npmsny, 45) Путина:путин(Npmsgy, 482) владимир+путин
1 :  вто  —  переговоры:переговоры(Ncmpan, 661) ВТО:вто(Ncnsan, 695) успешный+переговоры+по+вступление+россия+в+вто+с+первый+заместитель+путин+игорь+шувалов+,+министр+финансы+алексей+кудрин+и+министр+экономический+развитие+эльвира+набиуллиной
1 :  вто  —  потребности:потребность(Ncfpan, 2375) ВТО:вто(Ncnsan, 2389) потребность+в+вто
1 :  вто  —  курс:курс(Ncmsan, 3738) ВТО:вто(Ncnsan, 3769) курс+по+вопрос+о+вступление+в+вто
1 :  вто  —  прорыв:прорыв(Ncmsan, 5685) ВТО:вто(Ncnsan, 5728) окончательный+прорыв+в+переговоры+о+вступление+россия+в+вто
1 :  вто  —  позицию:позиция(Ncfsan, 6222) ВТО:вто(Ncnsan, 6246) свой+позиция+по+вступление+в+вто
1 :  вто  —  переговоры:переговоры(Ncmpan, 6283) ВТО:вто(Ncnsan, 6316) переговоры+о+вступление+россия+в+вто+после+война+в+грузия+в+август+@card@+год+только+для+то+,+чтобы
1 :  казахстан  —  Белоруссией:белоруссия(Ncfsin, 1905) Казахстаном:казахстан(Ncmsin, 1919) белоруссия+и+казахстан
1 :  грузия  —  наступление:наступление(Ncnsan, 4913) Грузию:грузия(Ncfsan, 4928) свой+пропагандистский+наступление+на+грузия
1 :  грузия август  —  вступлении:вступление(Ncnsln, 6296) Грузии:грузия(Ncfsln, 6334) вступление+россия+в+вто+после+война+в+грузия+в+август+@card@+год+только+для+то+,+чтобы
1 :  абхазия  —  Грузии:грузия(Ncfsln, 4994) Абхазии:абхазия(Ncfsln, 5003) грузия+и+абхазия
2 :  протокол  —  Протокол:протокол(Ncmsnn, 211) Монреальский:монреальский(Afpmsnf, 1079) протокол
1 :  израиль  —  Палестиной:палестина(Ncfsin, 797) Израилем:израиль(Ncmsin, 810) палестина+и+израиль
1 :  министр тони блэр  —  премьер:премьер(Ncmsny, 3308) Блэр:блэр(Npmsny, 4672) бывший+премьер+-+министр+великобритания+тони+блэр
1 :  тони блэр  —  министр:министр(Ncmsny, 3316) Блэр:блэр(Npmsny, 4672) за+последний+два+год+министр+великобритания+тони+блэр
1 :  блэр  —  Тони:тони(Npmsny, 3339) Блэр:блэр(Npmsny, 4672) тони+блэр
1 :  бенджамином нетаньяху  —  Ликуд:ликуд(Npmsny, 976) Нетаньяху:нетаньяху(Npcsdy, 4788) ликуд+бенджамином+нетаньяху
1 :  нетаньяху  —  Бенджамином:бенджамином(Npmsny, 982) Нетаньяху:нетаньяху(Npcsdy, 4788) бенджамином+нетаньяху
1 :  санников  —  Андрей:андрей(Npmsny, 281) Санников:санников(Npmsny, 767) андрей+санников
1 :  iston portes отель  —  palace:palace(Ncmsnn, 4142) отели:отель(Ncmpnn, 4175) palace+,+iston+,+portes+beach+,+этот+отель+по+ландшафтному+дизайн+,+да+и
1 :  portes отель  —  Iston:iston(Ncfsnn, 4150) отели:отель(Ncmpnn, 4175) iston+,+portes+beach+,+этот+отель+по+ландшафтному+дизайн+,+да+и
1 :  отель  —  Portes:portes(Ncmpnn, 4157) отели:отель(Ncmpnn, 4175) portes+beach+,+этот+отель+по+ландшафтному+дизайн+,+да+и
1 :  меркурий  —  Луна:луна(Ncfsnn, 3688) Меркурий:меркурий(Ncmsnn, 3695) луна+и+меркурий+для+этот+тело
1 :  луна  —  отношении:отношение(Ncnsln, 7758) Луне:луна(Ncfsln, 7789) отношение+возможность+жизнь+на+луна
1 :  марс  —  планета:планета(Ncfsnn, 10784) Марс:марс(Ncmsnn, 10792) планета+марс
1 :  земля  —  Солнцем:солнце(Ncnsin, 7954) Землей:земля(Ncfsin, 7964) солнце+и+земля
1 :  ф.л морошкин  —  профессор:профессор(Ncmsny, 1418) Морошкин:морошкин(Npmsny, 2369) профессор+московский+университет+ф.л+.+морошкин
2 :  ольденбург  —  Ольденбург:ольденбург(Ncmsny, 12316) С.Ф:с.ф(Npmsny, 12999) ольденбург
2 :  поэт тагор  —  поэты:поэт(Ncmpny, 14857) писатель:писатель(Ncmsny, 15545) поэт
1 :  ссср  —  Индией:индия(Ncfsin, 15822) СССР:ссср(Ncmsin, 15831) индия+и+ссср
1 :  индия  —  Европе:европа(Ncfsln, 12444) Индии:индия(Ncfsln, 12453) европа+и+индия
1 :  байер  —  академик:академик(Ncmsny, 2387) Байера:байер(Ncmsgn, 2460) русский+академик+байер
1 :  москва  —  Толстой:толстой(Npmsny, 14912) Москве:москва(Ncfsln, 15625) толстой+и+москва
1 :  ленинград  —  выставке:выставка(Ncfsln, 10518) Ленинграде:ленинград(Ncmsln, 10535) постоянный+выставка+музей+в+ленинград
1 :  ленинград  —  Москве:москва(Ncfsln, 15625) Ленинграде:ленинград(Ncmsln, 15634) москва+и+ленинград
1 :  гринвуд  —  Том:том(Npmsny, 5611) Гринвуд:гринвуд(Npmsny, 5827) заезжий+том+гринвуд
1 :  эстония  —  Республике:республика(Ncfsln, 3609) Эстонии:эстония(Ncfsln, 3622) латвийский+республика+и+эстония
1 :  эстония  —  Латвии:латвия(Ncfsln, 5465) Эстонии:эстония(Ncfsln, 5474) латвия+и+эстония
1 :  счет россия продажа  —  спасение:спасение(Ncnsan, 3639) Россию:россия(Ncfsan, 3667) спасение+за+счет+экспорт+в+россия+или+продажа+актив+русский+инвестор
1 :  губернатор чиркунов  —  Олег:олег(Npmsny, 971) Чиркунов:чиркунов(Npmsny, 1140) губернатор+пермский+край+олег+чиркунов
1 :  чиркунов  —  Олег:олег(Npmsny, 971) Чиркунов:чиркунов(Npmsny, 1140) олег+чиркунов
1 :  аеб дэвид томас  —  председатель:председатель(Ncmsny, 998) АЕБ:аеб(Ncmsnn, 1039) председатель+комитет+автопроизводитель+аеб+дэвид+томас
1 :  автомобиль  —  продажу:продажа(Ncfsan, 6861) автомобиль:автомобиль(Ncmsan, 6869) продажа+автомобиль
1 :  луис борхес павич  —  Хорхе:хорхе(Npmsny, 4227) Павич:павич(Npmsny, 4246) и+хорхе+луис+борхес+,+павич
1 :  борхес павич  —  Луис:луис(Npmsny, 4233) Павич:павич(Npmsny, 4246) луис+борхес+,+павич
1 :  павич  —  Борхес:борхес(Npmsny, 4238) Павич:павич(Npmsny, 4246) борхес+,+павич
2 :  кортасар  —  Кортасар:кортасар(Npmsny, 3740) Хулио:хулио(Npmsny, 4038) кортасар
2 :  луис борхес  —  Борхес:борхес(Npmsny, 3751) Хорхе:хорхе(Npmsny, 4227) борхес
2 :  данхэмом  —  Данхэмом:данхэмом(Ncmsin, 304) Эдвардом:эдвард(Npmsiy, 3398) данхэмом
2 :  кольцо  —  кольцо:кольцо(Ncnsnn, 9791) ε:ε(Ncnsnn, 9841) кольцо
1 :  кольцо  —  ε:ε(Ncnsnn, 9841) кольце:кольцо(Ncnsln, 10004) кольцо+ε
1 :  офелия  —  Корделия:корделия(Ncfsnn, 10845) Офелия:офелия(Npfsny, 10869) корделия+(+внутренний+)+и+офелия+(+внешний
1 :  птица  —  гагар:гагар(Ncmsnn, 923) птицы:птица(Ncfpny, 934) гагар+:+этот+птица
1 :  гаги  —  Голос:голос(Ncmsnn, 3296) Гаги:гаги(Ncmpnn, 3302) голос+гаги
1 :  гага  —  История:история(Ncfsnn, 13884) гаги:гага(Ncfpny, 13908) история+взаимоотношение+гага+и+человек
1 :  конференция  —  конкурс:конкурс(Ncmsnn, 58) конференция:конференция(Ncfsnn, 272) конкурс+-+конференция
1 :  ресурс  —  Grockit:grockit(Ncmsnn, 2376) ресурса:ресурс(Ncmsgn, 2540) онлайновый+ресурс+grockit
2 :  ленфильм  —  Ленфильм:ленфильм(Ncmsnn, 4286) общество:общество(Ncnsnn, 4316) ленфильм
1 :  система  —  система:система(Ncfsnn, 986) системы:система(Ncfsgn, 1283) французский+система+голосование+в+два+тур+или+российский+пропорциональный+система
1 :  лейборист  —  консерваторы:консерватор(Ncmpny, 2940) лейбористы:лейборист(Ncmpny, 2958) »+(+консерватор+плюс+лейборист+)+,+подобный+тот
1 :  интернет  —  численность:численность(Ncfsnn, 793) интернета:интернет(Ncmsgn, 1398) общая+численность+активный+интернет+-+аудитория
1 :  интернет  —  рост:рост(Ncmsnn, 895) интернета:интернет(Ncmsgn, 1398) среднеквартальный+рост+интернет+-+аудитория+за+@card@+год+в+целое
1 :  интернет  —  темпы:темп(Ncmpnn, 1046) интернета:интернет(Ncmsgn, 1398) темп+рост+аудитория+интернет+-+пользователь
1 :  интернет  —  мониторинг:мониторинг(Ncmsnn, 1245) интернета:интернет(Ncmsgn, 1398) постоянный+мониторинг+распространение+интернет+в+рамка+исследование+«+интернет+в+россия
1 :  интернет  —  доля:доля(Ncfsnn, 2198) интернета:интернет(Ncmsgn, 2355) доля+интернет+-+пользователь+в+возрастной+группа
1 :  интернет  —  численность:численность(Ncfsnn, 2632) интернета:интернет(Ncmsgn, 2847) численность+интернет+-+аудитория+в+этот+возрастной+группа
1 :  россия  —  рамках:рамка(Ncfpln, 1284) России:россия(Ncfsln, 1317) рамка+исследование+«+интернет+в+россия
1 :  gfdl  —  Documentation:documentation(Ncmsnn, 421) GFDL:gfdl(Ncmsnn, 444) documentation+license+(+gfdl
1 :  gfdl  —  Documentation:documentation(Ncmsnn, 2253) GFDL:gfdl(Ncmsnn, 2276) documentation+license+(+gfdl
2 :  джаз  —  джаз:джаз(Ncmsnn, 1830) фри:фри(Afpfsif, 1918) джаз
2 :  джаз  —  джаза:джаз(Ncmsgn, 9522) фри:фри(Afpmsnf, 9875) джаз
1 :  пианист тэйлор  —  Сесил:сесил(Npmsny, 540) Тэйлора:тэйлор(Npmsgy, 698) пианист+сесил+тэйлор
1 :  тэйлор  —  Сесил:сесил(Npmsny, 540) Тэйлора:тэйлор(Npmsgy, 698) сесил+тэйлор
2 :  колтрейн  —  Колтрейна:колтрейн(Npmsgy, 631) Джон:джон(Npmsny, 2435) колтрейн
2 :  колтрейн  —  Колтрейна:колтрейн(Npmsgy, 8021) Джон:джон(Npmsny, 10137) колтрейн
1 :  эйлер  —  Альберт:альберт(Npmsny, 1994) Эйлера:эйлер(Npmsgy, 8083) альберт+эйлер
1 :  диксон  —  Билл:билл(Npmsny, 7278) Диксон:диксон(Npmsny, 7561) билл+диксон
1 :  черри  —  Дон:дон(Npmsny, 773) Черри:черри(Npmsny, 8069) дон+черри
1 :  черри  —  Шеппа:шеппа(Npmsny, 8055) Черри:черри(Npmsny, 8069) шеппа+(+@card@+)+,+черри+(+@card@+)+,+эйлер+(+@card@
2 :  черри  —  Черри:черри(Npmsny, 8069) Дон:дон(Npmsny, 10152) черри
2 :  сэндерс  —  Сэндерс:сэндерс(Npmsny, 790) Фэроу:фэроу(Npmsny, 2450) сэндерс
2 :  брэкстон  —  Брэкстон:брэкстон(Npmsny, 2496) Энтони:энтони(Npmsny, 5414) брэкстон
2 :  брэкстон  —  Брэкстон:брэкстон(Npmsny, 5421) Энтони:энтони(Npmsny, 8948) брэкстон
2 :  брэкстон  —  Брэкстон:брэкстон(Npmsny, 8955) Энтони:энтони(Npmsny, 11391) брэкстон
2 :  брэкстон  —  Брэкстон:брэкстон(Npmsny, 11398) Энтони:энтони(Npmsny, 15479) брэкстон
1 :  абрамс основатель энтони брэкстон  —  Ричард:ричард(Npmsny, 8920) основатель:основатель(Ncmsny, 8935) ричард+абрамс+(+основатель+)+,+энтони+брэкстон
1 :  основатель энтони брэкстон  —  Абрамс:абрамс(Npmsny, 8927) основатель:основатель(Ncmsny, 8935) абрамс+(+основатель+)+,+энтони+брэкстон
2 :  холланд  —  Холланда:холланд(Npmsay, 10979) Дэйв:дэйв(Npmsny, 11408) холланд
2 :  шоу  —  шоу:шоу(Ncnsnn, 723) ток:ток(Ncmsnn, 3866) шоу
1 :  гордон  —  Александр:александр(Npmsny, 3153) Гордон:гордон(Npmsnn, 4441) александр+гордон
2 :  гордон  —  Гордон:гордон(Npmsnn, 4441) Александр:александр(Npmsny, 4716) гордон
1 :  гордон  —  Александр:александр(Npmsny, 4716) Гордона:гордон(Npmsgy, 4843) александр+гордон
1 :  гордон  —  Александр:александр(Ncmsnn, 5018) Гордон:гордон(Npmsny, 5207) александр+гордон
1 :  собчак  —  поцелуями:поцелуй(Ncmpin, 1518) Собчак:собчак(Npmsiy, 1530) светский+поцелуй+с+собчак+и+канделаки
1 :  канделаки собчак  —  наряды:наряд(Ncmpnn, 5971) Собчак:собчак(Npmsny, 5990) наряд+канделаки+и+собчак
2 :  канделаки  —  Канделаки:канделаки(Ncmpny, 3629) Тина:тина(Ncmsny, 4747) канделаки
1 :  канделаки собчак  —  наряды:наряд(Ncmpnn, 5971) Канделаки:канделаки(Npmsny, 5978) наряд+канделаки+и+собчак
1 :  акция  —  День:день(Ncmsnn, 121) акции:акция(Ncfsgn, 272) очередной+несанкционированная+акция+протест+«+день+гнев+»
1 :  дарвин  —  Поэтому:поэтому(Ncmsny, 1653) Дарвин:дарвин(Npmsny, 1661) поэтому+дарвин
1 :  француз  —  англичане:англичанин(Ncmpny, 1986) французы:француз(Ncmpny, 2000) англичанин+или+француз
1 :  пугачёва  —  Алла:алла(Npfsny, 2307) Пугачевой:пугачёва(Npfsgy, 2671) алла+пугачёва
2 :  пугачёва  —  Пугачевой:пугачёва(Npfsgy, 2671) Алла:алла(Npfsny, 4110) пугачёва
2 :  пугачёва  —  Пугачеву:пугачёва(Npfsay, 5371) Аллой:алла(Npfsiy, 5523) пугачёва
1 :  пугачёва  —  Алла:алла(Npfsny, 7662) Пугачевой:пугачёва(Npfsgy, 7911) алла+пугачёва
1 :  грузин  —  абхазы:абхазы(Ncmpnn, 3267) грузины:грузин(Ncmpny, 3277) не+абхазы+,+а+грузин
1 :  хант  —  С:с(Npmsny, 3039) Хант:хант(Npmsny, 3170) с+.+хант
1 :  скрипач граппелли  —  Стефан:стефан(Npmsny, 13187) Граппелли:граппелли(Ncmpny, 13403) джазовый+скрипач+стефан+граппелли
1 :  граппелли  —  Стефан:стефан(Npmsny, 13187) Граппелли:граппелли(Ncmpny, 13403) стефан+граппелли
1 :  скрипач менухин  —  Иегуди:иегуди(Npmsny, 13234) Менухин:менухин(Ncmsnn, 13363) скрипач+классический+музыка+иегуди+менухин
1 :  менухин  —  Иегуди:иегуди(Npmsny, 13234) Менухин:менухин(Ncmsnn, 13363) иегуди+менухин
2 :  друг коллега харпер  —  Харпер:харпер(Npmsny, 1274) Рой:рой(Npmsny, 14640) харпер
1 :  друг коллега харпер  —  Рой:рой(Npmsny, 14640) Харпер:харпер(Ncmsny, 14777) друг+и+коллега+pink+floyd+рой+харпер
1 :  харпер  —  Рой:рой(Npmsny, 14640) Харпер:харпер(Ncmsny, 14777) рой+харпер
2 :  торгерсон  —  Торгерсон:торгерсон(Npmsny, 10539) Сторм:сторм(Ncmsnn, 15487) торгерсон
1 :  флойд  —  Пинк:пинк(Ncfsnn, 22035) Флойда:флойд(Npmsgy, 24488) пинк+флойд
2 :  роуд  —  Роуд:роуд(Ncmsln, 2951) студии:студия(Ncfsln, 5774) роуд
2 :  роуд  —  Роуд:роуд(Ncmsln, 5786) студии:студия(Ncfsln, 11433) роуд
1 :  барретта  —  Сида:сида(Npmsny, 8276) Барретта:барретта(Npmsgy, 8879) бывший+участник+pink+floyd+сида+барретта
1 :  барретта  —  Сида:сида(Npmsny, 8276) Барретта:барретта(Npmsgy, 8879) pink+floyd+сида+барретта
2 :  райт  —  Райт:райт(Npmsny, 1914) Ричард:ричард(Npmsny, 6470) райт
1 :  райт  —  Ричард:ричард(Npmsny, 6470) Райт:райт(Npmsny, 10120) ричард+райт
2 :  уотерс  —  Уотерс:уотерс(Npmsny, 6046) Роджер:роджер(Npmsny, 6534) уотерс
1 :  уотерс  —  Роджер:роджер(Npmsny, 6534) Уотерс:уотерс(Npmsny, 7790) роджер+уотерс
2 :  барабанщик мэйсон  —  Мэйсон:мэйсон(Npmsny, 6055) Ник:ник(Npmsny, 6591) мэйсон
1 :  гилмор  —  Дэвид:дэвид(Npmsny, 7732) Гилмор:гилмор(Npmsnn, 8291) дэвид+гилмор
2 :  гилмор  —  Гилмор:гилмор(Npmsny, 14904) Дэвид:дэвид(Npmsny, 24595) гилмор
1 :  президент обама  —  Барак:барак(Ncmsnn, 710) Обама:обама(Npmsny, 840) президент+сша+барак+обама
1 :  колчак  —  Стоящий:стоящий(Ncmsny, 5065) Колчак:колчак(Npmsny, 5085) стоящий+на+пригорок+колчак
2 :  крамской  —  Крамской:крамской(Npmsny, 943) Григорий:григорий(Npmsny, 4595) крамской
1 :  компания  —  Нефтестрой:нефтестрой(Ncmsnn, 3824) компания:компания(Ncfsnn, 3882) компания+ооо+«+нефтестрой+»
1 :  анкарой  —  Киевом:киев(Ncmsin, 628) Анкарой:анкарой(Ncfsin, 637) киев+и+анкарой
1 :  турция  —  Украина:украина(Ncfsnn, 4113) Турция:турция(Ncfsnn, 4123) украина+и+турция+в+вопрос+евроинтеграции
2 :  эрдоган  —  Эрдоган:эрдоган(Npmsny, 1007) Реджеп:реджеп(Npmsny, 1224) эрдоган
2 :  министр эрдоганом  —  министра:министр(Ncmsgy, 1432) Реджепом:реджепом(Ncmsin, 1892) министр
2 :  президент януковичем  —  Януковичем:януковичем(Npmsiy, 1942) Виктором:виктор(Npmsiy, 2347) януковичем
1 :  крым  —  строительстве:строительство(Ncnsln, 2737) Крыму:крым(Ncmsln, 2766) строительство+университет+в+крым+для+наш+народ
2 :  джемилев  —  Джемилев:джемилев(Npmsny, 2092) Мустафа:мустафа(Npmsny, 2379) джемилев
2 :  джемилев  —  Джемилев:джемилев(Npmsny, 3025) Мустафа:мустафа(Npmsny, 3492) джемилев
2 :  джемилев  —  Джемилев:джемилев(Npmsny, 3500) Мустафа:мустафа(Npmsny, 4095) джемилев
2 :  джемилев  —  Джемилев:джемилев(Npmsny, 4103) Мустафа:мустафа(Npmsny, 4535) джемилев
2 :  джемилев  —  Джемилев:джемилев(Npmsny, 4543) Мустафа:мустафа(Npmsny, 5085) джемилев
1 :  молдова  —  условиях:условие(Ncnpln, 5894) Молдове:молдова(Ncfsln, 5963) условие+политический+нестабильность+и+дезинтеграционных+процесс+в+молдова
1 :  глава калашников  —  Сергей:сергей(Npmsny, 181) Калашников:калашников(Npmsny, 879) глава+комитет+нижний+палата+по+охрана+здоровье+сергей+калашников
1 :  калашников лдпр  —  Сергей:сергей(Npmsny, 181) Калашников:калашников(Npmsny, 879) сергей+калашников+(+лдпр
1 :  лютер кинг  —  Мартин:мартин(Npmsny, 528) Кинга:кинг(Npmsgy, 702) мартин+лютер+кинг
1 :  кинг  —  Лютер:лютер(Npmsny, 535) Кинга:кинг(Npmsgy, 702) лютер+кинг
1 :  агафонова  —  попытка:попытка(Ncfsnn, 907) Агафонова:агафонова(Npfsny, 915) попытка+агафонова
1 :  мирзаев  —  спортсмен:спортсмен(Ncmsny, 1352) Мирзаев:мирзаев(Npmsny, 1362) спортсмен+мирзаев
1 :  дотком  —  Ким:ким(Afpmsif, 1592) Дотком:дотком(R-----, 1688) ким+дотком
1 :  америка  —  вопрос:вопрос(Ncmsan, 1904) Америку:америка(Ncfsan, 1941) вопрос+объем+экстрадиция+ким+доткома+в+америка
1 :  кличко жена дитя  —  члены:член(Ncmpny, 644) Кличко:кличко(Ncnsnn, 656) член+семья+кличко+—+жена+и+дитя
1 :  кличко год  —  Доход:доход(Ncmsnn, 678) Кличко:кличко(Ncnsnn, 684) доход+кличко+в+@card@+год
2 :  сон  —  Сон:сон(Ncmsnn, 769) Чан:чан(Npmsny, 1036) сон
2 :  гын нёль  —  Нёль:нёль(Ncfsnn, 284) О:о(Npmsny, 278) нёль
2 :  гык  —  Гык:гык(Ncmsny, 573) О:о(Npmsny, 571) гык
2 :  гык  —  Гык:гык(Ncmsny, 1094) О:о(Npmsny, 571) гык
2 :  гык  —  Гык:гык(Ncmsny, 573) О:о(Ncmsnn, 1092) гык
2 :  гык  —  Гык:гык(Ncmsny, 1402) О:о(Npmsny, 1400) гык
2 :  гык  —  Гык:гык(Ncmsny, 1479) О:о(Npmsny, 1400) гык
2 :  гык  —  Гык:гык(Ncmsny, 1770) О:о(Npmsny, 1818) гык
1 :  степановна  —  Вера:вера(Npfsny, 1145) Степановна:степановна(Npfsny, 1345) вера+степановна
2 :  степановна  —  Степановны:степановна(Npfsgy, 2257) Вера:вера(Npfsny, 2486) степановна
1 :  степановна  —  Вера:вера(Npfsny, 2486) Степановны:степановна(Npfsgy, 2755) вера+степановна
1 :  дед  —  бабе:баба(Ncfsdy, 1714) деду:дед(Ncmsdy, 1722) баба+и+дед
1 :  квартира  —  свою:свой(P--fsaa, 4010) квартиру:квартира(Ncfsan, 4809) свой+квартира
2 :  петербург  —  Петербурге:петербург(Ncmsln, 1181) Санкт:санкт(Ncmsnn, 2241) петербург
1 :  невский  —  переходе:переход(Ncmsln, 774) Невском:невский(Npmsly, 786) переход+на+невский
1 :  степан  —  кот:кот(Ncmsny, 161) Степан:степан(Npmsny, 344) черный+кот+степан
1 :  степан  —  кот:кот(Ncmsny, 161) Степану:степан(Npmsdy, 592) черный+кот+степан
1 :  фунтик  —  такса:такса(Ncfsnn, 98) Фунтик:фунтик(Npmsny, 2051) кривоногий+такса+фунтик
1 :  самоучка дегтяренко  —  архитектор:архитектор(Ncmsny, 574) Дегтяренко:дегтяренко(Npmsny, 1480) архитектор+-+самоучка+дегтяренко
1 :  чмутов  —  Валя:валя(Npmsny, 4046) Чмутов:чмутов(Npmsny, 4082) валя+чмутов
1 :  китаев  —  матрос:матрос(Ncmsny, 2513) Китаев:китаев(Npmsny, 6719) беглый+матрос+китаев
1 :  кребс  —  Брайан:брайан(Npmsny, 1949) Кребс:кребс(Npmsny, 2254) брайан+кребс
1 :  дело александр данилюк  —  Лидер:лидер(Ncmsny, 0) Данилюк:данилюк(Npfsny, 626) лидер+украинский+оппозиционный+движение+«+спiльна+справа+»+(+«+общий+дело+»+)+александр+данилюк
1 :  путин  —  Владимиром:владимир(Npmsiy, 233) Путина:путин(Npmsgy, 291) владимир+путин
1 :  владимир путин  —  Президент:президент(Ncmsny, 0) Путина:путин(Npmsgy, 291) президент+россия+владимир+путин
1 :  тильман цюльх  —  представитель:представитель(Ncmsny, 1495) Цюльх:цюльх(Npmsny, 1943) представитель+правозащитник+тильман+цюльх
1 :  грузия  —  Украина:украина(Ncfsnn, 3913) Грузия:грузия(Ncfsnn, 3923) украина+и+грузия
1 :  обама  —  Барак:барак(Ncmsnn, 914) Обама:обама(Ncfsnn, 1235) барак+обама
1 :  президент  —  Обама:обама(Ncfsnn, 1813) Президент:президент(Ncmsny, 1973) президент+обама
1 :  президент  —  Обама:обама(Ncfsnn, 1813) президент:президент(Ncmsny, 2253) президент+обама
1 :  юрий любимов  —  основатель:основатель(Ncmsny, 22) Любимов:любимов(Npmsny, 1680) основатель+театр+на+таганка+@card@+-+летний+юрий+любимов
1 :  эрик шмидт  —  директор:директор(Ncmsny, 1596) Шмидт:шмидт(Npmsny, 1731) генеральный+директор+компания+эрик+шмидт
1 :  эрик шмидт  —  Глава:глава(Ncfsnn, 0) Шмидт:шмидт(Npmsny, 1731) глава+google+эрик+шмидт
1 :  афганистан  —  Пакистане:пакистан(Ncmsln, 4946) Афганистане:афганистан(Ncmsln, 4958) пакистан+и+афганистан
1 :  барак обама  —  президент:президент(Ncmsny, 26) Обама:обама(Npmsny, 292) американский+президент+барак+обама
1 :  владимир воронин  —  Президент:президент(Ncmsny, 1072) Воронин:воронин(Npmsny, 1178) президент+владимир+воронин
1 :  погреб  —  вход:вход(Ncmsan, 598) погреб:погреб(Ncmsan, 605) вход+в+погреб
1 :  погреб  —  вход:вход(Ncmsan, 598) погребом:погреб(Ncmsin, 1238) вход+в+погреб
1 :  роман  —  Заговор:заговор(Ncmsnn, 902) романе:роман(Ncmsln, 1817) роман+«+заговор+бумага+»
1 :  убийца  —  Этичный:этичный(Afpmsnf, 3959) убийца:убийца(Nccsny, 4954) «+этичный+убийца+»
1 :  кин  —  Милфорд:милфорд(Npmsny, 5895) Кина:кин(Npmsgy, 6008) милфорд+кин
1 :  фигура  —  разменной:разменной(Afpfsif, 3901) фигура:фигура(Ncfsnn, 6352) разменной+фигура+в+чужой+игра
2 :  лисс  —  Лисс:лисс(Npmsny, 5311) Дэвид:дэвид(Npmsny, 7262) лисс
2 :  обама  —  Обама:обама(Ncfsnn, 1078) Барак:барак(Ncmsnn, 1401) обама
1 :  обама  —  Барак:барак(Ncmsnn, 1571) Обама:обама(Npmsny, 2244) барак+обама
2 :  обама  —  Обама:обама(Npmsny, 2244) Барак:барак(Ncmsnn, 2682) обама
1 :  басби  —  Мэтт:мэтт(Npmsny, 4285) Басби:басби(Npmsny, 4314) мэтт+басби
1 :  басби  —  Мэтт:мэтт(Npmsny, 4285) Басби:басби(Npmsny, 4651) мэтт+басби
2 :  басби  —  Басби:басби(Npmsny, 4651) команда:команда(Ncfsnn, 4857) басби
1 :  басби  —  команда:команда(Ncfsnn, 4857) Басби:басби(Npfsny, 4865) команда+басби
2 :  басби  —  Басби:басби(Npmsny, 5084) Мэтт:мэтт(Npmsny, 5795) басби
1 :  басби  —  Мэтт:мэтт(Npmsny, 5795) Басби:басби(Npmsny, 6365) мэтт+басби
1 :  басби  —  команда:команда(Ncfsnn, 6623) Басби:басби(Npfsny, 6631) команда+басби
2 :  басби  —  Басби:басби(Npfsny, 6631) Мэтт:мэтт(Npmsny, 7143) басби
1 :  басби  —  Мэтт:мэтт(Npmsny, 7143) Басби:басби(Npmsny, 7491) мэтт+басби
1 :  дохерти  —  Томми:томми(Npmsny, 8075) Дохерти:дохерти(Npmsny, 8772) томми+дохерти
1 :  дохерти  —  Томми:томми(Npmsny, 8075) Дохерти:дохерти(Npmsgy, 8887) томми+дохерти
2 :  басби  —  Басби:басби(Npmsny, 7491) Мэтт:мэтт(Npmsny, 17105) басби
1 :  день  —  Международный:международный(Afpmsaf, 1731) день:день(Ncmsan, 1840) международный+женский+день+8+март
2 :  день  —  день:день(Ncmsan, 3627) Женский:женский(Afpmsaf, 4753) этот+день
1 :  спутник  —  Giove:giove(Ncmsnn, 229) спутник:спутник(Ncmsnn, 428) спутник+giove+-+a
2 :  спутник  —  спутник:спутник(Ncmsnn, 428) Giove:giove(Ncmsnn, 531) спутник
1 :  иерушалми  —  Шломо:шломо(Npmsny, 1011) Иерушалми:иерушалми(Npmsny, 1486) шломо+иерушалми
1 :  президент яр’адуа  —  Умару:умару(Npmsny, 2916) Яр’Адуа:яр’адуа(Npmsny, 3422) президент+нигерия+умару+яр’адуа
1 :  президент гбагбо  —  Лоран:лоран(Npmsny, 5931) Гбагбо:гбагбо(R-----, 6671) президент+лоран+гбагбо
1 :  шотландцу батлеру  —  Джерарду:джерарду(Npmsdy, 319) Батлеру:батлеру(Npmsdy, 564) шотландцу+джерарду+батлеру
1 :  батлером  —  Джерардом:джерардом(Npmsiy, 157) Батлером:батлером(Npmsiy, 4333) джерардом+батлером
1 :  грендель  —  Беовульф:беовульф(Ncmsny, 4118) Грендель:грендель(Npmsny, 4666) беовульф+и+грендель
1 :  батлер  —  Нила:нила(Npfsny, 5911) Батлер:батлер(Npmsny, 5918) нила+(+батлер+)+и+эбби
1 :  ровер  —  Алекс:алекс(Npmsny, 7241) Ровер:ровер(Ncmsnn, 7431) алекс+ровер
1 :  тренер бавария гвардиола  —  Хосеп:хосеп(Ncmsnn, 55) Гвардиола:гвардиола(Ncfsnn, 920) главный+тренер+мюнхенский+футбольный+клуб+«+бавария+»+хосеп+гвардиола
1 :  тренер бавария гвардиола  —  Хосеп:хосеп(Ncmsnn, 55) тренера:тренер(Ncmsgy, 1238) главный+тренер+мюнхенский+футбольный+клуб+«+бавария+»+хосеп+гвардиола
2 :  албарн  —  Албарн:албарн(Npmsny, 1180) Деймон:деймон(Npmsny, 1246) албарн
1 :  секретарь вконтакте лобушкин  —  Георгий:георгий(Npmsny, 205) Лобушкин:лобушкин(Npmsny, 288) пресс+-+секретарь+«+вконтакте+»+георгий+лобушкин
1 :  владелец усманов  —  Алишер:алишер(Npmsny, 2339) Усманов:усманов(Npmsny, 2369) владелец+mail.ru+group+алишер+усманов
1 :  владелец усманов  —  Алишер:алишер(Npmsny, 2339) Усманов:усманов(Npmsny, 3006) владелец+mail.ru+group+алишер+усманов
1 :  дуровым  —  Павлом:павел(Npmsiy, 2593) Дуровым:дуровым(Npmsiy, 3427) павел+дуровым

In [52]:
print '\n'.join(clf.modif)


тренер
движение
император
артем
маарив
спутник
партия
переводчица
алтайска
ресурс
усков
арт
владелец
ε
очень
целлофан
рок
член
песням
книгабайта
комсомолка
возлюбленный
подружка
специалист
старик
катание
италия
круглою
епископ
друг
директор
руа
шотландцу
клуб
эта
блогер
придурковатой
эфир
пресс
юристка
голодовка
лицензия
джеймс
стекло
мать
остальное
протон
жительница
сэр
правило
господин
сержант
стадион
республиканец
алексей
сезон
дедушка
битва
монах
десятилетие
шоумен
сенатор
интернет
министр
полузащитник
писатель
царь
американец
компания
раз
глава
спикер
температура
песня
болтовня
эдвард
город
итар
саксофонист
преступник
основатель
пианист
психолог
пацан
drooling
санкт
вконтакте
наставник
kuiper
аналитик
басисты
например
знакомый
коэффициент
бреттон
провинция
дядя
корреспондент
актриса
покойный
депутат
бабушка
мини
энциклопедия
своём
бизнес
сценаристка
президент
ток
машина
соотечественник
двор
писательница
инвестор
культура
бавария
студия
группа
би
контракт
дуглас
барабанщик
коллега
кольцо
ривьера
королём
египтологом
консультант
время
участница
сегодня
выпускница
свобода
бен
интригана
первое
чай
have
беглец
композиция
аризона
юнайтед
роман
администратор
связь
осло
газета
зинкин
лидер
осьминог
machine
ментора
рецидивист
губернатор
наши
князь
редактор
знаток
агентура.ru
загаре
очередь
работа
образ
партнёры
коллайдер
мемориал
это
адвокат
хиллари
самоощущение
группировка
стать
мальчик
брат
руководитель
данхэмом
скрипач
сайт
дочь
телескоп
секретарь
еще
этот
gerard
имератор
акция
художник
премьер

The results are the same. There are not enough cases for those features to be recognized by a Decision Tree.

Soon + morphology + distance + lexical + syntax

For the comparison:

\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.29$ & $63.01$ & $70.22$  & $79.42$ & $48.39$ & $60.14$  & $53.65$ \\

In [96]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist', 'lexical', 'synt'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
export_graphviz(clf.clf, out_file='soon_morph_dist_lex_synt_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.29$ & $63.01$ & $70.22$  & $79.42$ & $48.39$ & $60.14$  & $53.65$ \\

In [97]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist', 'lexical', 'synt'))
clf.train(create_clf(min_samples_leaf=0.0003), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
export_graphviz(clf.clf, out_file='soon_morph_dist_lex_synt_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.27$ & $61.76$ & $69.43$  & $80.18$ & $47.55$ & $59.70$  & $52.70$ \\

In [25]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist', 'lexical', 'synt'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
export_graphviz(clf.clf, out_file='soon_morph_dist_lex_synt_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $73.91$ & $58.84$ & $65.52$  & $74.79$ & $44.54$ & $55.83$  & $49.72$ \\

In [14]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist', 'lexical', 'synt'))
clf.train(create_clf(), rucoref_train, gs_mentions_train)
coref_utils.get_score_table(clf, rucoref_test, gs_mentions, gs_groups, False)
export_graphviz(clf.clf, out_file='soon_morph_dist_lex_synt_dt_optimized.dot', feature_names=clf.feat_names, class_names=('noncoref', 'coref'))


\textsc{MLMentionPairMoreFeatures} &  $100.00$  & $79.29$ & $63.01$ & $70.22$  & $79.42$ & $48.39$ & $60.14$  & $53.65$ \\

In [95]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho', 'dist', 'lexical', 'synt'))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, pred_mentions_gold_bound_train)
coref_utils.get_score_table(clf, rucoref_test, pred_mentions_gold_bound, pred_groups_gold_bound, False)


\textsc{MLMentionPairMoreFeatures} &  $51.21$  & $38.39$ & $51.35$ & $43.94$  & $25.56$ & $41.09$ & $31.51$  & $26.50$ \\

In [94]:
clf = MLMentionPairMoreFeatures(scorer_path, feat_zones=('soon', 'morpho'))
clf.train(DecisionTreeClassifier(random_state=42), rucoref_train, pred_mentions_gold_bound_train)
coref_utils.get_score_table(clf, rucoref_test, pred_mentions_gold_bound, pred_groups_gold_bound, False)


\textsc{MLMentionPairMoreFeatures} &  $51.21$  & $37.99$ & $51.53$ & $43.74$  & $25.16$ & $41.19$ & $31.24$  & $26.61$ \\

In [15]:
scores, test_groups, test_chains = clf.score(rucoref_test, gs_mentions, gs_groups)
coref_utils.print_chains_in_text(rucoref_test, 1, test_chains, gs_mentions)


-- SYS --
Мальчик:мальчик(Ncmsny, 17)
он:он(P-3msnn, 58)
Она:она(P-3fsnn, 526)

классом этого друга:класс это друг(Ncmsin, 2540)
собственный класс мальчика:собственный класс мальчик(Ncmsan, 2949)

новую хорошую школу:новый хороший школа(Ncfsan, 323)
этой школы:этот школа(Ncfsgn, 570)
новую школу с гуманитарным уклоном:новый школа с гуманитарный уклон(Ncfsan, 801)
музыкальную школу:музыкальный школа(Ncfsan, 872)
новую школу:новый школа(Ncfsan, 2411)
музыкальной школы:музыкальный школа(Ncfsgn, 3636)
музыкальной школы:музыкальный школа(Ncfsgn, 3993)
школу:школа(Ncfsan, 4475)

мальчика:мальчик(Ncmsgy, 386)
Мальчик:мальчик(Ncmsny, 843)
мальчик:мальчик(Ncmsny, 1089)
мальчик:мальчик(Ncmsny, 1327)
Мальчик:мальчик(Ncmsny, 2122)
Мальчик:мальчик(Ncmsny, 2330)
Мальчик:мальчик(Ncmsny, 2508)
Мальчик:мальчик(Ncmsny, 2616)
мальчика:мальчик(Ncmsgy, 2967)
Мальчика:мальчик(Ncmsay, 3192)
ним:он(P-3msin, 3241)
Он:он(P-3msnn, 3283)
себя:себя(P----an, 3296)
Они:они(P-3-pnn, 3384)
Они:они(P-3-pnn, 3412)
него:он(P-3msgn, 3427)
он:он(P-3msnn, 3564)
он:он(P-3msnn, 3770)
Мне:я(P-1-sdn, 3807)
Ему:он(P-3msdn, 3860)
Я:я(P-1-snn, 4238)
мне:я(P-1-sdn, 4261)
Я:я(P-1-snn, 4280)
Его:его(P--msga, 4584)

ребенок:ребенок(Ncmsny, 421)
ребенка:ребенок(Ncmsgy, 1681)
своего:свой(P--msga, 1692)
Его:его(P-3msan, 1718)
Он:он(P-3msnn, 2160)

Мальчик:мальчик(Ncmsny, 3348)
Мальчик:мальчик(Ncmsny, 3495)
Мальчик:мальчик(Ncmsny, 4217)
мальчик:мальчик(Ncmsny, 4539)

свою партию:свой партия(Ncfsan, 2186)
которую:который(P--fsaa, 2199)
его:его(P-3msan, 2296)
они:они(P-3-pnn, 2565)
ними:они(P-3-pin, 2696)
Он:он(P-3msnn, 2702)
их:они(P-3-pan, 2705)

отец:отец(Ncmsny, 2312)
отцу:отец(Ncmsdy, 3546)
отцу:отец(Ncmsdy, 3904)

красивая и любимая учительница по сольфеджио:красивый и любимый учительница по сольфеджио(Ncfsny, 994)
которая:который(P--fsna, 1040)
Она:она(P-3fsnn, 1654)

сольфеджио:сольфеджио(Ncnsdn, 1028)
сольфеджио:сольфеджио(Ncnsan, 1476)

друг с детского садика:друг с детский садик(P---snn, 2478)
этого друга:это друг(P---san, 2548)
этот друг:этот друг(P---snn, 2725)
нему:он(P-3msdn, 2761)
его:он(P-3msan, 2840)

детьми:дитя(Ncnpiy, 1069)
дети:дитя(Ncnpny, 1249)

оперу:опера(Ncfsan, 1076)
опера:опера(Ncfsnn, 2076)
их оперу:они опера(Ncfsan, 2175)
свою:свой(P--fsaa, 2186)

мамой:мама(Ncfsiy, 1142)
маме:мама(Ncfsdy, 3529)
маму:мама(Ncfsay, 3800)
мама:мама(Ncfsny, 3899)
Мама:мама(Ncfsny, 4339)
Маме:мама(Ncfsdy, 4642)

учительницы:учительница(Ncfsgy, 1624)
Новая учительница:новый учительница(Ncfsny, 1948)

ты:ты(P-2-snn, 2925)
тебе:ты(P-2-sdn, 4243)
Ты:ты(P-2-snn, 4420)
Ты:ты(P-2-snn, 4446)

та:тот(P--fsna, 1861)
той:тот(P--fsga, 2039)

обожаемый старший друг мальчика , еще с детского садика:обожать старший друг мальчик , еще с детский садик(Ncmsny, 363)

мать:мать(Ncfsny, 520)

ребята неграмотные и не понимающие алгебры:ребята неграмотный и не понимать алгебра(Ncmpnn, 3060)

Новенький:новенький(Ncmsny, 3246)

сборная окрестных дворов:сборная окрестный двор(Ncfsnn, 3034)

легко возбудимая натура:легко возбудимая натура(Ncfsnn, 1336)

основной предмет:основной предмет(Ncmsan, 1454)

заботливая и милая женщина:заботливый и милый женщина(Ncfsny, 4089)

той , продвинутой и почти гуманитарной школки:тот , продвинуть и почти гуманитарный школка(Ncfsgn, 4128)

ребенок:ребенок(Ncmsny, 4014)

педагог по фортепьяно:педагог по фортепьяно(Ncmsny, 4066)

две арии Козла:два ария козел(Mcf-a, 1120)

педагогический талант:педагогический талант(Ncmsnn, 1918)

другая преподавательница:другой преподавательница(Ncfsny, 1728)

младше - классника:молодой - классника(Afcmsnf, 2798)

серьезные восьмиклассники:серьезный восьмиклассник(Ncmpny, 2589)



-- GS --
педагог по фортепьяно:педагог по фортепьяно(Ncmsny, 4066)
заботливая и милая женщина:заботливый и милый женщина(Ncfsny, 4089)

музыкальную школу:музыкальный школа(Ncfsan, 872)
музыкальной школы:музыкальный школа(Ncfsgn, 3636)
музыкальной школы:музыкальный школа(Ncfsgn, 3993)

отец:отец(Ncmsny, 2312)
отцу:отец(Ncmsdy, 3546)
отцу:отец(Ncmsdy, 3904)

Новенький:новенький(Ncmsny, 3246)
Он:он(P-3msnn, 3283)
себя:себя(P----an, 3296)

собственный класс мальчика:собственный класс мальчик(Ncmsan, 2949)
сборная окрестных дворов:сборная окрестный двор(Ncfsnn, 3034)
ребята неграмотные и не понимающие алгебры:ребята неграмотный и не понимать алгебра(Ncmpnn, 3060)
Они:они(P-3-pnn, 3384)
Они:они(P-3-pnn, 3412)

классом этого друга:класс это друг(Ncmsin, 2540)
они:они(P-3-pnn, 2565)
серьезные восьмиклассники:серьезный восьмиклассник(Ncmpny, 2589)
ними:они(P-3-pin, 2696)
их:они(P-3-pan, 2705)

обожаемый старший друг мальчика , еще с детского садика:обожать старший друг мальчик , еще с детский садик(Ncmsny, 363)
друг с детского садика:друг с детский садик(P---snn, 2478)
этого друга:это друг(P---san, 2548)
этот друг:этот друг(P---snn, 2725)

две арии Козла:два ария козел(Mcf-a, 1120)
свою партию:свой партия(Ncfsan, 2186)
которую:который(P--fsaa, 2199)

оперу:опера(Ncfsan, 1076)
опера:опера(Ncfsnn, 2076)
их оперу:они опера(Ncfsan, 2175)

детьми:дитя(Ncnpiy, 1069)
дети:дитя(Ncnpny, 1249)

другая преподавательница:другой преподавательница(Ncfsny, 1728)
Новая учительница:новый учительница(Ncfsny, 1948)

красивая и любимая учительница по сольфеджио:красивый и любимый учительница по сольфеджио(Ncfsny, 994)
которая:который(P--fsna, 1040)
учительницы:учительница(Ncfsgy, 1624)
Она:она(P-3fsnn, 1654)
своего:свой(P--msga, 1692)
та:тот(P--fsna, 1861)
педагогический талант:педагогический талант(Ncmsnn, 1918)
той:тот(P--fsga, 2039)

новую хорошую школу:новый хороший школа(Ncfsan, 323)
этой школы:этот школа(Ncfsgn, 570)
новую школу с гуманитарным уклоном:новый школа с гуманитарный уклон(Ncfsan, 801)
новую школу:новый школа(Ncfsan, 2411)
той , продвинутой и почти гуманитарной школки:тот , продвинуть и почти гуманитарный школка(Ncfsgn, 4128)
школу:школа(Ncfsan, 4475)

мать:мать(Ncfsny, 520)
Она:она(P-3fsnn, 526)
мамой:мама(Ncfsiy, 1142)
маме:мама(Ncfsdy, 3529)
маму:мама(Ncfsay, 3800)
мама:мама(Ncfsny, 3899)
тебе:ты(P-2-sdn, 4243)
Мама:мама(Ncfsny, 4339)
Маме:мама(Ncfsdy, 4642)

Мальчик:мальчик(Ncmsny, 17)
он:он(P-3msnn, 58)
мальчика:мальчик(Ncmsgy, 386)
ребенок:ребенок(Ncmsny, 421)
Мальчик:мальчик(Ncmsny, 843)
мальчик:мальчик(Ncmsny, 1089)
мальчик:мальчик(Ncmsny, 1327)
легко возбудимая натура:легко возбудимая натура(Ncfsnn, 1336)
ребенка:ребенок(Ncmsgy, 1681)
Его:его(P-3msan, 1718)
Мальчик:мальчик(Ncmsny, 2122)
Он:он(P-3msnn, 2160)
свою:свой(P--fsaa, 2186)
его:его(P-3msan, 2296)
Мальчик:мальчик(Ncmsny, 2330)
Мальчик:мальчик(Ncmsny, 2508)
Мальчик:мальчик(Ncmsny, 2616)
Он:он(P-3msnn, 2702)
нему:он(P-3msdn, 2761)
младше - классника:молодой - классника(Afcmsnf, 2798)
его:он(P-3msan, 2840)
ты:ты(P-2-snn, 2925)
мальчика:мальчик(Ncmsgy, 2967)
Мальчика:мальчик(Ncmsay, 3192)
ним:он(P-3msin, 3241)
Мальчик:мальчик(Ncmsny, 3348)
него:он(P-3msgn, 3427)
Мальчик:мальчик(Ncmsny, 3495)
он:он(P-3msnn, 3564)
он:он(P-3msnn, 3770)
Мне:я(P-1-sdn, 3807)
Ему:он(P-3msdn, 3860)
ребенок:ребенок(Ncmsny, 4014)
Мальчик:мальчик(Ncmsny, 4217)
Я:я(P-1-snn, 4238)
мне:я(P-1-sdn, 4261)
Я:я(P-1-snn, 4280)
Ты:ты(P-2-snn, 4420)
Ты:ты(P-2-snn, 4446)
мальчик:мальчик(Ncmsny, 4539)
Его:его(P--msga, 4584)

сольфеджио:сольфеджио(Ncnsdn, 1028)
основной предмет:основной предмет(Ncmsan, 1454)
сольфеджио:сольфеджио(Ncnsan, 1476)

For some unknown reasons (yet!) lexical and synt features are not included in the trained decision trees

Dumping the results to a file:


In [37]:
import codecs

def dump_chains_in_corpus(corpus, test_chains, gold_mentions, out_file_name='coref_chains.txt'):
    out_file = codecs.open(out_file_name, 'w', encoding='utf-8')
    for i_text, text in enumerate(test_chains):
        # Dumping SYS
        for chain_id in test_chains[i_text]:
            for elem_id in test_chains[i_text][chain_id]:
                elem = gold_mentions[i_text][elem_id]
                out_file.write(u'{text_id}\tSYS\t{chain_id}\t{elem_id}\t{offset}\t{lemma}\t{wordform}\n'.format(text_id=corpus.doc_ids[i_text],
                                                                                                                chain_id=chain_id,
                                                                                                                elem_id=elem_id,
                                                                                                                offset=elem.offset,
                                                                                                                lemma=u' '.join(elem.lemma),
                                                                                                                wordform=u' '.join(elem.wordform)
                                                                                                               ))
            out_file.write('\n')
        
        # Dumping GS
        for chain_id in corpus.gs[i_text]['chains'].keys():
            #gs_mentions, gs_group_ids = coref_utils.get_gs_groups(corpus)
            cur_gs_chain = {key: [gs_group_ids[i_text].index(item) for item in val]
                            for key, val in corpus.gs[i_text]['chains'].items()}
            for elem_id in cur_gs_chain[chain_id]:
                elem = gs_mentions[i_text][elem_id]
                out_file.write(u'{text_id}\tGS \t{chain_id}\t{elem_id}\t{offset}\t{lemma}\t{wordform}\n'.format(text_id=corpus.doc_ids[i_text],
                                                                                                                chain_id=chain_id,
                                                                                                                elem_id=elem_id,
                                                                                                                offset=elem.offset,
                                                                                                                lemma=u' '.join(elem.lemma),
                                                                                                                wordform=u' '.join(elem.wordform)
                                                                                                               ))
            out_file.write('\n')

In [38]:
dump_chains_in_corpus(rucoref_test, test_chains, gs_mentions, out_file_name='coref_chains_default.txt')