├── .gitignore ├── README.md ├── cat_hnsw ├── __init__.py ├── benchmark │ ├── __init__.py │ └── runner.py ├── hnsw.py ├── hnsw_cat.py ├── hnsw_consistent_build.py ├── layer.py ├── queue.py └── settings.py ├── data ├── experiments │ ├── exp_categorical_connectivity_group_size │ │ ├── group_100.jsonl │ │ ├── group_100_2.jsonl │ │ └── random_group_count.jsonl │ ├── exp_categorical_connectivity_group_size_random │ │ ├── group_100.jsonl │ │ └── group_100_2.jsonl │ ├── exp_connectivity_glove_m0 │ │ ├── m0_16.jsonl │ │ ├── m0_24.jsonl │ │ ├── m0_32.jsonl │ │ └── m0_8.jsonl │ ├── exp_connectivity_glove_num_elements │ │ ├── num_10k.jsonl │ │ ├── num_20k.jsonl │ │ └── num_30k.jsonl │ ├── exp_connectivity_m0 │ │ ├── m0_16.jsonl │ │ ├── m0_24.jsonl │ │ ├── m0_32.jsonl │ │ └── m0_8.jsonl │ ├── exp_connectivity_num_elements │ │ ├── num_10k.jsonl │ │ ├── num_20k.jsonl │ │ └── num_30k.jsonl │ └── exp_random_groups │ │ └── random_group_count.jsonl └── glove_50k_50.txt ├── example_nmslib.py ├── experiments ├── __init__.py ├── additional_category_connectivity.py ├── additional_category_connectivity_random.py ├── connectivity_experiment.py ├── connectivity_experiment_glove.py ├── num_elements_connectivity_experiment.py └── num_elements_connectivity_experiment_glove.py ├── requirements-dev.txt ├── requirements.txt ├── test.py └── test2.py /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .idea 3 | *.ind 4 | *.idx 5 | 6 | *.hdf5 7 | __pycache__ 8 | bak -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # hnsw-python 2 | 3 | HNSW implemented by python. 4 | 5 | #### Supported distances: 6 | 7 | | Distance | parameter | Equation | 8 | | ----------------- | --------- | ------------------------------------------------------- | 9 | | Squared L2 | 'l2' | d = sum((Ai-Bi)^2) | 10 | | Cosine similarity | 'cosine' | d = 1.0 - sum(Ai\*Bi) / sqrt(sum(Ai\*Ai) \* sum(Bi*Bi)) | 11 | 12 | #### examples 13 | 14 | ```python 15 | import time 16 | from progressbar import * 17 | import pickle 18 | from random_example import HNSW 19 | import numpy as np 20 | 21 | dim = 200 22 | num_elements = 10000 23 | 24 | data = np.array(np.float32(np.random.random((num_elements, dim)))) 25 | hnsw = HNSW('cosine', m0=16, ef=128) 26 | widgets = ['Progress: ',Percentage(), ' ', Bar('#'),' ', Timer(), ' ', ETA()] 27 | 28 | # show progressbar 29 | pbar = ProgressBar(widgets=widgets, maxval=train_len).start() 30 | for i in range(len(data)): 31 | hnsw.add(data[i]) 32 | pbar.update(i + 1) 33 | pbar.finish() 34 | 35 | # save index 36 | with open('glove.ind', 'wb') as f: 37 | picklestring = pickle.dump(hnsw, f, pickle.HIGHEST_PROTOCOL) 38 | 39 | # load index 40 | fr = open('glove.ind','rb') 41 | hnsw_n = pickle.load(fr) 42 | 43 | add_point_time = time.time() 44 | idx = hnsw_n.search(np.float32(np.random.random((1, 200))), 10) 45 | search_time = time.time() 46 | print("Searchtime: %f" % (search_time - add_point_time)) 47 | ``` 48 | 49 | -------------------------------------------------------------------------------- /cat_hnsw/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generall/hnsw-python/62d8751ace246533de51295b85b935251a97f5de/cat_hnsw/__init__.py -------------------------------------------------------------------------------- /cat_hnsw/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generall/hnsw-python/62d8751ace246533de51295b85b935251a97f5de/cat_hnsw/benchmark/__init__.py -------------------------------------------------------------------------------- /cat_hnsw/benchmark/runner.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | import pickle 4 | import timeit 5 | from typing import List 6 | 7 | import numpy as np 8 | import tqdm 9 | 10 | from cat_hnsw.hnsw import HNSW 11 | from cat_hnsw.settings import DATA_PATH 12 | 13 | from statsmodels.stats.proportion import proportion_confint 14 | 15 | 16 | def cosine_similarity(vector, matrix): 17 | return (np.sum(vector * matrix, axis=1) / ( 18 | np.sqrt(np.sum(matrix ** 2, axis=1)) * np.sqrt(np.sum(vector ** 2)))) 19 | 20 | 21 | def calc_precision_at(found_pos: List[int], limit): 22 | hits = np.array(found_pos) < limit 23 | return np.mean(hits), proportion_confint(sum(hits), len(found_pos)) 24 | 25 | 26 | class BaseExperiment: 27 | """ 28 | Class for running benchmarks 29 | """ 30 | 31 | def __init__( 32 | self, 33 | experiment_name, 34 | m=16, 35 | ef=128, 36 | dim=50, 37 | num_elements=10000 38 | ): 39 | self.num_elements = num_elements 40 | self.dim = dim 41 | self.ef = ef 42 | self.m = m 43 | self.experiment_name = experiment_name 44 | 45 | self.experiment_dir = os.path.join(DATA_PATH, 'experiments', f'exp_{self.experiment_name}') 46 | 47 | os.makedirs(self.experiment_dir, exist_ok=True) 48 | 49 | self.index_path = os.path.join(self.experiment_dir, 'index.idx') 50 | 51 | def generate_data(self, param): 52 | return np.random.rand(self.num_elements, self.dim) 53 | 54 | def generate_index_class(self, param): 55 | return HNSW('cosine', m=self.m, ef=self.ef) 56 | 57 | def add_batch(self, index, data, param): 58 | index.add_batch(data) 59 | 60 | def run_build(self, 61 | param, 62 | ): 63 | data = self.generate_data(param) 64 | index = self.generate_index_class(param) 65 | self.add_batch(index, data, param) 66 | 67 | # save index 68 | with open(self.index_path, 'wb') as f: 69 | pickle.dump(index, f, pickle.HIGHEST_PROTOCOL) 70 | 71 | def get_random_vector(self): 72 | return np.float32(np.random.random((1, self.dim))) 73 | 74 | def test_search_time(self, index, topn=10): 75 | runs, total_time = timeit.Timer(lambda: index.search(self.get_random_vector(), topn)).autorange() 76 | return total_time / runs 77 | 78 | def search_closest(self, index, target, condition): 79 | return index.search(target, 1, condition=condition) 80 | 81 | def test_accuracy(self, data, mask, index, attempts=10): 82 | found_top = [] 83 | 84 | if mask is None: 85 | mask = np.ones(data.shape[0], dtype=bool) 86 | 87 | for _ in range(attempts): 88 | target = self.get_random_vector() 89 | 90 | true_distance = 1 - cosine_similarity(target, data) 91 | 92 | np.putmask(true_distance, ~mask, 1_000_000) 93 | 94 | closest = list(np.argsort(true_distance)) 95 | 96 | # closest_dist = true_distance[closest[:3]] 97 | 98 | approx_closest = self.search_closest(index, target=target, condition=lambda point: mask[point]) 99 | 100 | approx_closest_idx, approx_closest_dist = approx_closest[0] 101 | 102 | found_top.append(closest.index(approx_closest_idx)) 103 | 104 | return found_top 105 | 106 | def save_metrics(self, fd, found_top, experiment_param, variable_param): 107 | fd.write(json.dumps({ 108 | 'experiment_param': experiment_param, 109 | 'variable_param': variable_param, 110 | 'precision@10': calc_precision_at(found_top, 10), 111 | 'average_position': np.mean(found_top) 112 | })) 113 | fd.write('\n') 114 | fd.flush() 115 | 116 | def load_index(self): 117 | with open(self.index_path, 'rb') as fr: 118 | hnsw_n: HNSW = pickle.load(fr) 119 | 120 | return hnsw_n 121 | 122 | def get_mask(self, index, experiment_param, variable_param): 123 | all_mask = np.ones(index.data.shape[0], dtype=bool) 124 | return all_mask 125 | 126 | def run_accuracy_test(self, iteration_name, experiment_param, variable_params: list, attempts_per_value=100, 127 | index=None, mask_attempts=1): 128 | if index is None: 129 | self.run_build(experiment_param) 130 | index = self.load_index() 131 | 132 | with open(os.path.join(self.experiment_dir, iteration_name + '.jsonl'), 'w') as logs_out: 133 | for variable_param in tqdm.tqdm(variable_params, desc="performing search"): 134 | found_top_all = [] 135 | for i in range(mask_attempts): 136 | mask = self.get_mask(index, experiment_param, variable_param) 137 | found_top = self.test_accuracy(index.data, mask=mask, index=index, attempts=attempts_per_value) 138 | found_top_all += found_top 139 | self.save_metrics(logs_out, found_top_all, experiment_param, variable_param) 140 | -------------------------------------------------------------------------------- /cat_hnsw/hnsw.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pprint 4 | import sys 5 | from heapq import heapify, heappop, heappush, heapreplace, nlargest, nsmallest 6 | from math import log2 7 | from operator import itemgetter 8 | from random import random 9 | 10 | import numpy as np 11 | from tqdm import tqdm 12 | 13 | 14 | class HNSW(object): 15 | # self._graphs[level][i] contains a {j: dist} dictionary, 16 | # where j is a neighbor of i and dist is distance 17 | 18 | def l2_distance(self, a, b): 19 | return np.linalg.norm(a - b) 20 | 21 | @classmethod 22 | def cosine_distance(cls, a, b): 23 | """ 24 | >>> HNSW.cosine_distance([1,1], [-1, -1]) > 0 25 | True 26 | 27 | :param a: 28 | :param b: 29 | :return: 30 | """ 31 | try: 32 | return 1 - np.dot(a, b) / (np.linalg.norm(a) * (np.linalg.norm(b))) 33 | except ValueError: 34 | print(a) 35 | print(b) 36 | 37 | def _distance(self, x, y): 38 | return self.distance_func(x, [y])[0] 39 | 40 | def vectorized_distance_(self, x, ys): 41 | return [self.distance_func(x, y) for y in ys] 42 | 43 | def __init__(self, distance_type, m=5, ef=200, m0=None, heuristic=True, vectorized=False): 44 | self.data = [] 45 | if distance_type == "l2": 46 | # l2 distance 47 | distance_func = self.l2_distance 48 | elif distance_type == "cosine": 49 | # cosine distance 50 | distance_func = self.cosine_distance 51 | else: 52 | raise TypeError('Please check your distance type!') 53 | 54 | self.distance_func = distance_func 55 | 56 | if vectorized: 57 | # def distance_1(x, y): 58 | # return distance_func(x, [y])[0] 59 | 60 | self.distance = self._distance 61 | self.vectorized_distance = distance_func 62 | else: 63 | self.distance = distance_func 64 | 65 | # def vectorized_distance(x, ys): 66 | # return [distance_func(x, y) for y in ys] 67 | 68 | self.vectorized_distance = self.vectorized_distance_ 69 | 70 | self._m = m 71 | self._ef = ef 72 | self._m0 = 2 * m if m0 is None else m0 73 | self._level_mult = 1 / log2(m) 74 | self._graphs = [] 75 | self._enter_point = None 76 | 77 | self._select = ( 78 | self._select_heuristic if heuristic else self._select_naive) 79 | 80 | def add_batch(self, data: np.ndarray, ef=None): 81 | self.data = data 82 | for i in tqdm(range(self.data.shape[0])): 83 | self._enter_point = self._add( 84 | i, 85 | data=self.data, 86 | graphs=self._graphs, 87 | entry_point=self._enter_point, 88 | m=self._m, 89 | m0=self._m0, 90 | ef=ef 91 | ) 92 | 93 | def _add( 94 | self, 95 | idx, 96 | data, 97 | graphs, 98 | entry_point, 99 | m, 100 | m0, 101 | ef=None 102 | ): 103 | 104 | if ef is None: 105 | ef = self._ef 106 | distance = self.distance 107 | point = entry_point 108 | 109 | # level at which the element will be inserted 110 | level = int(-log2(random()) * self._level_mult) + 1 111 | # print("level: %d" % level) 112 | 113 | elem = data[idx] 114 | # elem will be at data[idx] 115 | 116 | if point is not None: # the HNSW is not empty, we have an entry point 117 | dist = distance(elem, data[point]) 118 | # for all levels in which we dont have to insert elem, 119 | # we search for the closest neighbor 120 | for layer in reversed(graphs[level:]): 121 | point, dist = self._search_graph_ef1(elem, point, dist, layer) 122 | # at these levels we have to insert elem; ep is a heap of entry points. 123 | ep = [(-dist, point)] 124 | layer0 = graphs[0] 125 | for layer in reversed(graphs[:level]): 126 | level_m = m if layer is not layer0 else m0 127 | # navigate the graph and update ep with the closest 128 | # nodes we find 129 | ep = self._search_graph(elem, ep, layer, ef) 130 | # insert in g[idx] the best neighbors 131 | layer[idx] = layer_idx = {} 132 | self._select(layer_idx, ep, level_m, layer, heap=True) 133 | # assert len(layer_idx) <= level_m 134 | # insert backlinks to the new node 135 | for j, dist in layer_idx.items(): 136 | self._select(layer[j], (idx, dist), level_m, layer) 137 | # assert len(g[j]) <= level_m 138 | # assert all(e in g for _, e in ep) 139 | for i in range(len(graphs), level): 140 | # for all new levels, we create an empty graph 141 | graphs.append({idx: {}}) 142 | entry_point = idx 143 | 144 | return entry_point 145 | 146 | def search(self, q, k=None, ef=None): 147 | 148 | distance = self.distance 149 | graphs = self._graphs 150 | point = self._enter_point 151 | 152 | if ef is None: 153 | ef = self._ef 154 | 155 | if point is None: 156 | raise ValueError("Empty graph") 157 | 158 | dist = distance(q, self.data[point]) 159 | # look for the closest neighbor from the top to the 2nd level 160 | for layer in reversed(graphs[1:]): 161 | point, dist = self._search_graph_ef1(q, point, dist, layer) 162 | # look for ef neighbors in the bottom level 163 | ep = self._search_graph(q, [(-dist, point)], graphs[0], ef) 164 | 165 | if k is not None: 166 | ep = nlargest(k, ep) 167 | else: 168 | ep.sort(reverse=True) 169 | 170 | return [(idx, -md) for md, idx in ep] 171 | 172 | def _search_graph_ef1(self, q, entry, dist, layer): 173 | 174 | vectorized_distance = self.vectorized_distance 175 | data = self.data 176 | 177 | best = entry 178 | best_dist = dist 179 | candidates = [(dist, entry)] 180 | visited = {entry} 181 | 182 | while candidates: 183 | dist, c = heappop(candidates) 184 | if dist > best_dist: 185 | break 186 | edges = [e for e in layer[c] if e not in visited] 187 | visited.update(edges) 188 | dists = vectorized_distance(q, [data[e] for e in edges]) 189 | for e, dist in zip(edges, dists): 190 | if dist < best_dist: 191 | best = e 192 | best_dist = dist 193 | heappush(candidates, (dist, e)) 194 | # break 195 | 196 | return best, best_dist 197 | 198 | def _search_graph(self, q, ep, layer, ef): 199 | 200 | vectorized_distance = self.vectorized_distance 201 | data = self.data 202 | 203 | candidates = [(-mdist, p) for mdist, p in ep] 204 | heapify(candidates) 205 | visited = set(p for _, p in ep) 206 | 207 | while candidates: 208 | dist, c = heappop(candidates) 209 | mref = ep[0][0] 210 | if dist > -mref: 211 | break 212 | 213 | edges = [e for e in layer[c] if e not in visited] 214 | visited.update(edges) 215 | dists = vectorized_distance(q, [data[e] for e in edges]) 216 | for e, dist in zip(edges, dists): 217 | mdist = -dist 218 | if len(ep) < ef: 219 | heappush(candidates, (dist, e)) 220 | heappush(ep, (mdist, e)) 221 | mref = ep[0][0] 222 | elif mdist > mref: 223 | heappush(candidates, (dist, e)) 224 | heapreplace(ep, (mdist, e)) 225 | mref = ep[0][0] 226 | 227 | return ep 228 | 229 | @classmethod 230 | def _select_naive(cls, d: dict, to_insert, m, layer, heap=False): 231 | """ 232 | 233 | :param d: adjacency list 234 | :param to_insert: candidates for inserting 235 | :param m: max number to insert 236 | :param layer: All adjacency lists 237 | :param heap: 238 | :return: 239 | """ 240 | 241 | if not heap: # shortcut when we've got only one thing to insert 242 | idx, dist = to_insert 243 | assert idx not in d 244 | if len(d) < m: 245 | d[idx] = dist 246 | else: 247 | max_idx, max_dist = max(d.items(), key=itemgetter(1)) 248 | if dist < max_dist: 249 | del d[max_idx] 250 | d[idx] = dist 251 | return 252 | 253 | # so we have more than one item to insert, it's a bit more tricky 254 | assert not any(idx in d for _, idx in to_insert) 255 | to_insert = nlargest(m, to_insert) # smallest m distances 256 | unchecked = m - len(d) 257 | assert 0 <= unchecked <= m 258 | to_insert, checked_ins = to_insert[:unchecked], to_insert[unchecked:] 259 | to_check = len(checked_ins) 260 | if to_check > 0: 261 | checked_del = nlargest(to_check, d.items(), key=itemgetter(1)) 262 | else: 263 | checked_del = [] 264 | for md, idx in to_insert: 265 | d[idx] = -md 266 | zipped = zip(checked_ins, checked_del) 267 | for (md_new, idx_new), (idx_old, d_old) in zipped: 268 | if d_old <= -md_new: 269 | break 270 | del d[idx_old] 271 | d[idx_new] = -md_new 272 | assert len(d) == m 273 | 274 | @classmethod 275 | def _select_heuristic(cls, d, to_insert, m, g, heap=False): 276 | 277 | nb_dicts = [g[idx] for idx in d] 278 | 279 | def prioritize(idx, dist): 280 | return any(nd.get(idx, float('inf')) < dist for nd in nb_dicts), dist, idx 281 | 282 | if not heap: 283 | idx, dist = to_insert 284 | to_insert = [prioritize(idx, dist)] 285 | else: 286 | to_insert = nsmallest(m, (prioritize(idx, -mdist) 287 | for mdist, idx in to_insert)) 288 | 289 | assert len(to_insert) > 0 290 | assert not any(idx in d for _, _, idx in to_insert) 291 | 292 | unchecked = m - len(d) 293 | assert 0 <= unchecked <= m 294 | to_insert, checked_ins = to_insert[:unchecked], to_insert[unchecked:] 295 | to_check = len(checked_ins) 296 | if to_check > 0: 297 | checked_del = nlargest(to_check, (prioritize(idx, dist) 298 | for idx, dist in d.items())) 299 | else: 300 | checked_del = [] 301 | for _, dist, idx in to_insert: 302 | d[idx] = dist 303 | zipped = zip(checked_ins, checked_del) 304 | for (p_new, d_new, idx_new), (p_old, d_old, idx_old) in zipped: 305 | if (p_old, d_old) <= (p_new, d_new): 306 | break 307 | del d[idx_old] 308 | d[idx_new] = d_new 309 | assert len(d) == m 310 | 311 | def __getitem__(self, idx): 312 | 313 | for g in self._graphs: 314 | try: 315 | yield from g[idx].items() 316 | except KeyError: 317 | return 318 | -------------------------------------------------------------------------------- /cat_hnsw/hnsw_cat.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from collections import defaultdict 3 | from heapq import heapify, heappop, heappush, heapreplace, nlargest 4 | from itertools import islice 5 | from operator import itemgetter 6 | from typing import Container, Callable 7 | 8 | from cat_hnsw.hnsw import HNSW 9 | 10 | 11 | def accept_all(item): 12 | return True 13 | 14 | 15 | class HNSWCat(HNSW): 16 | """ 17 | Category-aware HNSW index 18 | """ 19 | 20 | def __init__(self, distance_type, m=5, ef=200, m0=None, heuristic=True, vectorized=False, max_search_m=None): 21 | super().__init__(distance_type, m, ef, m0, heuristic, vectorized) 22 | self.max_search_m = max_search_m or m 23 | self.max_search_m0 = self.max_search_m * 2 24 | 25 | def init_from_existing(self, other: HNSW): 26 | self.distance_func = other.distance_func 27 | self.vectorized_distance = other.vectorized_distance 28 | self.data = other.data 29 | self._m = other._m 30 | self._ef = other._ef 31 | self._m0 = other._m0 32 | self._level_mult = other._level_mult 33 | self._graphs = other._graphs 34 | self._enter_point = other._enter_point 35 | self._select = other._select 36 | 37 | return self 38 | 39 | def get_entry_point(self, condition): 40 | """ 41 | Finds suitable entry point 42 | 43 | :param condition: 44 | :return: entry point + level 45 | """ 46 | if condition(self._enter_point): 47 | return self._enter_point, len(self._graphs) 48 | else: 49 | for idx, layer in enumerate(reversed(self._graphs)): 50 | for point in layer: 51 | if condition(point): 52 | return point, len(self._graphs) - idx 53 | 54 | def search(self, q, k=None, ef=None, condition=accept_all): 55 | 56 | distance = self.distance 57 | graphs = self._graphs 58 | point, start_level = self.get_entry_point(condition) 59 | 60 | if ef is None: 61 | ef = self._ef 62 | 63 | if point is None: 64 | raise ValueError("Empty graph") 65 | 66 | dist = distance(q, self.data[point]) 67 | # look for the closest neighbor from the top to the 2nd level 68 | for layer in reversed(graphs[1:start_level]): 69 | point, dist = self._search_graph_ef1(q, point, dist, layer, condition=condition) 70 | # look for ef neighbors in the bottom level 71 | ep = self._search_graph(q, [(-dist, point)], graphs[0], ef, condition=condition) 72 | 73 | if k is not None: 74 | ep = nlargest(k, ep) 75 | else: 76 | ep.sort(reverse=True) 77 | 78 | return [(idx, -md) for md, idx in ep] 79 | 80 | def _search_graph_ef1(self, q, entry, dist, layer, condition: Callable[[int], bool] = accept_all): 81 | 82 | vectorized_distance = self.vectorized_distance 83 | data = self.data 84 | 85 | best = entry 86 | best_dist = dist 87 | candidates = [(dist, entry)] 88 | visited = {entry} 89 | 90 | while candidates: 91 | dist, c = heappop(candidates) 92 | if dist > best_dist: 93 | break 94 | 95 | # ToDo: replace with pre-sorted lists 96 | edges = map(itemgetter(0), sorted(layer[c].items(), key=itemgetter(1))) 97 | edges = (e for e in edges if (e not in visited) and condition(e)) 98 | edges = list(islice(edges, self.max_search_m)) 99 | visited.update(edges) 100 | dists = vectorized_distance(q, [data[e] for e in edges]) 101 | for e, dist in zip(edges, dists): 102 | if dist < best_dist: 103 | best = e 104 | best_dist = dist 105 | heappush(candidates, (dist, e)) 106 | # break 107 | 108 | return best, best_dist 109 | 110 | def _search_graph(self, q, ep, layer, ef, condition: Callable[[int], bool] = accept_all): 111 | 112 | vectorized_distance = self.vectorized_distance 113 | data = self.data 114 | 115 | candidates = [(-mdist, p) for mdist, p in ep] 116 | heapify(candidates) 117 | visited = set(p for _, p in ep) 118 | 119 | while candidates: 120 | dist, c = heappop(candidates) 121 | mref = ep[0][0] 122 | if dist > -mref: 123 | break 124 | 125 | # ToDo: replace with pre-sorted lists 126 | edges = map(itemgetter(0), sorted(layer[c].items(), key=itemgetter(1))) 127 | edges = (e for e in edges if (e not in visited) and condition(e)) 128 | edges = list(islice(edges, self.max_search_m0)) 129 | visited.update(edges) 130 | dists = vectorized_distance(q, [data[e] for e in edges]) 131 | for e, dist in zip(edges, dists): 132 | mdist = -dist 133 | if len(ep) < ef: 134 | heappush(candidates, (dist, e)) 135 | heappush(ep, (mdist, e)) 136 | mref = ep[0][0] 137 | elif mdist > mref: 138 | heappush(candidates, (dist, e)) 139 | heapreplace(ep, (mdist, e)) 140 | mref = ep[0][0] 141 | 142 | return ep 143 | -------------------------------------------------------------------------------- /cat_hnsw/hnsw_consistent_build.py: -------------------------------------------------------------------------------- 1 | from itertools import groupby 2 | from operator import itemgetter 3 | from typing import Dict, Any, List, Iterable 4 | 5 | import numpy as np 6 | from tqdm import tqdm 7 | 8 | from cat_hnsw.hnsw_cat import HNSWCat 9 | 10 | 11 | class HNSWConsistentBuild(HNSWCat): 12 | """ 13 | Preserve in-category connectivity. 14 | """ 15 | 16 | def __init__(self, distance_type, m=5, ef=200, m0=None, heuristic=True, vectorized=False): 17 | super().__init__(distance_type, m, ef, m0, heuristic, vectorized) 18 | self._category_enter_points = {} 19 | 20 | @classmethod 21 | def _merge_layers(cls, layer_to, layer_from): 22 | for node, edges in layer_from.items(): 23 | if node not in layer_to: 24 | layer_to[node] = edges 25 | else: 26 | layer_to[node].update(edges) 27 | 28 | def _merge_graphs(self, graphs: list): 29 | for layer_idx, layer in enumerate(graphs): 30 | if layer_idx == len(self._graphs): 31 | self._graphs.append(layer) 32 | else: 33 | self._merge_layers(self._graphs[layer_idx], layer) 34 | 35 | def build_cat_subgraph(self, points: Iterable[int], m, m0, ef): 36 | graphs = [] 37 | entry_point = None 38 | 39 | for idx in points: 40 | entry_point = self._add( 41 | idx, 42 | data=self.data, 43 | graphs=graphs, 44 | entry_point=entry_point, 45 | m=m, 46 | m0=m0, 47 | ef=ef 48 | ) 49 | self._merge_graphs(graphs) 50 | 51 | return graphs, entry_point 52 | 53 | def add_batch( 54 | self, 55 | data: np.ndarray, 56 | categories: Dict[Any, Iterable[int]] = None, 57 | connected_subsets: Iterable[Iterable[int]] = None, 58 | cat_m=None, 59 | cat_m0=None, 60 | subset_m=None, 61 | subset_m0=None, 62 | ef=None 63 | ): 64 | self.data = data 65 | for i in tqdm(range(self.data.shape[0])): 66 | self._enter_point = self._add( 67 | i, 68 | data=self.data, 69 | graphs=self._graphs, 70 | entry_point=self._enter_point, 71 | m=self._m, 72 | m0=self._m0, 73 | ef=ef 74 | ) 75 | 76 | if categories is not None: 77 | cat_m = cat_m or self._m 78 | cat_m0 = cat_m0 or self._m0 79 | 80 | for category, points in tqdm(categories.items()): 81 | num_layers = len(self._graphs) 82 | graphs, entry_point = self.build_cat_subgraph(points, m=cat_m, m0=cat_m0, ef=ef) 83 | 84 | self._category_enter_points[category] = (entry_point, len(graphs) - 1) 85 | if len(self._graphs) > num_layers: 86 | self._enter_point = entry_point 87 | 88 | if connected_subsets is not None: 89 | subset_m = subset_m or self._m 90 | subset_m0 = subset_m0 or self._m0 91 | 92 | for subset in connected_subsets: 93 | num_layers = len(self._graphs) 94 | graphs, entry_point = self.build_cat_subgraph(subset, m=subset_m, m0=subset_m0, ef=ef) 95 | if len(self._graphs) > num_layers: 96 | self._enter_point = entry_point 97 | -------------------------------------------------------------------------------- /cat_hnsw/layer.py: -------------------------------------------------------------------------------- 1 | from typing import Dict 2 | 3 | from cat_hnsw.queue import FixedLengthPQueue 4 | 5 | 6 | class GraphLayer: 7 | 8 | def __init__(self, max_edges): 9 | self.max_edges = max_edges 10 | self.data: Dict[FixedLengthPQueue] = {} 11 | 12 | def set_max_edges(self, max_edges): 13 | self.max_edges = max_edges 14 | for pq in self.data.values(): 15 | pq.length = self.max_edges 16 | 17 | def add_node(self, node): 18 | self.data[node] = FixedLengthPQueue(self.max_edges) 19 | 20 | def add_min_edge(self, node_from, node_to, distance): 21 | assert node_from != node_to, 'Layer should not contain self-loops' 22 | from_adjacency: FixedLengthPQueue = self.data.get(node_from) 23 | excluded = from_adjacency.push(node_to, distance) 24 | 25 | if excluded is not None: 26 | from_adjacency = self.data.get(node_to) 27 | from_adjacency.push(node_from, distance) 28 | 29 | def iter_neighbours(self, node): 30 | adjacency: FixedLengthPQueue = self.data.get(node) 31 | if adjacency is None: 32 | return 33 | for distance, neighbour_node in adjacency.pq: 34 | yield neighbour_node, -distance 35 | -------------------------------------------------------------------------------- /cat_hnsw/queue.py: -------------------------------------------------------------------------------- 1 | import itertools 2 | import heapq 3 | 4 | 5 | class FixedLengthPQueue(object): 6 | 7 | def __init__(self, length): 8 | """ 9 | :param length: max length of queue. Should be greater then 0 10 | """ 11 | self.pq = [] 12 | self.length = length 13 | 14 | def push(self, elem, priority=0): 15 | """Add a new element or update the priority of an existing element""" 16 | entry = (- priority, elem) 17 | heapq.heappush(self.pq, entry) 18 | if len(self.pq) > self.length: 19 | return self.pop() 20 | 21 | def pop(self): 22 | """Remove and return the lowest priority element. Raise KeyError if empty.""" 23 | while self.pq: 24 | priority, element = heapq.heappop(self.pq) 25 | return element 26 | raise KeyError('pop from an empty priority queue') 27 | 28 | 29 | if __name__ == '__main__': 30 | pq = FixedLengthPQueue(3) 31 | 32 | pq.push(1, 1) 33 | pq.push(2, 0) 34 | pq.push(3, 1) 35 | pq.push(4, 3) 36 | 37 | # Should not include 4 38 | print(pq.pop()) 39 | print(pq.pop()) 40 | print(pq.pop()) 41 | -------------------------------------------------------------------------------- /cat_hnsw/settings.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | ROOT_PATH = os.path.dirname(os.path.dirname(__file__)) 4 | DATA_PATH = os.path.join(ROOT_PATH, 'data') -------------------------------------------------------------------------------- /data/experiments/exp_categorical_connectivity_group_size/group_100.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 400, "variable_param": 1, "precision@10": [1.0, [1.0, 1.0]]} 2 | {"experiment_param": 400, "variable_param": 2, "precision@10": [1.0, [1.0, 1.0]]} 3 | {"experiment_param": 400, "variable_param": 3, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 400, "variable_param": 4, "precision@10": [1.0, [1.0, 1.0]]} 5 | {"experiment_param": 400, "variable_param": 5, "precision@10": [1.0, [1.0, 1.0]]} 6 | {"experiment_param": 400, "variable_param": 6, "precision@10": [1.0, [1.0, 1.0]]} 7 | {"experiment_param": 400, "variable_param": 7, "precision@10": [1.0, [1.0, 1.0]]} 8 | {"experiment_param": 400, "variable_param": 8, "precision@10": [1.0, [1.0, 1.0]]} 9 | {"experiment_param": 400, "variable_param": 9, "precision@10": [1.0, [1.0, 1.0]]} 10 | {"experiment_param": 400, "variable_param": 10, "precision@10": [1.0, [1.0, 1.0]]} 11 | {"experiment_param": 400, "variable_param": 11, "precision@10": [1.0, [1.0, 1.0]]} 12 | {"experiment_param": 400, "variable_param": 12, "precision@10": [1.0, [1.0, 1.0]]} 13 | {"experiment_param": 400, "variable_param": 13, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 400, "variable_param": 14, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 400, "variable_param": 15, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 400, "variable_param": 16, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 400, "variable_param": 17, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 400, "variable_param": 18, "precision@10": [1.0, [1.0, 1.0]]} 19 | {"experiment_param": 400, "variable_param": 19, "precision@10": [1.0, [1.0, 1.0]]} 20 | -------------------------------------------------------------------------------- /data/experiments/exp_categorical_connectivity_group_size/group_100_2.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 1000, "variable_param": 1, "precision@10": [1.0, [1.0, 1.0]]} 2 | {"experiment_param": 1000, "variable_param": 2, "precision@10": [1.0, [1.0, 1.0]]} 3 | {"experiment_param": 1000, "variable_param": 3, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 1000, "variable_param": 4, "precision@10": [0.86, [0.7919917915239952, 0.9280082084760047]]} 5 | {"experiment_param": 1000, "variable_param": 5, "precision@10": [1.0, [1.0, 1.0]]} 6 | {"experiment_param": 1000, "variable_param": 6, "precision@10": [0.64, [0.5459217287420775, 0.7340782712579226]]} 7 | {"experiment_param": 1000, "variable_param": 7, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 8 | {"experiment_param": 1000, "variable_param": 8, "precision@10": [1.0, [1.0, 1.0]]} 9 | {"experiment_param": 1000, "variable_param": 9, "precision@10": [1.0, [1.0, 1.0]]} 10 | {"experiment_param": 1000, "variable_param": 10, "precision@10": [1.0, [1.0, 1.0]]} 11 | {"experiment_param": 1000, "variable_param": 11, "precision@10": [0.52, [0.4220802307169153, 0.6179197692830847]]} 12 | {"experiment_param": 1000, "variable_param": 12, "precision@10": [1.0, [1.0, 1.0]]} 13 | {"experiment_param": 1000, "variable_param": 13, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 1000, "variable_param": 14, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 1000, "variable_param": 15, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 1000, "variable_param": 16, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 1000, "variable_param": 17, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 1000, "variable_param": 18, "precision@10": [1.0, [1.0, 1.0]]} 19 | {"experiment_param": 1000, "variable_param": 19, "precision@10": [1.0, [1.0, 1.0]]} 20 | -------------------------------------------------------------------------------- /data/experiments/exp_categorical_connectivity_group_size/random_group_count.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 1000, "variable_param": 0, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.7161904761904762} 2 | {"experiment_param": 1000, "variable_param": 1, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.7161904761904762} 3 | {"experiment_param": 1000, "variable_param": 2, "precision@10": [0.9942857142857143, [0.9897264998722806, 0.9988449286991481]], "average_position": 1.118095238095238} 4 | {"experiment_param": 1000, "variable_param": 3, "precision@10": [0.98, [0.9715319877586517, 0.9884680122413483]], "average_position": 1.2742857142857142} 5 | {"experiment_param": 1000, "variable_param": 4, "precision@10": [0.9685714285714285, [0.9580182912637397, 0.9791245658791173]], "average_position": 1.5380952380952382} 6 | {"experiment_param": 1000, "variable_param": 5, "precision@10": [0.9714285714285714, [0.9613517199950484, 0.9815054228620944]], "average_position": 1.2952380952380953} 7 | {"experiment_param": 1000, "variable_param": 6, "precision@10": [0.96, [0.94814725192746, 0.97185274807254]], "average_position": 1.4114285714285715} 8 | {"experiment_param": 1000, "variable_param": 7, "precision@10": [0.9771428571428571, [0.9681033772377055, 0.9861823370480087]], "average_position": 0.9647619047619047} 9 | {"experiment_param": 1000, "variable_param": 8, "precision@10": [0.9847619047619047, [0.9773524815231884, 0.992171328000621]], "average_position": 0.679047619047619} 10 | {"experiment_param": 1000, "variable_param": 9, "precision@10": [0.98, [0.9715319877586517, 0.9884680122413483]], "average_position": 0.7428571428571429} 11 | {"experiment_param": 1000, "variable_param": 10, "precision@10": [0.9723809523809523, [0.9624686164393172, 0.9822932883225874]], "average_position": 0.9285714285714286} 12 | {"experiment_param": 1000, "variable_param": 11, "precision@10": [0.9676190476190476, [0.9569124752984636, 0.9783256199396316]], "average_position": 0.9247619047619048} 13 | {"experiment_param": 1000, "variable_param": 12, "precision@10": [0.9838095238095238, [0.9761757592051808, 0.9914432884138668]], "average_position": 0.5171428571428571} 14 | {"experiment_param": 1000, "variable_param": 13, "precision@10": [0.9876190476190476, [0.9809306020552853, 0.99430749318281]], "average_position": 0.5438095238095239} 15 | {"experiment_param": 1000, "variable_param": 14, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 16 | {"experiment_param": 1000, "variable_param": 15, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 17 | {"experiment_param": 1000, "variable_param": 16, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 18 | {"experiment_param": 1000, "variable_param": 17, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 19 | {"experiment_param": 1000, "variable_param": 18, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 20 | -------------------------------------------------------------------------------- /data/experiments/exp_categorical_connectivity_group_size_random/group_100.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 2000, "variable_param": 1, "precision@10": [1.0, [1.0, 1.0]]} 2 | {"experiment_param": 2000, "variable_param": 2, "precision@10": [1.0, [1.0, 1.0]]} 3 | {"experiment_param": 2000, "variable_param": 3, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 2000, "variable_param": 4, "precision@10": [1.0, [1.0, 1.0]]} 5 | {"experiment_param": 2000, "variable_param": 5, "precision@10": [1.0, [1.0, 1.0]]} 6 | {"experiment_param": 2000, "variable_param": 6, "precision@10": [1.0, [1.0, 1.0]]} 7 | {"experiment_param": 2000, "variable_param": 7, "precision@10": [1.0, [1.0, 1.0]]} 8 | {"experiment_param": 2000, "variable_param": 8, "precision@10": [1.0, [1.0, 1.0]]} 9 | {"experiment_param": 2000, "variable_param": 9, "precision@10": [1.0, [1.0, 1.0]]} 10 | {"experiment_param": 2000, "variable_param": 10, "precision@10": [1.0, [1.0, 1.0]]} 11 | {"experiment_param": 2000, "variable_param": 11, "precision@10": [1.0, [1.0, 1.0]]} 12 | {"experiment_param": 2000, "variable_param": 12, "precision@10": [1.0, [1.0, 1.0]]} 13 | {"experiment_param": 2000, "variable_param": 13, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 2000, "variable_param": 14, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 2000, "variable_param": 15, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 2000, "variable_param": 16, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 2000, "variable_param": 17, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 2000, "variable_param": 18, "precision@10": [1.0, [1.0, 1.0]]} 19 | {"experiment_param": 2000, "variable_param": 19, "precision@10": [1.0, [1.0, 1.0]]} 20 | {"experiment_param": 2000, "variable_param": 20, "precision@10": [1.0, [1.0, 1.0]]} 21 | {"experiment_param": 2000, "variable_param": 21, "precision@10": [1.0, [1.0, 1.0]]} 22 | {"experiment_param": 2000, "variable_param": 22, "precision@10": [1.0, [1.0, 1.0]]} 23 | {"experiment_param": 2000, "variable_param": 23, "precision@10": [1.0, [1.0, 1.0]]} 24 | {"experiment_param": 2000, "variable_param": 24, "precision@10": [1.0, [1.0, 1.0]]} 25 | {"experiment_param": 2000, "variable_param": 25, "precision@10": [1.0, [1.0, 1.0]]} 26 | {"experiment_param": 2000, "variable_param": 26, "precision@10": [1.0, [1.0, 1.0]]} 27 | {"experiment_param": 2000, "variable_param": 27, "precision@10": [1.0, [1.0, 1.0]]} 28 | {"experiment_param": 2000, "variable_param": 28, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 29 | {"experiment_param": 2000, "variable_param": 29, "precision@10": [1.0, [1.0, 1.0]]} 30 | {"experiment_param": 2000, "variable_param": 30, "precision@10": [1.0, [1.0, 1.0]]} 31 | {"experiment_param": 2000, "variable_param": 31, "precision@10": [1.0, [1.0, 1.0]]} 32 | {"experiment_param": 2000, "variable_param": 32, "precision@10": [1.0, [1.0, 1.0]]} 33 | {"experiment_param": 2000, "variable_param": 33, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 34 | {"experiment_param": 2000, "variable_param": 34, "precision@10": [1.0, [1.0, 1.0]]} 35 | {"experiment_param": 2000, "variable_param": 35, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 36 | {"experiment_param": 2000, "variable_param": 36, "precision@10": [1.0, [1.0, 1.0]]} 37 | {"experiment_param": 2000, "variable_param": 37, "precision@10": [1.0, [1.0, 1.0]]} 38 | {"experiment_param": 2000, "variable_param": 38, "precision@10": [1.0, [1.0, 1.0]]} 39 | {"experiment_param": 2000, "variable_param": 39, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 40 | -------------------------------------------------------------------------------- /data/experiments/exp_categorical_connectivity_group_size_random/group_100_2.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 1000, "variable_param": 1, "precision@10": [1.0, [1.0, 1.0]]} 2 | {"experiment_param": 1000, "variable_param": 2, "precision@10": [1.0, [1.0, 1.0]]} 3 | {"experiment_param": 1000, "variable_param": 3, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 1000, "variable_param": 4, "precision@10": [0.86, [0.7919917915239952, 0.9280082084760047]]} 5 | {"experiment_param": 1000, "variable_param": 5, "precision@10": [1.0, [1.0, 1.0]]} 6 | {"experiment_param": 1000, "variable_param": 6, "precision@10": [0.64, [0.5459217287420775, 0.7340782712579226]]} 7 | {"experiment_param": 1000, "variable_param": 7, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 8 | {"experiment_param": 1000, "variable_param": 8, "precision@10": [1.0, [1.0, 1.0]]} 9 | {"experiment_param": 1000, "variable_param": 9, "precision@10": [1.0, [1.0, 1.0]]} 10 | {"experiment_param": 1000, "variable_param": 10, "precision@10": [1.0, [1.0, 1.0]]} 11 | {"experiment_param": 1000, "variable_param": 11, "precision@10": [0.52, [0.4220802307169153, 0.6179197692830847]]} 12 | {"experiment_param": 1000, "variable_param": 12, "precision@10": [1.0, [1.0, 1.0]]} 13 | {"experiment_param": 1000, "variable_param": 13, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 1000, "variable_param": 14, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 1000, "variable_param": 15, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 1000, "variable_param": 16, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 1000, "variable_param": 17, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 1000, "variable_param": 18, "precision@10": [1.0, [1.0, 1.0]]} 19 | {"experiment_param": 1000, "variable_param": 19, "precision@10": [1.0, [1.0, 1.0]]} 20 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_glove_m0/m0_16.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 16, "variable_param": 30, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 2 | {"experiment_param": 16, "variable_param": 31, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 3 | {"experiment_param": 16, "variable_param": 32, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 4 | {"experiment_param": 16, "variable_param": 33, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 5 | {"experiment_param": 16, "variable_param": 34, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 6 | {"experiment_param": 16, "variable_param": 35, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 7 | {"experiment_param": 16, "variable_param": 36, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 8 | {"experiment_param": 16, "variable_param": 37, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 9 | {"experiment_param": 16, "variable_param": 38, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 10 | {"experiment_param": 16, "variable_param": 39, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 11 | {"experiment_param": 16, "variable_param": 40, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 12 | {"experiment_param": 16, "variable_param": 41, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 13 | {"experiment_param": 16, "variable_param": 42, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 14 | {"experiment_param": 16, "variable_param": 43, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 15 | {"experiment_param": 16, "variable_param": 44, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 16 | {"experiment_param": 16, "variable_param": 45, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 17 | {"experiment_param": 16, "variable_param": 46, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 18 | {"experiment_param": 16, "variable_param": 47, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 19 | {"experiment_param": 16, "variable_param": 48, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 20 | {"experiment_param": 16, "variable_param": 49, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 21 | {"experiment_param": 16, "variable_param": 50, "precision@10": [1.0, [1.0, 1.0]]} 22 | {"experiment_param": 16, "variable_param": 51, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 23 | {"experiment_param": 16, "variable_param": 52, "precision@10": [1.0, [1.0, 1.0]]} 24 | {"experiment_param": 16, "variable_param": 53, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 25 | {"experiment_param": 16, "variable_param": 54, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 26 | {"experiment_param": 16, "variable_param": 55, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 27 | {"experiment_param": 16, "variable_param": 56, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 28 | {"experiment_param": 16, "variable_param": 57, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 29 | {"experiment_param": 16, "variable_param": 58, "precision@10": [1.0, [1.0, 1.0]]} 30 | {"experiment_param": 16, "variable_param": 59, "precision@10": [1.0, [1.0, 1.0]]} 31 | {"experiment_param": 16, "variable_param": 60, "precision@10": [1.0, [1.0, 1.0]]} 32 | {"experiment_param": 16, "variable_param": 61, "precision@10": [1.0, [1.0, 1.0]]} 33 | {"experiment_param": 16, "variable_param": 62, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 34 | {"experiment_param": 16, "variable_param": 63, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 35 | {"experiment_param": 16, "variable_param": 64, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 36 | {"experiment_param": 16, "variable_param": 65, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 37 | {"experiment_param": 16, "variable_param": 66, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 38 | {"experiment_param": 16, "variable_param": 67, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 39 | {"experiment_param": 16, "variable_param": 68, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 40 | {"experiment_param": 16, "variable_param": 69, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 41 | {"experiment_param": 16, "variable_param": 70, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 42 | {"experiment_param": 16, "variable_param": 71, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 43 | {"experiment_param": 16, "variable_param": 72, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 44 | {"experiment_param": 16, "variable_param": 73, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 45 | {"experiment_param": 16, "variable_param": 74, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 46 | {"experiment_param": 16, "variable_param": 75, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 47 | {"experiment_param": 16, "variable_param": 76, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 48 | {"experiment_param": 16, "variable_param": 77, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 49 | {"experiment_param": 16, "variable_param": 78, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 50 | {"experiment_param": 16, "variable_param": 79, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 51 | {"experiment_param": 16, "variable_param": 80, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 52 | {"experiment_param": 16, "variable_param": 81, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 53 | {"experiment_param": 16, "variable_param": 82, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 54 | {"experiment_param": 16, "variable_param": 83, "precision@10": [1.0, [1.0, 1.0]]} 55 | {"experiment_param": 16, "variable_param": 84, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 56 | {"experiment_param": 16, "variable_param": 85, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 57 | {"experiment_param": 16, "variable_param": 86, "precision@10": [0.75, [0.6651310699442871, 0.8348689300557129]]} 58 | {"experiment_param": 16, "variable_param": 87, "precision@10": [0.79, [0.7101690524700379, 0.8698309475299622]]} 59 | {"experiment_param": 16, "variable_param": 88, "precision@10": [0.74, [0.6540292679395162, 0.8259707320604838]]} 60 | {"experiment_param": 16, "variable_param": 89, "precision@10": [0.6, [0.5039817664728937, 0.6960182335271062]]} 61 | {"experiment_param": 16, "variable_param": 90, "precision@10": [0.85, [0.7800152874094276, 0.9199847125905724]]} 62 | {"experiment_param": 16, "variable_param": 91, "precision@10": [0.05, [0.007283575292052945, 0.09271642470794705]]} 63 | {"experiment_param": 16, "variable_param": 92, "precision@10": [0.06, [0.013453434338594993, 0.106546565661405]]} 64 | {"experiment_param": 16, "variable_param": 93, "precision@10": [0.05, [0.007283575292052945, 0.09271642470794705]]} 65 | {"experiment_param": 16, "variable_param": 94, "precision@10": [0.04, [0.0015927065891575137, 0.07840729341084249]]} 66 | {"experiment_param": 16, "variable_param": 95, "precision@10": [0.02, [0.0, 0.04743949578356076]]} 67 | {"experiment_param": 16, "variable_param": 96, "precision@10": [0.17, [0.09637732417251182, 0.2436226758274882]]} 68 | {"experiment_param": 16, "variable_param": 97, "precision@10": [0.05, [0.007283575292052945, 0.09271642470794705]]} 69 | {"experiment_param": 16, "variable_param": 98, "precision@10": [0.09, [0.03390940565345656, 0.14609059434654342]]} 70 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_glove_m0/m0_24.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 24, "variable_param": 30, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 2 | {"experiment_param": 24, "variable_param": 31, "precision@10": [1.0, [1.0, 1.0]]} 3 | {"experiment_param": 24, "variable_param": 32, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 24, "variable_param": 33, "precision@10": [1.0, [1.0, 1.0]]} 5 | {"experiment_param": 24, "variable_param": 34, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 6 | {"experiment_param": 24, "variable_param": 35, "precision@10": [1.0, [1.0, 1.0]]} 7 | {"experiment_param": 24, "variable_param": 36, "precision@10": [1.0, [1.0, 1.0]]} 8 | {"experiment_param": 24, "variable_param": 37, "precision@10": [1.0, [1.0, 1.0]]} 9 | {"experiment_param": 24, "variable_param": 38, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 10 | {"experiment_param": 24, "variable_param": 39, "precision@10": [1.0, [1.0, 1.0]]} 11 | {"experiment_param": 24, "variable_param": 40, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 12 | {"experiment_param": 24, "variable_param": 41, "precision@10": [1.0, [1.0, 1.0]]} 13 | {"experiment_param": 24, "variable_param": 42, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 24, "variable_param": 43, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 24, "variable_param": 44, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 24, "variable_param": 45, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 24, "variable_param": 46, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 24, "variable_param": 47, "precision@10": [1.0, [1.0, 1.0]]} 19 | {"experiment_param": 24, "variable_param": 48, "precision@10": [1.0, [1.0, 1.0]]} 20 | {"experiment_param": 24, "variable_param": 49, "precision@10": [1.0, [1.0, 1.0]]} 21 | {"experiment_param": 24, "variable_param": 50, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 22 | {"experiment_param": 24, "variable_param": 51, "precision@10": [1.0, [1.0, 1.0]]} 23 | {"experiment_param": 24, "variable_param": 52, "precision@10": [1.0, [1.0, 1.0]]} 24 | {"experiment_param": 24, "variable_param": 53, "precision@10": [1.0, [1.0, 1.0]]} 25 | {"experiment_param": 24, "variable_param": 54, "precision@10": [1.0, [1.0, 1.0]]} 26 | {"experiment_param": 24, "variable_param": 55, "precision@10": [1.0, [1.0, 1.0]]} 27 | {"experiment_param": 24, "variable_param": 56, "precision@10": [1.0, [1.0, 1.0]]} 28 | {"experiment_param": 24, "variable_param": 57, "precision@10": [1.0, [1.0, 1.0]]} 29 | {"experiment_param": 24, "variable_param": 58, "precision@10": [1.0, [1.0, 1.0]]} 30 | {"experiment_param": 24, "variable_param": 59, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 31 | {"experiment_param": 24, "variable_param": 60, "precision@10": [1.0, [1.0, 1.0]]} 32 | {"experiment_param": 24, "variable_param": 61, "precision@10": [1.0, [1.0, 1.0]]} 33 | {"experiment_param": 24, "variable_param": 62, "precision@10": [1.0, [1.0, 1.0]]} 34 | {"experiment_param": 24, "variable_param": 63, "precision@10": [1.0, [1.0, 1.0]]} 35 | {"experiment_param": 24, "variable_param": 64, "precision@10": [1.0, [1.0, 1.0]]} 36 | {"experiment_param": 24, "variable_param": 65, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 37 | {"experiment_param": 24, "variable_param": 66, "precision@10": [1.0, [1.0, 1.0]]} 38 | {"experiment_param": 24, "variable_param": 67, "precision@10": [1.0, [1.0, 1.0]]} 39 | {"experiment_param": 24, "variable_param": 68, "precision@10": [1.0, [1.0, 1.0]]} 40 | {"experiment_param": 24, "variable_param": 69, "precision@10": [1.0, [1.0, 1.0]]} 41 | {"experiment_param": 24, "variable_param": 70, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 42 | {"experiment_param": 24, "variable_param": 71, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 43 | {"experiment_param": 24, "variable_param": 72, "precision@10": [1.0, [1.0, 1.0]]} 44 | {"experiment_param": 24, "variable_param": 73, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 45 | {"experiment_param": 24, "variable_param": 74, "precision@10": [1.0, [1.0, 1.0]]} 46 | {"experiment_param": 24, "variable_param": 75, "precision@10": [1.0, [1.0, 1.0]]} 47 | {"experiment_param": 24, "variable_param": 76, "precision@10": [1.0, [1.0, 1.0]]} 48 | {"experiment_param": 24, "variable_param": 77, "precision@10": [1.0, [1.0, 1.0]]} 49 | {"experiment_param": 24, "variable_param": 78, "precision@10": [1.0, [1.0, 1.0]]} 50 | {"experiment_param": 24, "variable_param": 79, "precision@10": [1.0, [1.0, 1.0]]} 51 | {"experiment_param": 24, "variable_param": 80, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 52 | {"experiment_param": 24, "variable_param": 81, "precision@10": [1.0, [1.0, 1.0]]} 53 | {"experiment_param": 24, "variable_param": 82, "precision@10": [1.0, [1.0, 1.0]]} 54 | {"experiment_param": 24, "variable_param": 83, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 55 | {"experiment_param": 24, "variable_param": 84, "precision@10": [1.0, [1.0, 1.0]]} 56 | {"experiment_param": 24, "variable_param": 85, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 57 | {"experiment_param": 24, "variable_param": 86, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 58 | {"experiment_param": 24, "variable_param": 87, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 59 | {"experiment_param": 24, "variable_param": 88, "precision@10": [1.0, [1.0, 1.0]]} 60 | {"experiment_param": 24, "variable_param": 89, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 61 | {"experiment_param": 24, "variable_param": 90, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 62 | {"experiment_param": 24, "variable_param": 91, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 63 | {"experiment_param": 24, "variable_param": 92, "precision@10": [0.52, [0.4220802307169153, 0.6179197692830847]]} 64 | {"experiment_param": 24, "variable_param": 93, "precision@10": [0.11, [0.04867473452597575, 0.17132526547402424]]} 65 | {"experiment_param": 24, "variable_param": 94, "precision@10": [0.07, [0.019992103700796647, 0.12000789629920336]]} 66 | {"experiment_param": 24, "variable_param": 95, "precision@10": [0.13, [0.06408573806675026, 0.19591426193324973]]} 67 | {"experiment_param": 24, "variable_param": 96, "precision@10": [0.14, [0.07199179152399524, 0.2080082084760048]]} 68 | {"experiment_param": 24, "variable_param": 97, "precision@10": [0.09, [0.03390940565345656, 0.14609059434654342]]} 69 | {"experiment_param": 24, "variable_param": 98, "precision@10": [0.17, [0.09637732417251182, 0.2436226758274882]]} 70 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_glove_m0/m0_32.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 32, "variable_param": 30, "precision@10": [1.0, [1.0, 1.0]]} 2 | {"experiment_param": 32, "variable_param": 31, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 3 | {"experiment_param": 32, "variable_param": 32, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 32, "variable_param": 33, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 5 | {"experiment_param": 32, "variable_param": 34, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 6 | {"experiment_param": 32, "variable_param": 35, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 7 | {"experiment_param": 32, "variable_param": 36, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 8 | {"experiment_param": 32, "variable_param": 37, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 9 | {"experiment_param": 32, "variable_param": 38, "precision@10": [1.0, [1.0, 1.0]]} 10 | {"experiment_param": 32, "variable_param": 39, "precision@10": [1.0, [1.0, 1.0]]} 11 | {"experiment_param": 32, "variable_param": 40, "precision@10": [1.0, [1.0, 1.0]]} 12 | {"experiment_param": 32, "variable_param": 41, "precision@10": [1.0, [1.0, 1.0]]} 13 | {"experiment_param": 32, "variable_param": 42, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 32, "variable_param": 43, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 32, "variable_param": 44, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 32, "variable_param": 45, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 17 | {"experiment_param": 32, "variable_param": 46, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 32, "variable_param": 47, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 19 | {"experiment_param": 32, "variable_param": 48, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 20 | {"experiment_param": 32, "variable_param": 49, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 21 | {"experiment_param": 32, "variable_param": 50, "precision@10": [1.0, [1.0, 1.0]]} 22 | {"experiment_param": 32, "variable_param": 51, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 23 | {"experiment_param": 32, "variable_param": 52, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 24 | {"experiment_param": 32, "variable_param": 53, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 25 | {"experiment_param": 32, "variable_param": 54, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 26 | {"experiment_param": 32, "variable_param": 55, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 27 | {"experiment_param": 32, "variable_param": 56, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 28 | {"experiment_param": 32, "variable_param": 57, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 29 | {"experiment_param": 32, "variable_param": 58, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 30 | {"experiment_param": 32, "variable_param": 59, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 31 | {"experiment_param": 32, "variable_param": 60, "precision@10": [1.0, [1.0, 1.0]]} 32 | {"experiment_param": 32, "variable_param": 61, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 33 | {"experiment_param": 32, "variable_param": 62, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 34 | {"experiment_param": 32, "variable_param": 63, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 35 | {"experiment_param": 32, "variable_param": 64, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 36 | {"experiment_param": 32, "variable_param": 65, "precision@10": [1.0, [1.0, 1.0]]} 37 | {"experiment_param": 32, "variable_param": 66, "precision@10": [1.0, [1.0, 1.0]]} 38 | {"experiment_param": 32, "variable_param": 67, "precision@10": [1.0, [1.0, 1.0]]} 39 | {"experiment_param": 32, "variable_param": 68, "precision@10": [1.0, [1.0, 1.0]]} 40 | {"experiment_param": 32, "variable_param": 69, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 41 | {"experiment_param": 32, "variable_param": 70, "precision@10": [1.0, [1.0, 1.0]]} 42 | {"experiment_param": 32, "variable_param": 71, "precision@10": [1.0, [1.0, 1.0]]} 43 | {"experiment_param": 32, "variable_param": 72, "precision@10": [1.0, [1.0, 1.0]]} 44 | {"experiment_param": 32, "variable_param": 73, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 45 | {"experiment_param": 32, "variable_param": 74, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 46 | {"experiment_param": 32, "variable_param": 75, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 47 | {"experiment_param": 32, "variable_param": 76, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 48 | {"experiment_param": 32, "variable_param": 77, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 49 | {"experiment_param": 32, "variable_param": 78, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 50 | {"experiment_param": 32, "variable_param": 79, "precision@10": [1.0, [1.0, 1.0]]} 51 | {"experiment_param": 32, "variable_param": 80, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 52 | {"experiment_param": 32, "variable_param": 81, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 53 | {"experiment_param": 32, "variable_param": 82, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 54 | {"experiment_param": 32, "variable_param": 83, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 55 | {"experiment_param": 32, "variable_param": 84, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 56 | {"experiment_param": 32, "variable_param": 85, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 57 | {"experiment_param": 32, "variable_param": 86, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 58 | {"experiment_param": 32, "variable_param": 87, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 59 | {"experiment_param": 32, "variable_param": 88, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 60 | {"experiment_param": 32, "variable_param": 89, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 61 | {"experiment_param": 32, "variable_param": 90, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 62 | {"experiment_param": 32, "variable_param": 91, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 63 | {"experiment_param": 32, "variable_param": 92, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 64 | {"experiment_param": 32, "variable_param": 93, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 65 | {"experiment_param": 32, "variable_param": 94, "precision@10": [0.81, [0.7331104355256953, 0.8868895644743048]]} 66 | {"experiment_param": 32, "variable_param": 95, "precision@10": [0.88, [0.8163087092715731, 0.943691290728427]]} 67 | {"experiment_param": 32, "variable_param": 96, "precision@10": [0.53, [0.432178356575096, 0.6278216434249041]]} 68 | {"experiment_param": 32, "variable_param": 97, "precision@10": [0.01, [0.0, 0.02950139541798788]]} 69 | {"experiment_param": 32, "variable_param": 98, "precision@10": [0.07, [0.019992103700796647, 0.12000789629920336]]} 70 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_glove_m0/m0_8.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 8, "variable_param": 30, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 2 | {"experiment_param": 8, "variable_param": 31, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 3 | {"experiment_param": 8, "variable_param": 32, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 8, "variable_param": 33, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 5 | {"experiment_param": 8, "variable_param": 34, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 6 | {"experiment_param": 8, "variable_param": 35, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 7 | {"experiment_param": 8, "variable_param": 36, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 8 | {"experiment_param": 8, "variable_param": 37, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 9 | {"experiment_param": 8, "variable_param": 38, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 10 | {"experiment_param": 8, "variable_param": 39, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 11 | {"experiment_param": 8, "variable_param": 40, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 12 | {"experiment_param": 8, "variable_param": 41, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 13 | {"experiment_param": 8, "variable_param": 42, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 14 | {"experiment_param": 8, "variable_param": 43, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 15 | {"experiment_param": 8, "variable_param": 44, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 16 | {"experiment_param": 8, "variable_param": 45, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 17 | {"experiment_param": 8, "variable_param": 46, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 18 | {"experiment_param": 8, "variable_param": 47, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 19 | {"experiment_param": 8, "variable_param": 48, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 20 | {"experiment_param": 8, "variable_param": 49, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 21 | {"experiment_param": 8, "variable_param": 50, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 22 | {"experiment_param": 8, "variable_param": 51, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 23 | {"experiment_param": 8, "variable_param": 52, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 24 | {"experiment_param": 8, "variable_param": 53, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 25 | {"experiment_param": 8, "variable_param": 54, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 26 | {"experiment_param": 8, "variable_param": 55, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 27 | {"experiment_param": 8, "variable_param": 56, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 28 | {"experiment_param": 8, "variable_param": 57, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 29 | {"experiment_param": 8, "variable_param": 58, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 30 | {"experiment_param": 8, "variable_param": 59, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 31 | {"experiment_param": 8, "variable_param": 60, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 32 | {"experiment_param": 8, "variable_param": 61, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 33 | {"experiment_param": 8, "variable_param": 62, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 34 | {"experiment_param": 8, "variable_param": 63, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 35 | {"experiment_param": 8, "variable_param": 64, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 36 | {"experiment_param": 8, "variable_param": 65, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 37 | {"experiment_param": 8, "variable_param": 66, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 38 | {"experiment_param": 8, "variable_param": 67, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 39 | {"experiment_param": 8, "variable_param": 68, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 40 | {"experiment_param": 8, "variable_param": 69, "precision@10": [0.9, [0.8412010804637984, 0.9587989195362017]]} 41 | {"experiment_param": 8, "variable_param": 70, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 42 | {"experiment_param": 8, "variable_param": 71, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 43 | {"experiment_param": 8, "variable_param": 72, "precision@10": [0.88, [0.8163087092715731, 0.943691290728427]]} 44 | {"experiment_param": 8, "variable_param": 73, "precision@10": [0.88, [0.8163087092715731, 0.943691290728427]]} 45 | {"experiment_param": 8, "variable_param": 74, "precision@10": [0.84, [0.7681465334516635, 0.9118534665483364]]} 46 | {"experiment_param": 8, "variable_param": 75, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 47 | {"experiment_param": 8, "variable_param": 76, "precision@10": [0.89, [0.8286747345259757, 0.9513252654740243]]} 48 | {"experiment_param": 8, "variable_param": 77, "precision@10": [0.88, [0.8163087092715731, 0.943691290728427]]} 49 | {"experiment_param": 8, "variable_param": 78, "precision@10": [0.81, [0.7331104355256953, 0.8868895644743048]]} 50 | {"experiment_param": 8, "variable_param": 79, "precision@10": [0.81, [0.7331104355256953, 0.8868895644743048]]} 51 | {"experiment_param": 8, "variable_param": 80, "precision@10": [0.82, [0.7447006426365766, 0.8952993573634233]]} 52 | {"experiment_param": 8, "variable_param": 81, "precision@10": [0.81, [0.7331104355256953, 0.8868895644743048]]} 53 | {"experiment_param": 8, "variable_param": 82, "precision@10": [0.7, [0.6101831668145794, 0.7898168331854205]]} 54 | {"experiment_param": 8, "variable_param": 83, "precision@10": [0.75, [0.6651310699442871, 0.8348689300557129]]} 55 | {"experiment_param": 8, "variable_param": 84, "precision@10": [0.19, [0.11311043552569529, 0.26688956447430473]]} 56 | {"experiment_param": 8, "variable_param": 85, "precision@10": [0.14, [0.07199179152399524, 0.2080082084760048]]} 57 | {"experiment_param": 8, "variable_param": 86, "precision@10": [0.15, [0.08001528740942766, 0.21998471259057234]]} 58 | {"experiment_param": 8, "variable_param": 87, "precision@10": [0.17, [0.09637732417251182, 0.2436226758274882]]} 59 | {"experiment_param": 8, "variable_param": 88, "precision@10": [0.07, [0.019992103700796647, 0.12000789629920336]]} 60 | {"experiment_param": 8, "variable_param": 89, "precision@10": [0.08, [0.026827510007233275, 0.13317248999276673]]} 61 | {"experiment_param": 8, "variable_param": 90, "precision@10": [0.08, [0.026827510007233275, 0.13317248999276673]]} 62 | {"experiment_param": 8, "variable_param": 91, "precision@10": [0.02, [0.0, 0.04743949578356076]]} 63 | {"experiment_param": 8, "variable_param": 92, "precision@10": [0.01, [0.0, 0.02950139541798788]]} 64 | {"experiment_param": 8, "variable_param": 93, "precision@10": [0.01, [0.0, 0.02950139541798788]]} 65 | {"experiment_param": 8, "variable_param": 94, "precision@10": [0.04, [0.0015927065891575137, 0.07840729341084249]]} 66 | {"experiment_param": 8, "variable_param": 95, "precision@10": [0.05, [0.007283575292052945, 0.09271642470794705]]} 67 | {"experiment_param": 8, "variable_param": 96, "precision@10": [0.01, [0.0, 0.02950139541798788]]} 68 | {"experiment_param": 8, "variable_param": 97, "precision@10": [0.08, [0.026827510007233275, 0.13317248999276673]]} 69 | {"experiment_param": 8, "variable_param": 98, "precision@10": [0.09, [0.03390940565345656, 0.14609059434654342]]} 70 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_glove_num_elements/num_10k.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 10000, "variable_param": 30, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 2 | {"experiment_param": 10000, "variable_param": 31, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 3 | {"experiment_param": 10000, "variable_param": 32, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 10000, "variable_param": 33, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 5 | {"experiment_param": 10000, "variable_param": 34, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 6 | {"experiment_param": 10000, "variable_param": 35, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 7 | {"experiment_param": 10000, "variable_param": 36, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 8 | {"experiment_param": 10000, "variable_param": 37, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 9 | {"experiment_param": 10000, "variable_param": 38, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 10 | {"experiment_param": 10000, "variable_param": 39, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 11 | {"experiment_param": 10000, "variable_param": 40, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 12 | {"experiment_param": 10000, "variable_param": 41, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 13 | {"experiment_param": 10000, "variable_param": 42, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 10000, "variable_param": 43, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 10000, "variable_param": 44, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 16 | {"experiment_param": 10000, "variable_param": 45, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 17 | {"experiment_param": 10000, "variable_param": 46, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 18 | {"experiment_param": 10000, "variable_param": 47, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 19 | {"experiment_param": 10000, "variable_param": 48, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 20 | {"experiment_param": 10000, "variable_param": 49, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 21 | {"experiment_param": 10000, "variable_param": 50, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 22 | {"experiment_param": 10000, "variable_param": 51, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 23 | {"experiment_param": 10000, "variable_param": 52, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 24 | {"experiment_param": 10000, "variable_param": 53, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 25 | {"experiment_param": 10000, "variable_param": 54, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 26 | {"experiment_param": 10000, "variable_param": 55, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 27 | {"experiment_param": 10000, "variable_param": 56, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 28 | {"experiment_param": 10000, "variable_param": 57, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 29 | {"experiment_param": 10000, "variable_param": 58, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 30 | {"experiment_param": 10000, "variable_param": 59, "precision@10": [1.0, [1.0, 1.0]]} 31 | {"experiment_param": 10000, "variable_param": 60, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 32 | {"experiment_param": 10000, "variable_param": 61, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 33 | {"experiment_param": 10000, "variable_param": 62, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 34 | {"experiment_param": 10000, "variable_param": 63, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 35 | {"experiment_param": 10000, "variable_param": 64, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 36 | {"experiment_param": 10000, "variable_param": 65, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 37 | {"experiment_param": 10000, "variable_param": 66, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 38 | {"experiment_param": 10000, "variable_param": 67, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 39 | {"experiment_param": 10000, "variable_param": 68, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 40 | {"experiment_param": 10000, "variable_param": 69, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 41 | {"experiment_param": 10000, "variable_param": 70, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 42 | {"experiment_param": 10000, "variable_param": 71, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 43 | {"experiment_param": 10000, "variable_param": 72, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 44 | {"experiment_param": 10000, "variable_param": 73, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 45 | {"experiment_param": 10000, "variable_param": 74, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 46 | {"experiment_param": 10000, "variable_param": 75, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 47 | {"experiment_param": 10000, "variable_param": 76, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 48 | {"experiment_param": 10000, "variable_param": 77, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 49 | {"experiment_param": 10000, "variable_param": 78, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 50 | {"experiment_param": 10000, "variable_param": 79, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 51 | {"experiment_param": 10000, "variable_param": 80, "precision@10": [0.9, [0.8412010804637984, 0.9587989195362017]]} 52 | {"experiment_param": 10000, "variable_param": 81, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 53 | {"experiment_param": 10000, "variable_param": 82, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 54 | {"experiment_param": 10000, "variable_param": 83, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 55 | {"experiment_param": 10000, "variable_param": 84, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 56 | {"experiment_param": 10000, "variable_param": 85, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 57 | {"experiment_param": 10000, "variable_param": 86, "precision@10": [0.91, [0.8539094056534566, 0.9660905943465434]]} 58 | {"experiment_param": 10000, "variable_param": 87, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 59 | {"experiment_param": 10000, "variable_param": 88, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 60 | {"experiment_param": 10000, "variable_param": 89, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 61 | {"experiment_param": 10000, "variable_param": 90, "precision@10": [0.85, [0.7800152874094276, 0.9199847125905724]]} 62 | {"experiment_param": 10000, "variable_param": 91, "precision@10": [0.57, [0.47296693568931614, 0.6670330643106838]]} 63 | {"experiment_param": 10000, "variable_param": 92, "precision@10": [0.59, [0.4936024435617837, 0.6863975564382162]]} 64 | {"experiment_param": 10000, "variable_param": 93, "precision@10": [0.19, [0.11311043552569529, 0.26688956447430473]]} 65 | {"experiment_param": 10000, "variable_param": 94, "precision@10": [0.08, [0.026827510007233275, 0.13317248999276673]]} 66 | {"experiment_param": 10000, "variable_param": 95, "precision@10": [0.09, [0.03390940565345656, 0.14609059434654342]]} 67 | {"experiment_param": 10000, "variable_param": 96, "precision@10": [0.08, [0.026827510007233275, 0.13317248999276673]]} 68 | {"experiment_param": 10000, "variable_param": 97, "precision@10": [0.03, [0.0, 0.06343448095637183]]} 69 | {"experiment_param": 10000, "variable_param": 98, "precision@10": [0.12, [0.056308709271573096, 0.18369129072842688]]} 70 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_glove_num_elements/num_20k.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 20000, "variable_param": 30, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 2 | {"experiment_param": 20000, "variable_param": 31, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 3 | {"experiment_param": 20000, "variable_param": 32, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 4 | {"experiment_param": 20000, "variable_param": 33, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 5 | {"experiment_param": 20000, "variable_param": 34, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 6 | {"experiment_param": 20000, "variable_param": 35, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 7 | {"experiment_param": 20000, "variable_param": 36, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 8 | {"experiment_param": 20000, "variable_param": 37, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 9 | {"experiment_param": 20000, "variable_param": 38, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 10 | {"experiment_param": 20000, "variable_param": 39, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 11 | {"experiment_param": 20000, "variable_param": 40, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 12 | {"experiment_param": 20000, "variable_param": 41, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 13 | {"experiment_param": 20000, "variable_param": 42, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 14 | {"experiment_param": 20000, "variable_param": 43, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 15 | {"experiment_param": 20000, "variable_param": 44, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 16 | {"experiment_param": 20000, "variable_param": 45, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 17 | {"experiment_param": 20000, "variable_param": 46, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 18 | {"experiment_param": 20000, "variable_param": 47, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 19 | {"experiment_param": 20000, "variable_param": 48, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 20 | {"experiment_param": 20000, "variable_param": 49, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 21 | {"experiment_param": 20000, "variable_param": 50, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 22 | {"experiment_param": 20000, "variable_param": 51, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 23 | {"experiment_param": 20000, "variable_param": 52, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 24 | {"experiment_param": 20000, "variable_param": 53, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 25 | {"experiment_param": 20000, "variable_param": 54, "precision@10": [0.91, [0.8539094056534566, 0.9660905943465434]]} 26 | {"experiment_param": 20000, "variable_param": 55, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 27 | {"experiment_param": 20000, "variable_param": 56, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 28 | {"experiment_param": 20000, "variable_param": 57, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 29 | {"experiment_param": 20000, "variable_param": 58, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 30 | {"experiment_param": 20000, "variable_param": 59, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 31 | {"experiment_param": 20000, "variable_param": 60, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 32 | {"experiment_param": 20000, "variable_param": 61, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 33 | {"experiment_param": 20000, "variable_param": 62, "precision@10": [1.0, [1.0, 1.0]]} 34 | {"experiment_param": 20000, "variable_param": 63, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 35 | {"experiment_param": 20000, "variable_param": 64, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 36 | {"experiment_param": 20000, "variable_param": 65, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 37 | {"experiment_param": 20000, "variable_param": 66, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 38 | {"experiment_param": 20000, "variable_param": 67, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 39 | {"experiment_param": 20000, "variable_param": 68, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 40 | {"experiment_param": 20000, "variable_param": 69, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 41 | {"experiment_param": 20000, "variable_param": 70, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 42 | {"experiment_param": 20000, "variable_param": 71, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 43 | {"experiment_param": 20000, "variable_param": 72, "precision@10": [1.0, [1.0, 1.0]]} 44 | {"experiment_param": 20000, "variable_param": 73, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 45 | {"experiment_param": 20000, "variable_param": 74, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 46 | {"experiment_param": 20000, "variable_param": 75, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 47 | {"experiment_param": 20000, "variable_param": 76, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 48 | {"experiment_param": 20000, "variable_param": 77, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 49 | {"experiment_param": 20000, "variable_param": 78, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 50 | {"experiment_param": 20000, "variable_param": 79, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 51 | {"experiment_param": 20000, "variable_param": 80, "precision@10": [0.88, [0.8163087092715731, 0.943691290728427]]} 52 | {"experiment_param": 20000, "variable_param": 81, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 53 | {"experiment_param": 20000, "variable_param": 82, "precision@10": [0.88, [0.8163087092715731, 0.943691290728427]]} 54 | {"experiment_param": 20000, "variable_param": 83, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 55 | {"experiment_param": 20000, "variable_param": 84, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 56 | {"experiment_param": 20000, "variable_param": 85, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 57 | {"experiment_param": 20000, "variable_param": 86, "precision@10": [0.91, [0.8539094056534566, 0.9660905943465434]]} 58 | {"experiment_param": 20000, "variable_param": 87, "precision@10": [0.91, [0.8539094056534566, 0.9660905943465434]]} 59 | {"experiment_param": 20000, "variable_param": 88, "precision@10": [0.6, [0.5039817664728937, 0.6960182335271062]]} 60 | {"experiment_param": 20000, "variable_param": 89, "precision@10": [0.49, [0.3920214023731987, 0.5879785976268013]]} 61 | {"experiment_param": 20000, "variable_param": 90, "precision@10": [0.42, [0.3232643101683205, 0.5167356898316795]]} 62 | {"experiment_param": 20000, "variable_param": 91, "precision@10": [0.35, [0.25651567608909426, 0.4434843239109057]]} 63 | {"experiment_param": 20000, "variable_param": 92, "precision@10": [0.3, [0.2101831668145794, 0.3898168331854206]]} 64 | {"experiment_param": 20000, "variable_param": 93, "precision@10": [0.2, [0.12160144061839782, 0.2783985593816022]]} 65 | {"experiment_param": 20000, "variable_param": 94, "precision@10": [0.04, [0.0015927065891575137, 0.07840729341084249]]} 66 | {"experiment_param": 20000, "variable_param": 95, "precision@10": [0.05, [0.007283575292052945, 0.09271642470794705]]} 67 | {"experiment_param": 20000, "variable_param": 96, "precision@10": [0.08, [0.026827510007233275, 0.13317248999276673]]} 68 | {"experiment_param": 20000, "variable_param": 97, "precision@10": [0.07, [0.019992103700796647, 0.12000789629920336]]} 69 | {"experiment_param": 20000, "variable_param": 98, "precision@10": [0.05, [0.007283575292052945, 0.09271642470794705]]} 70 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_glove_num_elements/num_30k.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 30000, "variable_param": 30, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 2 | {"experiment_param": 30000, "variable_param": 31, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 3 | {"experiment_param": 30000, "variable_param": 32, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 4 | {"experiment_param": 30000, "variable_param": 33, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 5 | {"experiment_param": 30000, "variable_param": 34, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 6 | {"experiment_param": 30000, "variable_param": 35, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 7 | {"experiment_param": 30000, "variable_param": 36, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 8 | {"experiment_param": 30000, "variable_param": 37, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 9 | {"experiment_param": 30000, "variable_param": 38, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 10 | {"experiment_param": 30000, "variable_param": 39, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 11 | {"experiment_param": 30000, "variable_param": 40, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 12 | {"experiment_param": 30000, "variable_param": 41, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 13 | {"experiment_param": 30000, "variable_param": 42, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 14 | {"experiment_param": 30000, "variable_param": 43, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 15 | {"experiment_param": 30000, "variable_param": 44, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 16 | {"experiment_param": 30000, "variable_param": 45, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 17 | {"experiment_param": 30000, "variable_param": 46, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 18 | {"experiment_param": 30000, "variable_param": 47, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 19 | {"experiment_param": 30000, "variable_param": 48, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 20 | {"experiment_param": 30000, "variable_param": 49, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 21 | {"experiment_param": 30000, "variable_param": 50, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 22 | {"experiment_param": 30000, "variable_param": 51, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 23 | {"experiment_param": 30000, "variable_param": 52, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 24 | {"experiment_param": 30000, "variable_param": 53, "precision@10": [1.0, [1.0, 1.0]]} 25 | {"experiment_param": 30000, "variable_param": 54, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 26 | {"experiment_param": 30000, "variable_param": 55, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 27 | {"experiment_param": 30000, "variable_param": 56, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 28 | {"experiment_param": 30000, "variable_param": 57, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 29 | {"experiment_param": 30000, "variable_param": 58, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 30 | {"experiment_param": 30000, "variable_param": 59, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 31 | {"experiment_param": 30000, "variable_param": 60, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 32 | {"experiment_param": 30000, "variable_param": 61, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 33 | {"experiment_param": 30000, "variable_param": 62, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 34 | {"experiment_param": 30000, "variable_param": 63, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 35 | {"experiment_param": 30000, "variable_param": 64, "precision@10": [1.0, [1.0, 1.0]]} 36 | {"experiment_param": 30000, "variable_param": 65, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 37 | {"experiment_param": 30000, "variable_param": 66, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 38 | {"experiment_param": 30000, "variable_param": 67, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 39 | {"experiment_param": 30000, "variable_param": 68, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 40 | {"experiment_param": 30000, "variable_param": 69, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 41 | {"experiment_param": 30000, "variable_param": 70, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 42 | {"experiment_param": 30000, "variable_param": 71, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 43 | {"experiment_param": 30000, "variable_param": 72, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 44 | {"experiment_param": 30000, "variable_param": 73, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 45 | {"experiment_param": 30000, "variable_param": 74, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 46 | {"experiment_param": 30000, "variable_param": 75, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 47 | {"experiment_param": 30000, "variable_param": 76, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 48 | {"experiment_param": 30000, "variable_param": 77, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 49 | {"experiment_param": 30000, "variable_param": 78, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 50 | {"experiment_param": 30000, "variable_param": 79, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 51 | {"experiment_param": 30000, "variable_param": 80, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 52 | {"experiment_param": 30000, "variable_param": 81, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 53 | {"experiment_param": 30000, "variable_param": 82, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 54 | {"experiment_param": 30000, "variable_param": 83, "precision@10": [0.85, [0.7800152874094276, 0.9199847125905724]]} 55 | {"experiment_param": 30000, "variable_param": 84, "precision@10": [0.9, [0.8412010804637984, 0.9587989195362017]]} 56 | {"experiment_param": 30000, "variable_param": 85, "precision@10": [0.9, [0.8412010804637984, 0.9587989195362017]]} 57 | {"experiment_param": 30000, "variable_param": 86, "precision@10": [0.86, [0.7919917915239952, 0.9280082084760047]]} 58 | {"experiment_param": 30000, "variable_param": 87, "precision@10": [0.76, [0.676293244663611, 0.8437067553363891]]} 59 | {"experiment_param": 30000, "variable_param": 88, "precision@10": [0.79, [0.7101690524700379, 0.8698309475299622]]} 60 | {"experiment_param": 30000, "variable_param": 89, "precision@10": [0.71, [0.6210642720173202, 0.7989357279826798]]} 61 | {"experiment_param": 30000, "variable_param": 90, "precision@10": [0.71, [0.6210642720173202, 0.7989357279826798]]} 62 | {"experiment_param": 30000, "variable_param": 91, "precision@10": [0.59, [0.4936024435617837, 0.6863975564382162]]} 63 | {"experiment_param": 30000, "variable_param": 92, "precision@10": [0.42, [0.3232643101683205, 0.5167356898316795]]} 64 | {"experiment_param": 30000, "variable_param": 93, "precision@10": [0.35, [0.25651567608909426, 0.4434843239109057]]} 65 | {"experiment_param": 30000, "variable_param": 94, "precision@10": [0.09, [0.03390940565345656, 0.14609059434654342]]} 66 | {"experiment_param": 30000, "variable_param": 95, "precision@10": [0.12, [0.056308709271573096, 0.18369129072842688]]} 67 | {"experiment_param": 30000, "variable_param": 96, "precision@10": [0.12, [0.056308709271573096, 0.18369129072842688]]} 68 | {"experiment_param": 30000, "variable_param": 97, "precision@10": [0.07, [0.019992103700796647, 0.12000789629920336]]} 69 | {"experiment_param": 30000, "variable_param": 98, "precision@10": [0.1, [0.04120108046379837, 0.15879891953620165]]} 70 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_m0/m0_16.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 16, "variable_param": 50, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 2 | {"experiment_param": 16, "variable_param": 51, "precision@10": [1.0, [1.0, 1.0]]} 3 | {"experiment_param": 16, "variable_param": 52, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 16, "variable_param": 53, "precision@10": [1.0, [1.0, 1.0]]} 5 | {"experiment_param": 16, "variable_param": 54, "precision@10": [1.0, [1.0, 1.0]]} 6 | {"experiment_param": 16, "variable_param": 55, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 7 | {"experiment_param": 16, "variable_param": 56, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 8 | {"experiment_param": 16, "variable_param": 57, "precision@10": [1.0, [1.0, 1.0]]} 9 | {"experiment_param": 16, "variable_param": 58, "precision@10": [1.0, [1.0, 1.0]]} 10 | {"experiment_param": 16, "variable_param": 59, "precision@10": [1.0, [1.0, 1.0]]} 11 | {"experiment_param": 16, "variable_param": 60, "precision@10": [1.0, [1.0, 1.0]]} 12 | {"experiment_param": 16, "variable_param": 61, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 13 | {"experiment_param": 16, "variable_param": 62, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 16, "variable_param": 63, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 16, "variable_param": 64, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 16, "variable_param": 65, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 16, "variable_param": 66, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 16, "variable_param": 67, "precision@10": [1.0, [1.0, 1.0]]} 19 | {"experiment_param": 16, "variable_param": 68, "precision@10": [1.0, [1.0, 1.0]]} 20 | {"experiment_param": 16, "variable_param": 69, "precision@10": [1.0, [1.0, 1.0]]} 21 | {"experiment_param": 16, "variable_param": 70, "precision@10": [1.0, [1.0, 1.0]]} 22 | {"experiment_param": 16, "variable_param": 71, "precision@10": [1.0, [1.0, 1.0]]} 23 | {"experiment_param": 16, "variable_param": 72, "precision@10": [1.0, [1.0, 1.0]]} 24 | {"experiment_param": 16, "variable_param": 73, "precision@10": [1.0, [1.0, 1.0]]} 25 | {"experiment_param": 16, "variable_param": 74, "precision@10": [1.0, [1.0, 1.0]]} 26 | {"experiment_param": 16, "variable_param": 75, "precision@10": [1.0, [1.0, 1.0]]} 27 | {"experiment_param": 16, "variable_param": 76, "precision@10": [1.0, [1.0, 1.0]]} 28 | {"experiment_param": 16, "variable_param": 77, "precision@10": [1.0, [1.0, 1.0]]} 29 | {"experiment_param": 16, "variable_param": 78, "precision@10": [1.0, [1.0, 1.0]]} 30 | {"experiment_param": 16, "variable_param": 79, "precision@10": [1.0, [1.0, 1.0]]} 31 | {"experiment_param": 16, "variable_param": 80, "precision@10": [1.0, [1.0, 1.0]]} 32 | {"experiment_param": 16, "variable_param": 81, "precision@10": [1.0, [1.0, 1.0]]} 33 | {"experiment_param": 16, "variable_param": 82, "precision@10": [1.0, [1.0, 1.0]]} 34 | {"experiment_param": 16, "variable_param": 83, "precision@10": [1.0, [1.0, 1.0]]} 35 | {"experiment_param": 16, "variable_param": 84, "precision@10": [1.0, [1.0, 1.0]]} 36 | {"experiment_param": 16, "variable_param": 85, "precision@10": [1.0, [1.0, 1.0]]} 37 | {"experiment_param": 16, "variable_param": 86, "precision@10": [1.0, [1.0, 1.0]]} 38 | {"experiment_param": 16, "variable_param": 87, "precision@10": [1.0, [1.0, 1.0]]} 39 | {"experiment_param": 16, "variable_param": 88, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 40 | {"experiment_param": 16, "variable_param": 89, "precision@10": [0.3, [0.2101831668145794, 0.3898168331854206]]} 41 | {"experiment_param": 16, "variable_param": 90, "precision@10": [0.3, [0.2101831668145794, 0.3898168331854206]]} 42 | {"experiment_param": 16, "variable_param": 91, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 43 | {"experiment_param": 16, "variable_param": 92, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 44 | {"experiment_param": 16, "variable_param": 93, "precision@10": [0.91, [0.8539094056534566, 0.9660905943465434]]} 45 | {"experiment_param": 16, "variable_param": 94, "precision@10": [0.77, [0.6875183440306313, 0.8524816559693688]]} 46 | {"experiment_param": 16, "variable_param": 95, "precision@10": [0.74, [0.6540292679395162, 0.8259707320604838]]} 47 | {"experiment_param": 16, "variable_param": 96, "precision@10": [0.0, [0.0, 0.0]]} 48 | {"experiment_param": 16, "variable_param": 97, "precision@10": [0.0, [0.0, 0.0]]} 49 | {"experiment_param": 16, "variable_param": 98, "precision@10": [0.12, [0.056308709271573096, 0.18369129072842688]]} 50 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_m0/m0_24.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 24, "variable_param": 50, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 2 | {"experiment_param": 24, "variable_param": 51, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 3 | {"experiment_param": 24, "variable_param": 52, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 24, "variable_param": 53, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 5 | {"experiment_param": 24, "variable_param": 54, "precision@10": [1.0, [1.0, 1.0]]} 6 | {"experiment_param": 24, "variable_param": 55, "precision@10": [1.0, [1.0, 1.0]]} 7 | {"experiment_param": 24, "variable_param": 56, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 8 | {"experiment_param": 24, "variable_param": 57, "precision@10": [1.0, [1.0, 1.0]]} 9 | {"experiment_param": 24, "variable_param": 58, "precision@10": [1.0, [1.0, 1.0]]} 10 | {"experiment_param": 24, "variable_param": 59, "precision@10": [1.0, [1.0, 1.0]]} 11 | {"experiment_param": 24, "variable_param": 60, "precision@10": [1.0, [1.0, 1.0]]} 12 | {"experiment_param": 24, "variable_param": 61, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 13 | {"experiment_param": 24, "variable_param": 62, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 24, "variable_param": 63, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 24, "variable_param": 64, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 24, "variable_param": 65, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 24, "variable_param": 66, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 24, "variable_param": 67, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 19 | {"experiment_param": 24, "variable_param": 68, "precision@10": [1.0, [1.0, 1.0]]} 20 | {"experiment_param": 24, "variable_param": 69, "precision@10": [1.0, [1.0, 1.0]]} 21 | {"experiment_param": 24, "variable_param": 70, "precision@10": [1.0, [1.0, 1.0]]} 22 | {"experiment_param": 24, "variable_param": 71, "precision@10": [1.0, [1.0, 1.0]]} 23 | {"experiment_param": 24, "variable_param": 72, "precision@10": [1.0, [1.0, 1.0]]} 24 | {"experiment_param": 24, "variable_param": 73, "precision@10": [1.0, [1.0, 1.0]]} 25 | {"experiment_param": 24, "variable_param": 74, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 26 | {"experiment_param": 24, "variable_param": 75, "precision@10": [1.0, [1.0, 1.0]]} 27 | {"experiment_param": 24, "variable_param": 76, "precision@10": [1.0, [1.0, 1.0]]} 28 | {"experiment_param": 24, "variable_param": 77, "precision@10": [1.0, [1.0, 1.0]]} 29 | {"experiment_param": 24, "variable_param": 78, "precision@10": [1.0, [1.0, 1.0]]} 30 | {"experiment_param": 24, "variable_param": 79, "precision@10": [1.0, [1.0, 1.0]]} 31 | {"experiment_param": 24, "variable_param": 80, "precision@10": [1.0, [1.0, 1.0]]} 32 | {"experiment_param": 24, "variable_param": 81, "precision@10": [1.0, [1.0, 1.0]]} 33 | {"experiment_param": 24, "variable_param": 82, "precision@10": [1.0, [1.0, 1.0]]} 34 | {"experiment_param": 24, "variable_param": 83, "precision@10": [1.0, [1.0, 1.0]]} 35 | {"experiment_param": 24, "variable_param": 84, "precision@10": [0.84, [0.7681465334516635, 0.9118534665483364]]} 36 | {"experiment_param": 24, "variable_param": 85, "precision@10": [0.9, [0.8412010804637984, 0.9587989195362017]]} 37 | {"experiment_param": 24, "variable_param": 86, "precision@10": [0.82, [0.7447006426365766, 0.8952993573634233]]} 38 | {"experiment_param": 24, "variable_param": 87, "precision@10": [0.89, [0.8286747345259757, 0.9513252654740243]]} 39 | {"experiment_param": 24, "variable_param": 88, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 40 | {"experiment_param": 24, "variable_param": 89, "precision@10": [0.88, [0.8163087092715731, 0.943691290728427]]} 41 | {"experiment_param": 24, "variable_param": 90, "precision@10": [0.89, [0.8286747345259757, 0.9513252654740243]]} 42 | {"experiment_param": 24, "variable_param": 91, "precision@10": [0.85, [0.7800152874094276, 0.9199847125905724]]} 43 | {"experiment_param": 24, "variable_param": 92, "precision@10": [0.88, [0.8163087092715731, 0.943691290728427]]} 44 | {"experiment_param": 24, "variable_param": 93, "precision@10": [0.72, [0.6319978353532177, 0.8080021646467822]]} 45 | {"experiment_param": 24, "variable_param": 94, "precision@10": [1.0, [1.0, 1.0]]} 46 | {"experiment_param": 24, "variable_param": 95, "precision@10": [0.96, [0.9215927065891575, 0.9984072934108424]]} 47 | {"experiment_param": 24, "variable_param": 96, "precision@10": [0.03, [0.0, 0.06343448095637183]]} 48 | {"experiment_param": 24, "variable_param": 97, "precision@10": [0.01, [0.0, 0.02950139541798788]]} 49 | {"experiment_param": 24, "variable_param": 98, "precision@10": [0.1, [0.04120108046379837, 0.15879891953620165]]} 50 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_m0/m0_32.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 32, "variable_param": 50, "precision@10": [1.0, [1.0, 1.0]]} 2 | {"experiment_param": 32, "variable_param": 51, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 3 | {"experiment_param": 32, "variable_param": 52, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 32, "variable_param": 53, "precision@10": [1.0, [1.0, 1.0]]} 5 | {"experiment_param": 32, "variable_param": 54, "precision@10": [1.0, [1.0, 1.0]]} 6 | {"experiment_param": 32, "variable_param": 55, "precision@10": [1.0, [1.0, 1.0]]} 7 | {"experiment_param": 32, "variable_param": 56, "precision@10": [1.0, [1.0, 1.0]]} 8 | {"experiment_param": 32, "variable_param": 57, "precision@10": [1.0, [1.0, 1.0]]} 9 | {"experiment_param": 32, "variable_param": 58, "precision@10": [1.0, [1.0, 1.0]]} 10 | {"experiment_param": 32, "variable_param": 59, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 11 | {"experiment_param": 32, "variable_param": 60, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 12 | {"experiment_param": 32, "variable_param": 61, "precision@10": [1.0, [1.0, 1.0]]} 13 | {"experiment_param": 32, "variable_param": 62, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 32, "variable_param": 63, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 32, "variable_param": 64, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 32, "variable_param": 65, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 32, "variable_param": 66, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 32, "variable_param": 67, "precision@10": [1.0, [1.0, 1.0]]} 19 | {"experiment_param": 32, "variable_param": 68, "precision@10": [1.0, [1.0, 1.0]]} 20 | {"experiment_param": 32, "variable_param": 69, "precision@10": [1.0, [1.0, 1.0]]} 21 | {"experiment_param": 32, "variable_param": 70, "precision@10": [1.0, [1.0, 1.0]]} 22 | {"experiment_param": 32, "variable_param": 71, "precision@10": [1.0, [1.0, 1.0]]} 23 | {"experiment_param": 32, "variable_param": 72, "precision@10": [1.0, [1.0, 1.0]]} 24 | {"experiment_param": 32, "variable_param": 73, "precision@10": [1.0, [1.0, 1.0]]} 25 | {"experiment_param": 32, "variable_param": 74, "precision@10": [1.0, [1.0, 1.0]]} 26 | {"experiment_param": 32, "variable_param": 75, "precision@10": [1.0, [1.0, 1.0]]} 27 | {"experiment_param": 32, "variable_param": 76, "precision@10": [1.0, [1.0, 1.0]]} 28 | {"experiment_param": 32, "variable_param": 77, "precision@10": [1.0, [1.0, 1.0]]} 29 | {"experiment_param": 32, "variable_param": 78, "precision@10": [1.0, [1.0, 1.0]]} 30 | {"experiment_param": 32, "variable_param": 79, "precision@10": [1.0, [1.0, 1.0]]} 31 | {"experiment_param": 32, "variable_param": 80, "precision@10": [1.0, [1.0, 1.0]]} 32 | {"experiment_param": 32, "variable_param": 81, "precision@10": [1.0, [1.0, 1.0]]} 33 | {"experiment_param": 32, "variable_param": 82, "precision@10": [1.0, [1.0, 1.0]]} 34 | {"experiment_param": 32, "variable_param": 83, "precision@10": [1.0, [1.0, 1.0]]} 35 | {"experiment_param": 32, "variable_param": 84, "precision@10": [1.0, [1.0, 1.0]]} 36 | {"experiment_param": 32, "variable_param": 85, "precision@10": [1.0, [1.0, 1.0]]} 37 | {"experiment_param": 32, "variable_param": 86, "precision@10": [1.0, [1.0, 1.0]]} 38 | {"experiment_param": 32, "variable_param": 87, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 39 | {"experiment_param": 32, "variable_param": 88, "precision@10": [0.95, [0.9072835752920528, 0.9927164247079471]]} 40 | {"experiment_param": 32, "variable_param": 89, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 41 | {"experiment_param": 32, "variable_param": 90, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 42 | {"experiment_param": 32, "variable_param": 91, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 43 | {"experiment_param": 32, "variable_param": 92, "precision@10": [0.57, [0.47296693568931614, 0.6670330643106838]]} 44 | {"experiment_param": 32, "variable_param": 93, "precision@10": [1.0, [1.0, 1.0]]} 45 | {"experiment_param": 32, "variable_param": 94, "precision@10": [0.75, [0.6651310699442871, 0.8348689300557129]]} 46 | {"experiment_param": 32, "variable_param": 95, "precision@10": [0.7, [0.6101831668145794, 0.7898168331854205]]} 47 | {"experiment_param": 32, "variable_param": 96, "precision@10": [0.44, [0.34270994637584823, 0.5372900536241518]]} 48 | {"experiment_param": 32, "variable_param": 97, "precision@10": [0.38, [0.28486600512143223, 0.4751339948785678]]} 49 | {"experiment_param": 32, "variable_param": 98, "precision@10": [0.08, [0.026827510007233275, 0.13317248999276673]]} 50 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_m0/m0_8.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 8, "variable_param": 50, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 2 | {"experiment_param": 8, "variable_param": 51, "precision@10": [0.91, [0.8539094056534566, 0.9660905943465434]]} 3 | {"experiment_param": 8, "variable_param": 52, "precision@10": [0.91, [0.8539094056534566, 0.9660905943465434]]} 4 | {"experiment_param": 8, "variable_param": 53, "precision@10": [0.9, [0.8412010804637984, 0.9587989195362017]]} 5 | {"experiment_param": 8, "variable_param": 54, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 6 | {"experiment_param": 8, "variable_param": 55, "precision@10": [0.9, [0.8412010804637984, 0.9587989195362017]]} 7 | {"experiment_param": 8, "variable_param": 56, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 8 | {"experiment_param": 8, "variable_param": 57, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 9 | {"experiment_param": 8, "variable_param": 58, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 10 | {"experiment_param": 8, "variable_param": 59, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 11 | {"experiment_param": 8, "variable_param": 60, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 12 | {"experiment_param": 8, "variable_param": 61, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 13 | {"experiment_param": 8, "variable_param": 62, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 14 | {"experiment_param": 8, "variable_param": 63, "precision@10": [0.69, [0.5993529900246856, 0.7806470099753143]]} 15 | {"experiment_param": 8, "variable_param": 64, "precision@10": [0.7, [0.6101831668145794, 0.7898168331854205]]} 16 | {"experiment_param": 8, "variable_param": 65, "precision@10": [0.63, [0.5353720944380675, 0.7246279055619325]]} 17 | {"experiment_param": 8, "variable_param": 66, "precision@10": [0.7, [0.6101831668145794, 0.7898168331854205]]} 18 | {"experiment_param": 8, "variable_param": 67, "precision@10": [0.74, [0.6540292679395162, 0.8259707320604838]]} 19 | {"experiment_param": 8, "variable_param": 68, "precision@10": [0.71, [0.6210642720173202, 0.7989357279826798]]} 20 | {"experiment_param": 8, "variable_param": 69, "precision@10": [0.7, [0.6101831668145794, 0.7898168331854205]]} 21 | {"experiment_param": 8, "variable_param": 70, "precision@10": [0.73, [0.6429855452491476, 0.8170144547508523]]} 22 | {"experiment_param": 8, "variable_param": 71, "precision@10": [0.73, [0.6429855452491476, 0.8170144547508523]]} 23 | {"experiment_param": 8, "variable_param": 72, "precision@10": [0.76, [0.676293244663611, 0.8437067553363891]]} 24 | {"experiment_param": 8, "variable_param": 73, "precision@10": [0.76, [0.676293244663611, 0.8437067553363891]]} 25 | {"experiment_param": 8, "variable_param": 74, "precision@10": [0.77, [0.6875183440306313, 0.8524816559693688]]} 26 | {"experiment_param": 8, "variable_param": 75, "precision@10": [0.77, [0.6875183440306313, 0.8524816559693688]]} 27 | {"experiment_param": 8, "variable_param": 76, "precision@10": [0.85, [0.7800152874094276, 0.9199847125905724]]} 28 | {"experiment_param": 8, "variable_param": 77, "precision@10": [0.75, [0.6651310699442871, 0.8348689300557129]]} 29 | {"experiment_param": 8, "variable_param": 78, "precision@10": [0.74, [0.6540292679395162, 0.8259707320604838]]} 30 | {"experiment_param": 8, "variable_param": 79, "precision@10": [0.71, [0.6210642720173202, 0.7989357279826798]]} 31 | {"experiment_param": 8, "variable_param": 80, "precision@10": [0.8, [0.7216014406183978, 0.8783985593816023]]} 32 | {"experiment_param": 8, "variable_param": 81, "precision@10": [0.62, [0.5248660051214322, 0.7151339948785678]]} 33 | {"experiment_param": 8, "variable_param": 82, "precision@10": [0.58, [0.4832643101683205, 0.6767356898316794]]} 34 | {"experiment_param": 8, "variable_param": 83, "precision@10": [0.58, [0.4832643101683205, 0.6767356898316794]]} 35 | {"experiment_param": 8, "variable_param": 84, "precision@10": [0.43, [0.3329669356893161, 0.5270330643106839]]} 36 | {"experiment_param": 8, "variable_param": 85, "precision@10": [0.34, [0.2471547869104841, 0.43284521308951596]]} 37 | {"experiment_param": 8, "variable_param": 86, "precision@10": [0.24, [0.156293244663611, 0.323706755336389]]} 38 | {"experiment_param": 8, "variable_param": 87, "precision@10": [0.2, [0.12160144061839782, 0.2783985593816022]]} 39 | {"experiment_param": 8, "variable_param": 88, "precision@10": [0.29, [0.20106427201732024, 0.3789357279826797]]} 40 | {"experiment_param": 8, "variable_param": 89, "precision@10": [0.27, [0.1829855452491477, 0.35701445475085236]]} 41 | {"experiment_param": 8, "variable_param": 90, "precision@10": [0.48, [0.38208023071691527, 0.5779197692830846]]} 42 | {"experiment_param": 8, "variable_param": 91, "precision@10": [0.23, [0.1475183440306313, 0.3124816559693687]]} 43 | {"experiment_param": 8, "variable_param": 92, "precision@10": [0.19, [0.11311043552569529, 0.26688956447430473]]} 44 | {"experiment_param": 8, "variable_param": 93, "precision@10": [0.19, [0.11311043552569529, 0.26688956447430473]]} 45 | {"experiment_param": 8, "variable_param": 94, "precision@10": [0.21, [0.1301690524700379, 0.2898309475299621]]} 46 | {"experiment_param": 8, "variable_param": 95, "precision@10": [0.28, [0.19199783535321785, 0.3680021646467822]]} 47 | {"experiment_param": 8, "variable_param": 96, "precision@10": [0.43, [0.3329669356893161, 0.5270330643106839]]} 48 | {"experiment_param": 8, "variable_param": 97, "precision@10": [0.62, [0.5248660051214322, 0.7151339948785678]]} 49 | {"experiment_param": 8, "variable_param": 98, "precision@10": [0.6, [0.5039817664728937, 0.6960182335271062]]} 50 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_num_elements/num_10k.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 10000, "variable_param": 50, "precision@10": [1.0, [1.0, 1.0]]} 2 | {"experiment_param": 10000, "variable_param": 51, "precision@10": [1.0, [1.0, 1.0]]} 3 | {"experiment_param": 10000, "variable_param": 52, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 10000, "variable_param": 53, "precision@10": [1.0, [1.0, 1.0]]} 5 | {"experiment_param": 10000, "variable_param": 54, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 6 | {"experiment_param": 10000, "variable_param": 55, "precision@10": [1.0, [1.0, 1.0]]} 7 | {"experiment_param": 10000, "variable_param": 56, "precision@10": [1.0, [1.0, 1.0]]} 8 | {"experiment_param": 10000, "variable_param": 57, "precision@10": [1.0, [1.0, 1.0]]} 9 | {"experiment_param": 10000, "variable_param": 58, "precision@10": [1.0, [1.0, 1.0]]} 10 | {"experiment_param": 10000, "variable_param": 59, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 11 | {"experiment_param": 10000, "variable_param": 60, "precision@10": [1.0, [1.0, 1.0]]} 12 | {"experiment_param": 10000, "variable_param": 61, "precision@10": [1.0, [1.0, 1.0]]} 13 | {"experiment_param": 10000, "variable_param": 62, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 10000, "variable_param": 63, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 10000, "variable_param": 64, "precision@10": [1.0, [1.0, 1.0]]} 16 | {"experiment_param": 10000, "variable_param": 65, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 10000, "variable_param": 66, "precision@10": [1.0, [1.0, 1.0]]} 18 | {"experiment_param": 10000, "variable_param": 67, "precision@10": [1.0, [1.0, 1.0]]} 19 | {"experiment_param": 10000, "variable_param": 68, "precision@10": [1.0, [1.0, 1.0]]} 20 | {"experiment_param": 10000, "variable_param": 69, "precision@10": [1.0, [1.0, 1.0]]} 21 | {"experiment_param": 10000, "variable_param": 70, "precision@10": [1.0, [1.0, 1.0]]} 22 | {"experiment_param": 10000, "variable_param": 71, "precision@10": [1.0, [1.0, 1.0]]} 23 | {"experiment_param": 10000, "variable_param": 72, "precision@10": [1.0, [1.0, 1.0]]} 24 | {"experiment_param": 10000, "variable_param": 73, "precision@10": [1.0, [1.0, 1.0]]} 25 | {"experiment_param": 10000, "variable_param": 74, "precision@10": [1.0, [1.0, 1.0]]} 26 | {"experiment_param": 10000, "variable_param": 75, "precision@10": [1.0, [1.0, 1.0]]} 27 | {"experiment_param": 10000, "variable_param": 76, "precision@10": [1.0, [1.0, 1.0]]} 28 | {"experiment_param": 10000, "variable_param": 77, "precision@10": [0.93, [0.8799921037007967, 0.9800078962992034]]} 29 | {"experiment_param": 10000, "variable_param": 78, "precision@10": [0.92, [0.8668275100072333, 0.9731724899927667]]} 30 | {"experiment_param": 10000, "variable_param": 79, "precision@10": [0.61, [0.5144027692114916, 0.7055972307885083]]} 31 | {"experiment_param": 10000, "variable_param": 80, "precision@10": [0.7, [0.6101831668145794, 0.7898168331854205]]} 32 | {"experiment_param": 10000, "variable_param": 81, "precision@10": [0.57, [0.47296693568931614, 0.6670330643106838]]} 33 | {"experiment_param": 10000, "variable_param": 82, "precision@10": [0.54, [0.4423158983733576, 0.6376841016266425]]} 34 | {"experiment_param": 10000, "variable_param": 83, "precision@10": [0.65, [0.5565156760890944, 0.7434843239109057]]} 35 | {"experiment_param": 10000, "variable_param": 84, "precision@10": [0.41, [0.3136024435617837, 0.5063975564382163]]} 36 | {"experiment_param": 10000, "variable_param": 85, "precision@10": [0.36, [0.26592172874207737, 0.4540782712579226]]} 37 | {"experiment_param": 10000, "variable_param": 86, "precision@10": [0.42, [0.3232643101683205, 0.5167356898316795]]} 38 | {"experiment_param": 10000, "variable_param": 87, "precision@10": [0.48, [0.38208023071691527, 0.5779197692830846]]} 39 | {"experiment_param": 10000, "variable_param": 88, "precision@10": [0.01, [0.0, 0.02950139541798788]]} 40 | {"experiment_param": 10000, "variable_param": 89, "precision@10": [0.0, [0.0, 0.0]]} 41 | {"experiment_param": 10000, "variable_param": 90, "precision@10": [0.02, [0.0, 0.04743949578356076]]} 42 | {"experiment_param": 10000, "variable_param": 91, "precision@10": [0.0, [0.0, 0.0]]} 43 | {"experiment_param": 10000, "variable_param": 92, "precision@10": [0.01, [0.0, 0.02950139541798788]]} 44 | {"experiment_param": 10000, "variable_param": 93, "precision@10": [0.0, [0.0, 0.0]]} 45 | {"experiment_param": 10000, "variable_param": 94, "precision@10": [0.01, [0.0, 0.02950139541798788]]} 46 | {"experiment_param": 10000, "variable_param": 95, "precision@10": [0.02, [0.0, 0.04743949578356076]]} 47 | {"experiment_param": 10000, "variable_param": 96, "precision@10": [0.13, [0.06408573806675026, 0.19591426193324973]]} 48 | {"experiment_param": 10000, "variable_param": 97, "precision@10": [0.09, [0.03390940565345656, 0.14609059434654342]]} 49 | {"experiment_param": 10000, "variable_param": 98, "precision@10": [0.27, [0.1829855452491477, 0.35701445475085236]]} 50 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_num_elements/num_20k.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 20000, "variable_param": 50, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 2 | {"experiment_param": 20000, "variable_param": 51, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 3 | {"experiment_param": 20000, "variable_param": 52, "precision@10": [1.0, [1.0, 1.0]]} 4 | {"experiment_param": 20000, "variable_param": 53, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 5 | {"experiment_param": 20000, "variable_param": 54, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 6 | {"experiment_param": 20000, "variable_param": 55, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 7 | {"experiment_param": 20000, "variable_param": 56, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 8 | {"experiment_param": 20000, "variable_param": 57, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 9 | {"experiment_param": 20000, "variable_param": 58, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 10 | {"experiment_param": 20000, "variable_param": 59, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 11 | {"experiment_param": 20000, "variable_param": 60, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 12 | {"experiment_param": 20000, "variable_param": 61, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 13 | {"experiment_param": 20000, "variable_param": 62, "precision@10": [1.0, [1.0, 1.0]]} 14 | {"experiment_param": 20000, "variable_param": 63, "precision@10": [1.0, [1.0, 1.0]]} 15 | {"experiment_param": 20000, "variable_param": 64, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 16 | {"experiment_param": 20000, "variable_param": 65, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 20000, "variable_param": 66, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 18 | {"experiment_param": 20000, "variable_param": 67, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 19 | {"experiment_param": 20000, "variable_param": 68, "precision@10": [1.0, [1.0, 1.0]]} 20 | {"experiment_param": 20000, "variable_param": 69, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 21 | {"experiment_param": 20000, "variable_param": 70, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 22 | {"experiment_param": 20000, "variable_param": 71, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 23 | {"experiment_param": 20000, "variable_param": 72, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 24 | {"experiment_param": 20000, "variable_param": 73, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 25 | {"experiment_param": 20000, "variable_param": 74, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 26 | {"experiment_param": 20000, "variable_param": 75, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 27 | {"experiment_param": 20000, "variable_param": 76, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 28 | {"experiment_param": 20000, "variable_param": 77, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 29 | {"experiment_param": 20000, "variable_param": 78, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 30 | {"experiment_param": 20000, "variable_param": 79, "precision@10": [1.0, [1.0, 1.0]]} 31 | {"experiment_param": 20000, "variable_param": 80, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 32 | {"experiment_param": 20000, "variable_param": 81, "precision@10": [1.0, [1.0, 1.0]]} 33 | {"experiment_param": 20000, "variable_param": 82, "precision@10": [1.0, [1.0, 1.0]]} 34 | {"experiment_param": 20000, "variable_param": 83, "precision@10": [1.0, [1.0, 1.0]]} 35 | {"experiment_param": 20000, "variable_param": 84, "precision@10": [1.0, [1.0, 1.0]]} 36 | {"experiment_param": 20000, "variable_param": 85, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 37 | {"experiment_param": 20000, "variable_param": 86, "precision@10": [1.0, [1.0, 1.0]]} 38 | {"experiment_param": 20000, "variable_param": 87, "precision@10": [0.82, [0.7447006426365766, 0.8952993573634233]]} 39 | {"experiment_param": 20000, "variable_param": 88, "precision@10": [0.76, [0.676293244663611, 0.8437067553363891]]} 40 | {"experiment_param": 20000, "variable_param": 89, "precision@10": [0.33, [0.2378400007999419, 0.42215999920005814]]} 41 | {"experiment_param": 20000, "variable_param": 90, "precision@10": [0.07, [0.019992103700796647, 0.12000789629920336]]} 42 | {"experiment_param": 20000, "variable_param": 91, "precision@10": [0.12, [0.056308709271573096, 0.18369129072842688]]} 43 | {"experiment_param": 20000, "variable_param": 92, "precision@10": [0.15, [0.08001528740942766, 0.21998471259057234]]} 44 | {"experiment_param": 20000, "variable_param": 93, "precision@10": [0.0, [0.0, 0.0]]} 45 | {"experiment_param": 20000, "variable_param": 94, "precision@10": [0.0, [0.0, 0.0]]} 46 | {"experiment_param": 20000, "variable_param": 95, "precision@10": [0.0, [0.0, 0.0]]} 47 | {"experiment_param": 20000, "variable_param": 96, "precision@10": [0.0, [0.0, 0.0]]} 48 | {"experiment_param": 20000, "variable_param": 97, "precision@10": [0.02, [0.0, 0.04743949578356076]]} 49 | {"experiment_param": 20000, "variable_param": 98, "precision@10": [0.09, [0.03390940565345656, 0.14609059434654342]]} 50 | -------------------------------------------------------------------------------- /data/experiments/exp_connectivity_num_elements/num_30k.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 30000, "variable_param": 50, "precision@10": [0.94, [0.8934534343385949, 0.986546565661405]]} 2 | {"experiment_param": 30000, "variable_param": 51, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 3 | {"experiment_param": 30000, "variable_param": 52, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 4 | {"experiment_param": 30000, "variable_param": 53, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 5 | {"experiment_param": 30000, "variable_param": 54, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 6 | {"experiment_param": 30000, "variable_param": 55, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 7 | {"experiment_param": 30000, "variable_param": 56, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 8 | {"experiment_param": 30000, "variable_param": 57, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 9 | {"experiment_param": 30000, "variable_param": 58, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 10 | {"experiment_param": 30000, "variable_param": 59, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 11 | {"experiment_param": 30000, "variable_param": 60, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 12 | {"experiment_param": 30000, "variable_param": 61, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 13 | {"experiment_param": 30000, "variable_param": 62, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 14 | {"experiment_param": 30000, "variable_param": 63, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 15 | {"experiment_param": 30000, "variable_param": 64, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 16 | {"experiment_param": 30000, "variable_param": 65, "precision@10": [1.0, [1.0, 1.0]]} 17 | {"experiment_param": 30000, "variable_param": 66, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 18 | {"experiment_param": 30000, "variable_param": 67, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 19 | {"experiment_param": 30000, "variable_param": 68, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 20 | {"experiment_param": 30000, "variable_param": 69, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 21 | {"experiment_param": 30000, "variable_param": 70, "precision@10": [1.0, [1.0, 1.0]]} 22 | {"experiment_param": 30000, "variable_param": 71, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 23 | {"experiment_param": 30000, "variable_param": 72, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 24 | {"experiment_param": 30000, "variable_param": 73, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 25 | {"experiment_param": 30000, "variable_param": 74, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 26 | {"experiment_param": 30000, "variable_param": 75, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 27 | {"experiment_param": 30000, "variable_param": 76, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 28 | {"experiment_param": 30000, "variable_param": 77, "precision@10": [1.0, [1.0, 1.0]]} 29 | {"experiment_param": 30000, "variable_param": 78, "precision@10": [1.0, [1.0, 1.0]]} 30 | {"experiment_param": 30000, "variable_param": 79, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 31 | {"experiment_param": 30000, "variable_param": 80, "precision@10": [0.99, [0.9704986045820121, 1.0]]} 32 | {"experiment_param": 30000, "variable_param": 81, "precision@10": [1.0, [1.0, 1.0]]} 33 | {"experiment_param": 30000, "variable_param": 82, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 34 | {"experiment_param": 30000, "variable_param": 83, "precision@10": [0.97, [0.9365655190436282, 1.0]]} 35 | {"experiment_param": 30000, "variable_param": 84, "precision@10": [1.0, [1.0, 1.0]]} 36 | {"experiment_param": 30000, "variable_param": 85, "precision@10": [0.98, [0.9525605042164392, 1.0]]} 37 | {"experiment_param": 30000, "variable_param": 86, "precision@10": [1.0, [1.0, 1.0]]} 38 | {"experiment_param": 30000, "variable_param": 87, "precision@10": [1.0, [1.0, 1.0]]} 39 | {"experiment_param": 30000, "variable_param": 88, "precision@10": [0.41, [0.3136024435617837, 0.5063975564382163]]} 40 | {"experiment_param": 30000, "variable_param": 89, "precision@10": [0.48, [0.38208023071691527, 0.5779197692830846]]} 41 | {"experiment_param": 30000, "variable_param": 90, "precision@10": [0.55, [0.45249302291006066, 0.6475069770899394]]} 42 | {"experiment_param": 30000, "variable_param": 91, "precision@10": [0.13, [0.06408573806675026, 0.19591426193324973]]} 43 | {"experiment_param": 30000, "variable_param": 92, "precision@10": [0.17, [0.09637732417251182, 0.2436226758274882]]} 44 | {"experiment_param": 30000, "variable_param": 93, "precision@10": [0.26, [0.17402926793951617, 0.34597073206048384]]} 45 | {"experiment_param": 30000, "variable_param": 94, "precision@10": [0.24, [0.156293244663611, 0.323706755336389]]} 46 | {"experiment_param": 30000, "variable_param": 95, "precision@10": [0.31, [0.21935299002468567, 0.4006470099753143]]} 47 | {"experiment_param": 30000, "variable_param": 96, "precision@10": [0.07, [0.019992103700796647, 0.12000789629920336]]} 48 | {"experiment_param": 30000, "variable_param": 97, "precision@10": [0.0, [0.0, 0.0]]} 49 | {"experiment_param": 30000, "variable_param": 98, "precision@10": [0.0, [0.0, 0.0]]} 50 | -------------------------------------------------------------------------------- /data/experiments/exp_random_groups/random_group_count.jsonl: -------------------------------------------------------------------------------- 1 | {"experiment_param": 1000, "variable_param": 0, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.7161904761904762} 2 | {"experiment_param": 1000, "variable_param": 1, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.7161904761904762} 3 | {"experiment_param": 1000, "variable_param": 2, "precision@10": [0.9942857142857143, [0.9897264998722806, 0.9988449286991481]], "average_position": 1.118095238095238} 4 | {"experiment_param": 1000, "variable_param": 3, "precision@10": [0.98, [0.9715319877586517, 0.9884680122413483]], "average_position": 1.2742857142857142} 5 | {"experiment_param": 1000, "variable_param": 4, "precision@10": [0.9685714285714285, [0.9580182912637397, 0.9791245658791173]], "average_position": 1.5380952380952382} 6 | {"experiment_param": 1000, "variable_param": 5, "precision@10": [0.9714285714285714, [0.9613517199950484, 0.9815054228620944]], "average_position": 1.2952380952380953} 7 | {"experiment_param": 1000, "variable_param": 6, "precision@10": [0.96, [0.94814725192746, 0.97185274807254]], "average_position": 1.4114285714285715} 8 | {"experiment_param": 1000, "variable_param": 7, "precision@10": [0.9771428571428571, [0.9681033772377055, 0.9861823370480087]], "average_position": 0.9647619047619047} 9 | {"experiment_param": 1000, "variable_param": 8, "precision@10": [0.9847619047619047, [0.9773524815231884, 0.992171328000621]], "average_position": 0.679047619047619} 10 | {"experiment_param": 1000, "variable_param": 9, "precision@10": [0.98, [0.9715319877586517, 0.9884680122413483]], "average_position": 0.7428571428571429} 11 | {"experiment_param": 1000, "variable_param": 10, "precision@10": [0.9723809523809523, [0.9624686164393172, 0.9822932883225874]], "average_position": 0.9285714285714286} 12 | {"experiment_param": 1000, "variable_param": 11, "precision@10": [0.9676190476190476, [0.9569124752984636, 0.9783256199396316]], "average_position": 0.9247619047619048} 13 | {"experiment_param": 1000, "variable_param": 12, "precision@10": [0.9838095238095238, [0.9761757592051808, 0.9914432884138668]], "average_position": 0.5171428571428571} 14 | {"experiment_param": 1000, "variable_param": 13, "precision@10": [0.9876190476190476, [0.9809306020552853, 0.99430749318281]], "average_position": 0.5438095238095239} 15 | {"experiment_param": 1000, "variable_param": 14, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 16 | {"experiment_param": 1000, "variable_param": 15, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 17 | {"experiment_param": 1000, "variable_param": 16, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 18 | {"experiment_param": 1000, "variable_param": 17, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 19 | {"experiment_param": 1000, "variable_param": 18, "precision@10": [1.0, [1.0, 1.0]], "average_position": 0.16476190476190475} 20 | -------------------------------------------------------------------------------- /example_nmslib.py: -------------------------------------------------------------------------------- 1 | import nmslib as nmslib 2 | import numpy 3 | 4 | if __name__ == '__main__': 5 | 6 | data = numpy.random.randn(10000, 100).astype(numpy.float32) 7 | 8 | # initialize a new index, using a HNSW index on Cosine Similarity 9 | index = nmslib.init(method='hnsw', space='cosinesimil') 10 | index.addDataPointBatch(data) 11 | index.createIndex({'post': 0}, print_progress=True) 12 | 13 | index.saveIndex('my_index.dat') 14 | 15 | -------------------------------------------------------------------------------- /experiments/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generall/hnsw-python/62d8751ace246533de51295b85b935251a97f5de/experiments/__init__.py -------------------------------------------------------------------------------- /experiments/additional_category_connectivity.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pickle 3 | import random 4 | from collections import defaultdict 5 | 6 | import numpy as np 7 | from gensim.models import KeyedVectors 8 | 9 | from cat_hnsw.benchmark.runner import BaseExperiment 10 | from cat_hnsw.hnsw import HNSW 11 | from cat_hnsw.hnsw_cat import HNSWCat 12 | from cat_hnsw.hnsw_consistent_build import HNSWConsistentBuild 13 | from cat_hnsw.settings import DATA_PATH 14 | 15 | 16 | class CategorySizeConnectivityExperiment(BaseExperiment): 17 | 18 | def __init__(self, experiment_name, m=16, ef=128, dim=50, num_elements=10000): 19 | super().__init__(experiment_name, m, ef, dim, num_elements) 20 | model = KeyedVectors.load_word2vec_format(os.path.join(DATA_PATH, 'glove_50k_50.txt')) 21 | 22 | self.glove_train = model.vectors[:self.num_elements] 23 | self.glove_test = model.vectors[self.num_elements:] 24 | 25 | def add_batch(self, index: HNSWConsistentBuild, data, param): 26 | categories = {} 27 | 28 | for i in range(param): 29 | categories[i % param] = range(i, data.shape[0], param) 30 | 31 | index.add_batch(data, categories=categories) 32 | 33 | def generate_index_class(self, param): 34 | return HNSWConsistentBuild('cosine', m=self.m, ef=self.ef) 35 | 36 | def generate_data(self, param): 37 | return self.glove_train 38 | 39 | def get_random_vector(self): 40 | num_test = self.glove_test.shape[0] 41 | vect_id = random.randint(0, num_test - 1) 42 | return self.glove_test[vect_id:vect_id + 1] 43 | 44 | @classmethod 45 | def select_groups(cls, experiment_param, variable_param): 46 | """ 47 | 48 | :param experiment_param: 49 | :param variable_param: 50 | :return: 51 | """ 52 | selected_group = random.choice(range(experiment_param - variable_param)) 53 | 54 | selected_groups = [] 55 | for i in range(variable_param + 1): 56 | selected_groups.append(selected_group + i) 57 | 58 | return selected_groups 59 | 60 | def get_mask(self, index, experiment_param, variable_param): 61 | selected_groups = self.select_groups(experiment_param, variable_param) 62 | 63 | all_mask = np.zeros(index.data.shape[0], dtype=bool) 64 | 65 | for group_idx in selected_groups: 66 | all_mask |= np.arange(0, index.data.shape[0]) % experiment_param == group_idx 67 | 68 | return all_mask 69 | 70 | 71 | if __name__ == "__main__": 72 | experiment = CategorySizeConnectivityExperiment( 73 | "categorical_connectivity_group_size", 74 | m=8, 75 | num_elements=20000 76 | ) 77 | 78 | experiment.run_accuracy_test( 79 | 'group_100', 80 | experiment_param=1000, 81 | variable_params=list(range(1, 20)), 82 | attempts_per_value=100 83 | ) 84 | 85 | # experiment.run_accuracy_test( 86 | # 'group_50', 87 | # experiment_param=50, 88 | # variable_params=list(range(1, 10)), 89 | # attempts_per_value=500 90 | # ) 91 | -------------------------------------------------------------------------------- /experiments/additional_category_connectivity_random.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | import numpy as np 4 | 5 | from cat_hnsw.benchmark.runner import BaseExperiment 6 | from cat_hnsw.hnsw_consistent_build import HNSWConsistentBuild 7 | 8 | 9 | class CategorySizeConnectivityRandomExperiment(BaseExperiment): 10 | 11 | def add_batch(self, index: HNSWConsistentBuild, data, param): 12 | categories = {} 13 | 14 | for i in range(param): 15 | categories[i % param] = range(i, data.shape[0], param) 16 | 17 | index.add_batch(data, categories=categories) 18 | 19 | def generate_index_class(self, param): 20 | return HNSWConsistentBuild('cosine', m=self.m, ef=self.ef) 21 | 22 | @classmethod 23 | def select_groups(cls, experiment_param, variable_param): 24 | """ 25 | 26 | :param experiment_param: 27 | :param variable_param: 28 | :return: 29 | """ 30 | selected_group = random.choice(range(experiment_param - variable_param)) 31 | 32 | selected_groups = [] 33 | for i in range(variable_param + 1): 34 | selected_groups.append(selected_group + i) 35 | 36 | return selected_groups 37 | 38 | def get_mask(self, index, experiment_param, variable_param): 39 | selected_groups = self.select_groups(experiment_param, variable_param) 40 | 41 | all_mask = np.zeros(index.data.shape[0], dtype=bool) 42 | 43 | for group_idx in selected_groups: 44 | all_mask |= np.arange(0, index.data.shape[0]) % experiment_param == group_idx 45 | 46 | return all_mask 47 | 48 | 49 | if __name__ == "__main__": 50 | experiment = CategorySizeConnectivityRandomExperiment( 51 | "categorical_connectivity_group_size_random", 52 | m=8, 53 | num_elements=200_000 54 | ) 55 | 56 | experiment.run_accuracy_test( 57 | 'group_100', 58 | experiment_param=2000, 59 | variable_params=list(range(1, 40)), 60 | attempts_per_value=100 61 | ) 62 | 63 | # experiment.run_accuracy_test( 64 | # 'group_50', 65 | # experiment_param=50, 66 | # variable_params=list(range(1, 10)),exp_categorical_connectivity_group_size/ 67 | # attempts_per_value=500 68 | # ) 69 | -------------------------------------------------------------------------------- /experiments/connectivity_experiment.py: -------------------------------------------------------------------------------- 1 | import pickle 2 | 3 | import numpy as np 4 | 5 | 6 | from cat_hnsw.benchmark.runner import BaseExperiment 7 | from cat_hnsw.hnsw import HNSW 8 | from cat_hnsw.hnsw_cat import HNSWCat 9 | 10 | 11 | class ConnectivityExperiment(BaseExperiment): 12 | 13 | def __init__(self, experiment_name): 14 | super().__init__(experiment_name, num_elements=10000) 15 | 16 | def generate_index_class(self, param): 17 | return HNSW('cosine', m=param, ef=self.ef) 18 | 19 | def load_index(self): 20 | with open(self.index_path, 'rb') as fr: 21 | hnsw_n: HNSW = pickle.load(fr) 22 | 23 | hnsw_n2 = HNSWCat('cosine').init_from_existing(hnsw_n) 24 | return hnsw_n2 25 | 26 | def get_mask(self, index, experiment_param, variable_param): 27 | all_mask = np.arange(0, index.data.shape[0]) % 100 > variable_param 28 | return all_mask 29 | 30 | 31 | if __name__ == "__main__": 32 | experiment = ConnectivityExperiment( 33 | "connectivity_m0", 34 | ) 35 | 36 | experiment.run_accuracy_test( 37 | 'm0_8', 38 | experiment_param=8, 39 | variable_params=list(range(50, 99)), 40 | attempts_per_value=100 41 | ) 42 | 43 | experiment.run_accuracy_test( 44 | 'm0_16', 45 | experiment_param=16, 46 | variable_params=list(range(50, 99)), 47 | attempts_per_value=100 48 | ) 49 | 50 | experiment.run_accuracy_test( 51 | 'm0_24', 52 | experiment_param=24, 53 | variable_params=list(range(50, 99)), 54 | attempts_per_value=100 55 | ) 56 | 57 | experiment.run_accuracy_test( 58 | 'm0_32', 59 | experiment_param=32, 60 | variable_params=list(range(50, 99)), 61 | attempts_per_value=100 62 | ) 63 | -------------------------------------------------------------------------------- /experiments/connectivity_experiment_glove.py: -------------------------------------------------------------------------------- 1 | import os 2 | import random 3 | 4 | from gensim.models import KeyedVectors 5 | 6 | from cat_hnsw.settings import DATA_PATH 7 | from experiments.connectivity_experiment import ConnectivityExperiment 8 | 9 | 10 | class ConnectivityExperimentGlove(ConnectivityExperiment): 11 | 12 | def __init__(self, experiment_name): 13 | super().__init__(experiment_name) 14 | 15 | model = KeyedVectors.load_word2vec_format(os.path.join(DATA_PATH, 'glove_50k_50.txt')) 16 | 17 | self.glove_train = model.vectors[:self.num_elements] 18 | self.glove_test = model.vectors[self.num_elements:] 19 | 20 | def generate_data(self, param): 21 | return self.glove_train 22 | 23 | def get_random_vector(self): 24 | num_test = self.glove_test.shape[0] 25 | vect_id = random.randint(0, num_test - 1) 26 | return self.glove_test[vect_id:vect_id + 1] 27 | 28 | 29 | if __name__ == "__main__": 30 | experiment = ConnectivityExperimentGlove( 31 | "connectivity_glove_m0", 32 | ) 33 | 34 | experiment.run_accuracy_test( 35 | 'm0_8', 36 | experiment_param=8, 37 | variable_params=list(range(30, 99)), 38 | attempts_per_value=100 39 | ) 40 | 41 | experiment.run_accuracy_test( 42 | 'm0_16', 43 | experiment_param=16, 44 | variable_params=list(range(30, 99)), 45 | attempts_per_value=100 46 | ) 47 | 48 | experiment.run_accuracy_test( 49 | 'm0_24', 50 | experiment_param=24, 51 | variable_params=list(range(30, 99)), 52 | attempts_per_value=100 53 | ) 54 | 55 | experiment.run_accuracy_test( 56 | 'm0_32', 57 | experiment_param=32, 58 | variable_params=list(range(30, 99)), 59 | attempts_per_value=100 60 | ) 61 | -------------------------------------------------------------------------------- /experiments/num_elements_connectivity_experiment.py: -------------------------------------------------------------------------------- 1 | import pickle 2 | 3 | import numpy as np 4 | 5 | 6 | from cat_hnsw.benchmark.runner import BaseExperiment 7 | from cat_hnsw.hnsw import HNSW 8 | from cat_hnsw.hnsw_cat import HNSWCat 9 | 10 | 11 | class ConnectivityNumElementsExperiment(BaseExperiment): 12 | 13 | def generate_data(self, param): 14 | return np.random.rand(param, self.dim) 15 | 16 | def load_index(self): 17 | with open(self.index_path, 'rb') as fr: 18 | hnsw_n: HNSW = pickle.load(fr) 19 | 20 | hnsw_n2 = HNSWCat('cosine').init_from_existing(hnsw_n) 21 | return hnsw_n2 22 | 23 | def get_mask(self, index, experiment_param, variable_param): 24 | all_mask = np.arange(0, index.data.shape[0]) % 100 > variable_param 25 | return all_mask 26 | 27 | 28 | if __name__ == "__main__": 29 | experiment = ConnectivityNumElementsExperiment( 30 | "connectivity_num_elements", 31 | ) 32 | 33 | experiment.run_accuracy_test( 34 | 'num_10k', 35 | experiment_param=10_000, 36 | variable_params=list(range(50, 99)), 37 | attempts_per_value=100 38 | ) 39 | 40 | experiment.run_accuracy_test( 41 | 'num_20k', 42 | experiment_param=20_000, 43 | variable_params=list(range(50, 99)), 44 | attempts_per_value=100 45 | ) 46 | 47 | experiment.run_accuracy_test( 48 | 'num_30k', 49 | experiment_param=30_000, 50 | variable_params=list(range(50, 99)), 51 | attempts_per_value=100 52 | ) 53 | -------------------------------------------------------------------------------- /experiments/num_elements_connectivity_experiment_glove.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pickle 3 | import random 4 | 5 | import numpy as np 6 | from gensim.models import KeyedVectors 7 | 8 | from cat_hnsw.benchmark.runner import BaseExperiment 9 | from cat_hnsw.hnsw import HNSW 10 | from cat_hnsw.hnsw_cat import HNSWCat 11 | from cat_hnsw.settings import DATA_PATH 12 | from experiments.num_elements_connectivity_experiment import ConnectivityNumElementsExperiment 13 | 14 | 15 | class ConnectivityGloveNumElementsExperiment(ConnectivityNumElementsExperiment): 16 | 17 | def __init__(self, experiment_name): 18 | super().__init__(experiment_name) 19 | model = KeyedVectors.load_word2vec_format(os.path.join(DATA_PATH, 'glove_50k_50.txt')) 20 | 21 | self.glove_train = model.vectors[:40000] 22 | self.glove_test = model.vectors[40000:] 23 | 24 | def generate_data(self, param): 25 | return self.glove_train[:param] 26 | 27 | def get_random_vector(self): 28 | num_test = self.glove_test.shape[0] 29 | vect_id = random.randint(0, num_test - 1) 30 | return self.glove_test[vect_id:vect_id + 1] 31 | 32 | 33 | if __name__ == "__main__": 34 | experiment = ConnectivityGloveNumElementsExperiment( 35 | "connectivity_glove_num_elements", 36 | ) 37 | 38 | experiment.run_accuracy_test( 39 | 'num_10k', 40 | experiment_param=10_000, 41 | variable_params=list(range(30, 99)), 42 | attempts_per_value=100 43 | ) 44 | 45 | experiment.run_accuracy_test( 46 | 'num_20k', 47 | experiment_param=20_000, 48 | variable_params=list(range(30, 99)), 49 | attempts_per_value=100 50 | ) 51 | 52 | experiment.run_accuracy_test( 53 | 'num_30k', 54 | experiment_param=30_000, 55 | variable_params=list(range(30, 99)), 56 | attempts_per_value=100 57 | ) 58 | -------------------------------------------------------------------------------- /requirements-dev.txt: -------------------------------------------------------------------------------- 1 | jupyterlab 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | statsmodels 2 | numpy 3 | pytest 4 | nmslib 5 | tqdm 6 | gensim 7 | -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import nmslib 4 | from gensim.models import KeyedVectors 5 | 6 | from cat_hnsw.settings import DATA_PATH 7 | from experiments.connectivity_experiment_glove import ConnectivityExperimentGlove 8 | 9 | 10 | class NMSLIBExperiment(ConnectivityExperimentGlove): 11 | 12 | def search_closest(self, index, target, condition): 13 | idx, dists = index.knnQuery(target, k=1) 14 | 15 | return [(idx[0], dists[0])] 16 | 17 | 18 | if __name__ == '__main__': 19 | experiment = ConnectivityExperimentGlove("test") 20 | 21 | # experiment.run_build(param=16) 22 | 23 | index = experiment.load_index() 24 | 25 | print(index._m) 26 | 27 | results = experiment.test_accuracy( 28 | index.data, 29 | mask=None, 30 | index=index, 31 | attempts=10 32 | ) 33 | 34 | print(results) 35 | 36 | nmslib_exp = NMSLIBExperiment("test2") 37 | 38 | nmslib_index = nmslib.init(method='hnsw', space='cosinesimil') 39 | nmslib_index.addDataPointBatch(index.data) 40 | nmslib_index.createIndex({'post': 0, 'M': 16, 'efConstruction': 128}, print_progress=True) 41 | 42 | results = nmslib_exp.test_accuracy(index.data, mask=None, index=nmslib_index) 43 | 44 | print(results) 45 | -------------------------------------------------------------------------------- /test2.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from experiments.additional_category_connectivity import CategorySizeConnectivityExperiment 4 | from experiments.connectivity_experiment_glove import ConnectivityExperimentGlove 5 | 6 | 7 | if __name__ == '__main__': 8 | experiment = CategorySizeConnectivityExperiment("categorical_connectivity_group_size") 9 | 10 | # experiment.run_build(param=16) 11 | 12 | index = experiment.load_index() 13 | 14 | if index._enter_point not in index._graphs[-1]: 15 | index._enter_point = list(index._graphs[-1].keys())[0] 16 | 17 | experiment.run_accuracy_test('random_group_count', 1000, list(range(1, 15)), 100, index=index, mask_attempts=70) 18 | --------------------------------------------------------------------------------