from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
st.title("💬 Yuan2.0 AI简历助手")
from modelscope import snapshot_download
model_dir = snapshot_download('IEITYuan/Yuan2-2B-Mars-hf', cache_dir='./')
path = './IEITYuan/Yuan2-2B-Mars-hf'
lora_path = './output/Yuan2.0-2B_lora_bf16/checkpoint-51'
torch_dtype = torch.bfloat16 # A10
# torch_dtype = torch.float16 # P100
# 定义一个函数,用于获取模型和tokenizer
print("Creat tokenizer...")
tokenizer = AutoTokenizer.from_pretrained(path, add_eos_token=False, add_bos_token=False, eos_token='<eod>')
tokenizer.add_tokens(['<sep>', '<pad>', '<mask>', '<predict>', '<FIM_SUFFIX>', '<FIM_PREFIX>', '<FIM_MIDDLE>','<commit_before>','<commit_msg>','<commit_after>','<jupyter_start>','<jupyter_text>','<jupyter_code>','<jupyter_output>','<empty_output>'], special_tokens=True)
model = AutoModelForCausalLM.from_pretrained(path, torch_dtype=torch_dtype, trust_remote_code=True).cuda()
model = PeftModel.from_pretrained(model, model_id=lora_path)
tokenizer, model = get_model()
假设你是一个AI简历助手,能从简历中识别出所有的命名实体,并以json格式返回结果。
实体的类别包括:姓名、国籍、种族、职位、教育背景、专业、组织名、地名。
返回的json格式是一个字典,其中每个键是实体的类别,值是一个列表,包含实体的文本。
{"姓名": ["张三"], "国籍": ["中国"], "职位": ["工程师"]}
请参考样例,按照任务要求,识别出当前简历中所有的命名实体,并以json格式返回结果。
st.chat_message("assistant").write(f"请输入简历文本:")
# 如果用户在聊天输入框中输入了内容,则执行以下操作
if query := st.chat_input():
st.chat_message("user").write(query)
prompt = template.replace('query', query).strip()
inputs = tokenizer(prompt, return_tensors="pt")["input_ids"].cuda()
outputs = model.generate(inputs, do_sample=False, max_length=1024) # 设置解码方式和最大生成长度
output = tokenizer.decode(outputs[0])
response = output.split("<sep>")[-1].replace("<eod>", '').strip()
st.chat_message("assistant").write(f"正在提取简历信息,请稍候...")
st.chat_message("assistant").table(pd.DataFrame(json.loads(response)))