def residual_args(vocab, vecs, nAssign, int_rvec): fx_to_vecs = vecs fx_to_wxs, fx_to_maws = smk_funcs.assign_to_words(vocab, fx_to_vecs, nAssign) wx_to_fxs, wx_to_maws = smk_funcs.invert_assigns(fx_to_wxs, fx_to_maws) wx_list = sorted(wx_to_fxs.keys()) word_list = ut.take(vocab.wx_to_word, wx_list) fxs_list = ut.take(wx_to_fxs, wx_list) maws_list = ut.take(wx_to_maws, wx_list) argtup = (wx_list, word_list, fxs_list, maws_list, fx_to_vecs, int_rvec) return argtup
def new_external_annot(aid, fx_to_wxs, fx_to_maws, int_rvec): wx_to_fxs, wx_to_maws = smk_funcs.invert_assigns(fx_to_wxs, fx_to_maws) X = inverted_index.SingleAnnot() X.aid = aid # Build Aggregate Residual Vectors X.wx_list = np.array(sorted(wx_to_fxs.keys()), dtype=np.int32) X.wx_to_idx = ut.make_index_lookup(X.wx_list) X.int_rvec = int_rvec X.wx_set = set(X.wx_list) # TODO: maybe use offset list structure instead of heavy nesting X.fxs_list = ut.take(wx_to_fxs, X.wx_list) X.maws_list = ut.take(wx_to_maws, X.wx_list) return X
def make_temporary_annot(aid, vocab, wx_to_weight, ibs, config): nAssign = config.get('nAssign', 1) alpha = config.get('smk_alpha', 3.0) thresh = config.get('smk_thresh', 3.0) # Compute assignments fx_to_vecs = ibs.get_annot_vecs(aid, config2_=config) fx_to_wxs, fx_to_maws = smk_funcs.assign_to_words(vocab, fx_to_vecs, nAssign) wx_to_fxs, wx_to_maws = smk_funcs.invert_assigns(fx_to_wxs, fx_to_maws) # Build Aggregate Residual Vectors wx_list = sorted(wx_to_fxs.keys()) word_list = ut.take(vocab.wx_to_word, wx_list) fxs_list = ut.take(wx_to_fxs, wx_list) maws_list = ut.take(wx_to_maws, wx_list) agg_rvecs = np.empty((len(wx_list), fx_to_vecs.shape[1]), dtype=np.float) agg_flags = np.empty((len(wx_list), 1), dtype=np.bool) for idx in range(len(wx_list)): word = word_list[idx] fxs = fxs_list[idx] maws = maws_list[idx] vecs = fx_to_vecs.take(fxs, axis=0) _rvecs, _flags = smk_funcs.compute_rvec(vecs, word) _agg_rvec, _agg_flag = smk_funcs.aggregate_rvecs(_rvecs, maws, _flags) agg_rvecs[idx] = _agg_rvec agg_flags[idx] = _agg_flag X = inverted_index.SingleAnnot() X.aid = aid X.wx_list = wx_list X.fxs_list = fxs_list X.maws_list = maws_list X.agg_rvecs = agg_rvecs X.agg_flags = agg_flags X.wx_to_idx = ut.make_index_lookup(X.wx_list) X.int_rvec = False X.wx_set = set(X.wx_list) weight_list = np.array(ut.take(wx_to_weight, wx_list)) X.gamma = smk_funcs.gamma_agg(X.agg_rvecs, X.agg_flags, weight_list, alpha, thresh) return X