ConZIC / utils.py
jiaqingj's picture
ConZIC
85a5010
import numpy as np
import os
import colorlog
import random
import torch
def create_logger(folder, filename):
log_colors = {
'DEBUG': 'blue',
'INFO': 'white',
'WARNING': 'green',
'ERROR': 'red',
'CRITICAL': 'yellow',
}
import logging
logger = logging.getLogger('ConZIC')
# %(filename)s$RESET:%(lineno)d
# LOGFORMAT = "%(log_color)s%(asctime)s [%(log_color)s%(filename)s:%(lineno)d] | %(log_color)s%(message)s%(reset)s |"
LOGFORMAT = ""
LOG_LEVEL = logging.DEBUG
logging.root.setLevel(LOG_LEVEL)
stream = logging.StreamHandler()
stream.setLevel(LOG_LEVEL)
stream.setFormatter(colorlog.ColoredFormatter(LOGFORMAT, datefmt='%d %H:%M', log_colors=log_colors))
# print to log file
hdlr = logging.FileHandler(os.path.join(folder, filename))
hdlr.setLevel(LOG_LEVEL)
# hdlr.setFormatter(logging.Formatter("[%(asctime)s] %(message)s"))
hdlr.setFormatter(logging.Formatter("%(message)s"))
logger.addHandler(hdlr)
logger.addHandler(stream)
return logger
def set_seed(seed):
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
def get_init_text(tokenizer, seed_text, max_len, batch_size=1):
""" Get initial sentence by padding seed_text with [mask] words to max_len """
text = seed_text + tokenizer.mask_token * max_len
ids = tokenizer.encode(text)
batch = [ids] * batch_size
return batch
def update_token_mask(tokenizer, token_mask, max_len, index):
""" '.'(full stop) is only allowed in the last token position """
if index == max_len - 1:
token_mask[:, tokenizer.vocab['.']] = 1
else:
token_mask[:, tokenizer.vocab['.']] = 0
return token_mask
def format_output(sample_num, FinalCaption, BestCaption):
if sample_num == 1:
return f"{FinalCaption[0]}", f"{BestCaption[0]}"
elif sample_num ==2:
return f"{FinalCaption[0]}\n{FinalCaption[1]}", f"{BestCaption[0]}\n{BestCaption[1]}"
elif sample_num ==3:
return f"{FinalCaption[0]}\n{FinalCaption[1]}\n{FinalCaption[2]}",\
f"{BestCaption[0]}\n{BestCaption[1]}\n{BestCaption[2]}"
elif sample_num ==4:
return f"{FinalCaption[0]}\n{FinalCaption[1]}\n{FinalCaption[2]}\n{FinalCaption[3]}",\
f"{BestCaption[0]}\n{BestCaption[1]}\n{BestCaption[2]}\n{BestCaption[3]}"
else:
return f"{FinalCaption[0]}\n{FinalCaption[1]}\n{FinalCaption[2]}\n{FinalCaption[3]}\n{FinalCaption[4]}",\
f"{BestCaption[0]}\n{BestCaption[1]}\n{BestCaption[2]}\n{BestCaption[3]}\n{BestCaption[4]}"