一、大模型加载–baichuan2-13b
- 模型文件、embedding文件路径
model_path = "models/baichuan2-13b-chat"
embedding_model_path = "models/text2vec-large-chinese"
embedding_device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"
embeddings = HuggingFaceEmbeddings(model_name=embedding_model_path,
model_kwargs={'device': embedding_device})
- 加载大模型–我这用的是baichuan2-13b-chat模型
def init_model():
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True
)
model.generation_config = GenerationConfig.from_pretrained(
model_path
)
tokenizer = AutoTokenizer.from_pretrained(
model_path,
use_fast=False,
trust_remote_code=True
)
return model, tokenizer
model,tokenizer = init_model() # 加载模型
二、标注示例模板读取
# 1. 读取样例数据
demo_path = "data/demo.csv" #换成你的标注样例数据
df_demo = pd.read_csv(demo_path, encoding='gbk', header=0)
# 2. 标注样例数据按模板格式处理
# 按你的样例数据处理
examples.append(dict)
三、prompt
prefix = """
你是一个数据标注员,要求在标注过程中表述精简、风格统一,只抽取待标注语句中已有的信息,不添加、不错漏;请根据下列标注示例,输出标注结果。
"""
example_prompt = PromptTemplate(input_variables=["待标注数据", "标注结果"],
template="待标注数据: {待标注数据}\n标注结果: {标注结果}")
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
embeddings,
FAISS,
k=2
)
similar_prompt = FewShotPromptTemplate(
example_selector = example_selector,
example_prompt=example_prompt,
prefix=prefix,
suffix="待标注数据:{input}\n标注结果: ",
input_variables=["input"],
example_separator="\n",
)
四、标注数据
while True:
user_input = input()
user_prompt = similar_prompt.format(input = user_input)
messages = [{"role":"user","content":user_prompt}]
response = model.chat(tokenizer, messages)