def predict(path): np.random.seed(42) tf.set_random_seed(42) config = Config.get_default_config(args) model = Model(config) predictor = InteractivePredictor(config, model, path) predictor.predict() model.close_session()
args = parser.parse_args() replace_tokens = ["@R_%d@"%i for i in range(1, args.num_replace_tokens+1)] if args.debug: config = Config.get_debug_config(args) else: config = Config.get_default_config(args) # Composite training loss lamb = args.lamb print('Lamb :=' + str(lamb)) model = Model(config, replace_tokens) print('Created model') if config.TRAIN_PATH: model.train(lamb=lamb) if config.TEST_PATH and not args.data_path: results, precision, recall, f1 = model.evaluate() print('Accuracy: ' + str(results)) print('Precision: ' + str(precision) + ', recall: ' + str(recall) + ', F1: ' + str(f1)) if args.predict: predictor = InteractivePredictor(config, model) predictor.predict() if args.adv_eval: model.adv_eval_batched() if args.release and args.load_path: model.evaluate(release=True) model.close_session()
parser.add_argument('--predict', action='store_true') parser.add_argument('--debug', action='store_true') parser.add_argument('--seed', type=int, default=239) parser.add_argument('--reports', type=str, default=239) args = parser.parse_args() np.random.seed(args.seed) tf.set_random_seed(args.seed) if args.debug: config = Config.get_debug_config(args) else: config = Config.get_default_config(args) model = Model(config) print('Created model') if config.TRAIN_PATH: model.train() if config.TEST_PATH and not args.data_path: results, precision, recall, f1, rouge = model.evaluate() print('Accuracy: ' + str(results)) print('Precision: ' + str(precision) + ', recall: ' + str(recall) + ', F1: ' + str(f1)) print('Rouge: ', rouge) if args.predict: predictor = InteractivePredictor(config, model, args.reports) predictor.predict() if args.release and args.load_path: model.evaluate(release=True) model.close_session()
parser.add_argument('--predict', action='store_true') parser.add_argument('--debug', action='store_true') args = parser.parse_args() if args.debug: config = Config.get_debug_config(args) else: config = Config.get_default_config(args) model = Model(config) print('Created model') if config.TRAIN_PATH: model.train() if config.TEST_PATH and not args.data_path: results, precision, recall, f1 = model.evaluate() print('Accuracy: ' + str(results)) print('Precision: ' + str(precision) + ', recall: ' + str(recall) + ', F1: ' + str(f1)) if args.predict: print("Under Prediciton process.....") predictor = InteractivePredictor(config, model) if extract_AST: ast_fetaure_list = predictor.get_ast_paths_for_file() print(f"AST Feature for {len(ast_fetaure_list)} snippets") print(ast_fetaure_list) else: predictor.predict() if args.release and args.load_path: model.evaluate(release=True) model.close_session()
def predict(self): input_filename = 'Input.java' MAX_ATTEMPTS = 50 MAX_NODES_TO_OPEN = 10 words_vocab = self.model.get_words_vocab_embed() # words_vocab = words_vocab / np.linalg.norm(words_vocab, axis=1).reshape((-1, 1)) print('Starting interactive prediction with similar adversarial search...') while True: print( 'Modify the file: "%s" and press any key when ready, or "q" / "quit" / "exit" to exit' % input_filename) user_input = input() if user_input.lower() in self.exit_keywords: print('Exiting...') return print("select variable to rename:") var_to_rename = newname_of_var = input() name_found = False closed = [var_to_rename] with open(input_filename, "r") as f: original_code = f.read() for i in range(MAX_ATTEMPTS): try: predict_lines, hash_to_string_dict = self.path_extractor.extract_paths(input_filename) except ValueError as e: print(e) continue results = self.model.predict(predict_lines) prediction_results = common.parse_results(results, hash_to_string_dict, topk=SHOW_TOP_CONTEXTS) for method_prediction in prediction_results: print('Original name:\t' + method_prediction.original_name) for name_prob_pair in method_prediction.predictions: print('\t(%f) predicted: %s' % (name_prob_pair['probability'], name_prob_pair['name'])) if '|'.join(method_prediction.predictions[0]['name']) != method_prediction.original_name: print("MATCH FOUND!", newname_of_var) print("Tried (total:", len(closed), ") :: ", closed) name_found = True break # print('Attention:') # for attention_obj in method_prediction.attention_paths: # print('%f\tcontext: %s,%s,%s' % ( # attention_obj['score'], attention_obj['token1'], attention_obj['path'], attention_obj['token2'])) loss, all_strings, all_grads = self.model.calc_loss_and_gradients_wrt_input(predict_lines) indecies_of_var = np.argwhere(all_strings == newname_of_var.lower()).flatten() grads_of_var = all_grads[indecies_of_var] if grads_of_var.shape[0] > 0: # print("current loss:",loss) total_grad = np.sum(grads_of_var, axis=0) # # words to increase loss # top_replace_with = np.argsort(total_grad)[::-1][:5] # result = [(i, total_grad[i], self.model.index_to_word[i]) for i in top_replace_with] # print("words to increase loss:") # print(result) # words to decrease loss # top_replace_with = np.argsort(total_grad)[:5] similarity_to_var = self.get_similar_words(newname_of_var) #self.measureSimilarity(words_vocab,newname_of_var, "euclidean") result = [(self.model.word_to_index[i], i, total_grad[self.model.word_to_index[i]]) for i in similarity_to_var] result.sort(key=lambda v: (-v[2])) print(result) # similarity_to_var = self.measureSimilarity(words_vocab,newname_of_var, "cosine") # resulte = [(i, self.model.index_to_word[i], similarity_to_var[i], total_grad[i]) for i in range(1, words_vocab.shape[0])] # # resulte.sort(key=lambda v: (v[2],-v[3])) # select new name for r in result: if r[1] not in closed and r[1] != method_prediction.original_name.replace("|","")\ and r[2] > 0: print(r) newname_of_var = r[1] break else: newname_of_var = None if newname_of_var is None: break closed.append(newname_of_var) print("rename", var_to_rename, "to", newname_of_var) code = InteractivePredictor.rename_variable(original_code,var_to_rename,newname_of_var) with open("input.java", "w") as f: f.write(code) if not name_found: print("FAILED!") print("Tried (total:", len(closed),") :: ", closed)
def predict(self): input_filename = 'Input.java' MAX_ATTEMPTS = 50 MAX_NODES_TO_OPEN = 10 print('Starting interactive prediction with mono adversarial search...') while True: print( 'Modify the file: "%s" and press any key when ready, or "q" / "quit" / "exit" to exit' % input_filename) user_input = input() if user_input.lower() in self.exit_keywords: print('Exiting...') return print("select variable to rename:") var_to_rename = newname_of_var = input() name_found = False opened = [] closed = [] with open(input_filename, "r") as f: original_code = f.read() for i in range(MAX_ATTEMPTS): try: predict_lines, hash_to_string_dict = self.path_extractor.extract_paths(input_filename) except ValueError as e: print(e) continue bfs = AdversarialSearcher(2, 2, self.model) r = bfs.find_adversarial(predict_lines) print(r) print(timeit.timeit(lambda: bfs.find_adversarial(predict_lines), number=1000)) return results = self.model.predict(predict_lines) prediction_results = common.parse_results(results, hash_to_string_dict, topk=SHOW_TOP_CONTEXTS) for method_prediction in prediction_results: print('Original name:\t' + method_prediction.original_name) for name_prob_pair in method_prediction.predictions: print('\t(%f) predicted: %s' % (name_prob_pair['probability'], name_prob_pair['name'])) if '|'.join(method_prediction.predictions[0]['name']) == method_prediction.original_name: print("MATCH FOUND!", newname_of_var) print("Tried (total:", len(closed), ") :: ", closed) name_found = True break # print('Attention:') # for attention_obj in method_prediction.attention_paths: # print('%f\tcontext: %s,%s,%s' % ( # attention_obj['score'], attention_obj['token1'], attention_obj['path'], attention_obj['token2'])) loss, all_strings, all_grads = self.model.calc_loss_and_gradients_wrt_input(predict_lines) indecies_of_var = np.argwhere(all_strings == newname_of_var.lower()).flatten() grads_of_var = all_grads[indecies_of_var] if grads_of_var.shape[0] > 0: # print("current loss:",loss) total_grad = np.sum(grads_of_var, axis=0) # # words to increase loss # top_replace_with = np.argsort(total_grad)[::-1][:5] # result = [(i, total_grad[i], self.model.index_to_word[i]) for i in top_replace_with] # print("words to increase loss:") # print(result) # words to decrease loss top_replace_with = np.argsort(total_grad)[:5] result = [(i, total_grad[i], self.model.index_to_word[i]) for i in top_replace_with] # select new name for r in result: if r[2] not in closed and r[2] != method_prediction.original_name.replace("|",""): print(r) newname_of_var = r[2] break else: newname_of_var = None if newname_of_var is None: break closed.append(newname_of_var) print("rename", var_to_rename, "to", newname_of_var) code = InteractivePredictor.rename_variable(original_code,var_to_rename,newname_of_var) with open("input.java", "w") as f: f.write(code) if not name_found: print("FAILED!") print("Tried (total:", len(closed),") :: ", closed)