Views
No views yet
1import torch
2from transformers import AutoTokenizer, AutoModelForSequenceClassification
3import json
4import torch.nn.functional as F
5from zhconv import convert
6import re
7
8model_path = "qixun/qilv_classify"
9
10# 加载模型和分词器
11tokenizer = AutoTokenizer.from_pretrained(model_path)
12model = AutoModelForSequenceClassification.from_pretrained(model_path)
13
14# 如果GPU可用,将模型移动到GPU
15#device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
16#model.to(device)
17
18# 加载标签映射关系,label_mapping.json需要根据本机情况修改
19with open("label_mapping.json", "r", encoding="utf-8") as f:
20 label_mapping = json.load(f)
21
22
23def classify_text(text):
24
25 text = convert(text, 'zh-cn')
26 # 去掉空格和换行
27 text = text.replace(" ", "").replace("\n", "")
28
29 # 检查文本长度是否为56个字符
30 if len(text) != 64:
31 return "请输入一首带标点的七言律诗"
32
33 unique_characters = set(re.findall(r'[\u4e00-\u9fff]', text))
34 if len(unique_characters) < 30:
35 return "请输入一首正常的七言律诗"
36
37 # 准备输入数据
38 inputs = tokenizer(text, padding=True, truncation=True, return_tensors="pt", max_length=512)
39
40 # 如GPU可用,将输入数据移动到GPU
41 #inputs = {key: value.to(device) for key, value in inputs.items()}
42
43 # 模型推断
44 with torch.no_grad():
45 outputs = model(**inputs)
46
47 # 获取预测结果
48 logits = outputs.logits
49
50 # 计算每个类别的概率
51 probabilities = F.softmax(logits, dim=-1)
52
53 # 获取概率最高的三个分类及其概率
54 top_k = 3
55 top_probs, top_indices = torch.topk(probabilities, top_k, dim=-1)
56
57 # 将预测结果转换为标签并附上概率
58 results = []
59 for j in range(top_k):
60 label = label_mapping[str(top_indices[0][j].item())]
61 prob = top_probs[0][j].item()
62 results.append((label, prob))
63
64 # 将结果格式化为字符串
65 result_str = "文本: {}\n".format(text)
66 for label, prob in results:
67 result_str += "分类: {}, 概率: {:.4f}\n".format(label, prob)
68
69 return result_str
70
71# 示例调用
72text = "胎禽消息渺难知,小萼妆容故故迟。城郭渐随寒碧敛,湖山刚与晚阴宜,再来恐或成孤往,此去何由问所之。坐对空亭喧冻雀,可堪暝色向人垂。"
73result = classify_text(text)
74print(result){
"0": "中唐",
"1": "乱码",
"2": "冲塔",
"3": "同光",
"4": "复兴",
"5": "实验",
"6": "晚唐",
"7": "江西",
"8": "浙",
"9": "浣花",
"10": "理学",
"11": "盛唐",
"12": "艳体",
"13": "诗界xx",
"14": "赣",
"15": "闽"
}