in Models/exprsynth/model.py [0:0]
def test(self,
test_raw_data_chunk_paths: List[RichPath],
beam_size: int=5,
per_result_callback_fn: Optional[Callable[[int, float, Dict[str, Any], ModelTestResult], None]]=None,
train_model=None) -> int:
def read_chunk(raw_data_chunk_path: RichPath):
return raw_data_chunk_path.read_by_file_suffix()
data_chunk_iterator = \
MultiWorkerCallableIterator(argument_iterator=[(data_chunk_path,) for data_chunk_path in test_raw_data_chunk_paths],
worker_callable=read_chunk,
max_queue_size=3,
num_workers=2,
use_threads=True)
sample_idx = 0
for raw_data_chunk in data_chunk_iterator:
for raw_sample in raw_data_chunk:
sample_idx += 1
loaded_train_sample = dict()
loaded_train_sample['Provenance'] = raw_sample['Filename'] + "::" + raw_sample['HoleLineSpan']
prod_root_node = min(int(v) for v in raw_sample['Productions'].keys())
sample_token_seq = []
collect_token_seq(raw_sample, prod_root_node, sample_token_seq)
if len(raw_sample['VariableUsageContexts']) == 0:
assert len(raw_sample['LastUseOfVariablesInScope']) == 0
continue
loaded_test_sample = dict(loaded_train_sample)
use_example = self._load_data_from_sample(self.hyperparameters,
self.metadata,
raw_sample=raw_sample,
result_holder=loaded_train_sample,
is_train=True)
if not use_example:
continue
# Step (1): Compute perplexity:
train_feed_dict = next(train_model._data_to_minibatches(loaded_train_sample, is_train=True))[0]
sample_log_prob = train_model.sess.run(train_model._decoder_model.ops['log_probs'], feed_dict=train_feed_dict)
token_perplexity = np.exp(-sample_log_prob / len(sample_token_seq))
# Step (2): Compute accuracy:
self._load_data_from_sample(self.hyperparameters,
self.metadata,
raw_sample=raw_sample,
result_holder=loaded_test_sample,
is_train=False)
test_feed_dict = self._tensorise_one_test_sample(loaded_test_sample)
test_feed_dict[self.__placeholders['batch_size']] = 1
test_sample_encoding, context_encoding = self._encode_one_test_sample(test_feed_dict)
if context_encoding is None: # TODO: Hack that should go away
test_result = self._decoder_model.generate_suggestions_for_one_sample(
loaded_test_sample,
test_sample_encoding,
beam_size=beam_size) # type: ModelTestResult
else:
test_result = self._decoder_model.generate_suggestions_for_one_sample(
loaded_test_sample,
test_sample_encoding,
beam_size=beam_size,
context_tokens=loaded_test_sample.get('context_nonkeyword_tokens'),
context_token_representations=context_encoding[0],
context_token_mask=test_feed_dict[self.placeholders['context_token_mask']]) # type: ModelTestResult
if per_result_callback_fn is not None:
per_result_callback_fn(sample_idx, token_perplexity, raw_sample, test_result)
return sample_idx