feat(v3): Web 应用化基线(异步任务/SSE/llama-server 管理/Vue SPA 四页 + 设置页整页滚动修复)
This commit is contained in:
@@ -10,7 +10,7 @@ confidence = 1 - exp(-s),保证 s=1 -> 0.63,s=2 -> 0.86,s=3 -> 0.95。
|
||||
from __future__ import annotations
|
||||
|
||||
import math
|
||||
from typing import Dict, List, Tuple
|
||||
from typing import Dict, List, Optional, Tuple
|
||||
|
||||
from .difficulty import estimate_difficulty
|
||||
from .models import Classification
|
||||
@@ -51,6 +51,14 @@ DOMAIN_RULES: Dict[str, List[Tuple[str, float]]] = {
|
||||
("知识产权", 1.1), ("版权", 0.9), ("专利", 0.9), ("违约", 0.9), ("赔偿", 0.8),
|
||||
("仲裁", 0.9), ("劳动法", 1.0), ("刑法", 1.0), ("民法典", 1.0),
|
||||
("法规", 0.8), ("条款", 0.7), ("律师", 0.8), ("起诉", 0.9), ("判决", 0.9),
|
||||
# 劳动法
|
||||
("加班", 0.9), ("加班费", 1.0), ("工资", 0.8), ("辞退", 0.9), ("裁员", 0.9),
|
||||
("试用期", 0.9), ("社保", 0.8), ("公积金", 0.8), ("年假", 0.9), ("离职", 0.8),
|
||||
("解除劳动合同", 1.1), ("经济补偿", 1.0), ("竞业", 1.0),
|
||||
# 房产/婚姻/消费者
|
||||
("租房", 0.9), ("买房", 0.9), ("购房", 0.9), ("押金", 0.8), ("房贷", 0.9),
|
||||
("离婚", 1.0), ("继承", 0.9), ("遗产", 0.9), ("抚养权", 0.9), ("遗嘱", 0.9),
|
||||
("退款", 0.9), ("退货", 0.8), ("消费者", 0.8), ("七天无理由", 1.0), ("维权", 0.8),
|
||||
("law", 1.0), ("legal", 1.1), ("contract", 1.0), ("compliance", 1.0),
|
||||
("litigation", 1.0), ("copyright", 0.9), ("patent", 0.9), ("trademark", 0.9),
|
||||
("liability", 0.9), ("regulatory", 0.8), ("jurisdiction", 0.9),
|
||||
@@ -61,11 +69,17 @@ DOMAIN_RULES: Dict[str, List[Tuple[str, float]]] = {
|
||||
("医生", 0.9), ("血压", 0.9), ("高血压", 1.0), ("糖尿病", 1.0), ("感冒", 0.9),
|
||||
("剂量", 0.9), ("副作用", 0.9), ("手术", 0.9), ("患者", 0.9),
|
||||
("吃药", 0.9), ("发烧", 1.0), ("疫苗", 0.9), ("感染", 0.9), ("体检", 0.7),
|
||||
# 急救/消化/心理/营养/儿科
|
||||
("烫伤", 1.0), ("烧伤", 1.0), ("止血", 0.9), ("扭伤", 0.9), ("中暑", 1.0),
|
||||
("急救", 0.9), ("腹泻", 0.9), ("拉肚子", 0.9), ("便秘", 0.9), ("胃", 0.7),
|
||||
("失眠", 0.9), ("焦虑", 0.9), ("抑郁", 0.9), ("压力", 0.6), ("睡眠", 0.7),
|
||||
("减肥", 0.8), ("营养", 0.7), ("卡路里", 0.9), ("儿童", 0.8), ("婴儿", 0.9),
|
||||
("宝宝", 0.8), ("抗生素", 0.9), ("止咳", 0.9),
|
||||
("medical", 1.0), ("patient", 0.9), ("symptom", 1.0), ("disease", 0.9),
|
||||
("diagnosis", 1.0), ("treatment", 0.8), ("prescription", 1.0),
|
||||
("dosage", 0.9), ("side effect", 0.9), ("hypertension", 1.0),
|
||||
("diabetes", 1.0), ("surgery", 0.8), ("clinic", 0.7), ("vaccine", 0.9),
|
||||
("infection", 0.9),
|
||||
("infection", 0.9), ("first aid", 0.9), ("insomnia", 0.9),
|
||||
],
|
||||
"general": [
|
||||
("总结", 0.4), ("翻译", 0.4), ("介绍", 0.4), ("解释", 0.3),
|
||||
@@ -74,6 +88,40 @@ DOMAIN_RULES: Dict[str, List[Tuple[str, float]]] = {
|
||||
("write an essay", 0.4), ("邮件", 0.4), ("email", 0.3),
|
||||
("推荐", 0.3), ("评价", 0.3),
|
||||
],
|
||||
"finance": [
|
||||
("理财", 1.0), ("投资", 1.0), ("基金", 1.0), ("股票", 1.0), ("债券", 0.9),
|
||||
("存款", 0.9), ("储蓄", 0.8), ("利率", 0.8), ("利息", 0.8), ("贷款", 1.0),
|
||||
("房贷", 1.0), ("月供", 0.9), ("保险", 0.9), ("理赔", 0.9), ("保费", 0.8),
|
||||
("信用卡", 1.0), ("征信", 0.9), ("逾期", 0.9), ("分期", 0.8), ("记账", 0.7),
|
||||
("预算", 0.7), ("理财规划", 1.0), ("收益率", 0.9), ("定投", 0.9),
|
||||
("invest", 0.8), ("fund", 0.8), ("stock", 0.9), ("loan", 0.9),
|
||||
("mortgage", 0.9), ("insurance", 0.9), ("credit card", 0.9),
|
||||
("finance", 0.8), ("money", 0.6), ("lpr", 0.9), ("投资理财", 1.1),
|
||||
],
|
||||
"life": [
|
||||
("菜谱", 0.9), ("做饭", 0.8), ("烹饪", 0.9), ("美食", 0.8), ("做法", 0.7),
|
||||
("旅行", 0.9), ("旅游", 0.9), ("攻略", 0.8), ("机票", 0.8), ("酒店", 0.7),
|
||||
("签证", 0.9), ("景点", 0.8), ("自驾", 0.8),
|
||||
("装修", 0.9), ("收纳", 0.8), ("家居", 0.7), ("清洁", 0.7), ("打扫", 0.7),
|
||||
("宠物", 0.9), ("猫", 0.7), ("狗", 0.7), ("猫粮", 0.9), ("驱虫", 0.9),
|
||||
("健身", 0.9), ("锻炼", 0.8), ("跑步", 0.8), ("增肌", 0.9), ("减脂", 0.9),
|
||||
("瑜伽", 0.8), ("天气", 0.7), ("气温", 0.7),
|
||||
("recipe", 0.8), ("travel", 0.9), ("trip", 0.8), ("pet", 0.8),
|
||||
("workout", 0.9), ("gym", 0.8), ("weather", 0.7), ("cook", 0.8),
|
||||
],
|
||||
"education": [
|
||||
("学习方法", 1.0), ("怎么学", 0.7), ("高效学习", 1.0), ("记忆", 0.6), ("复习", 0.7),
|
||||
("预习", 0.7), ("笔记", 0.6), ("专注", 0.6), ("拖延", 0.7), ("学习效率", 0.9),
|
||||
("考试", 0.9), ("备考", 1.0), ("刷题", 0.9), ("模拟考", 0.9), ("中考", 0.9),
|
||||
("高考", 0.9), ("考研", 0.9), ("考前", 0.7),
|
||||
("英语", 0.8), ("单词", 0.7), ("口语", 0.8), ("听力", 0.7), ("雅思", 1.0),
|
||||
("托福", 1.0), ("四级", 0.9), ("六级", 0.9), ("背单词", 0.9),
|
||||
("选课", 0.9), ("课程", 0.6), ("专业选择", 0.9), ("报班", 0.8), ("网课", 0.7),
|
||||
("自学", 0.7), ("职业规划", 1.0), ("求职", 0.9), ("面试", 0.8), ("简历", 0.8),
|
||||
("实习", 0.7), ("跳槽", 0.8), ("转行", 0.9),
|
||||
("study", 0.8), ("exam", 0.9), ("language", 0.7), ("career", 0.8),
|
||||
("interview", 0.8), ("education", 0.7), ("learn", 0.6),
|
||||
],
|
||||
}
|
||||
|
||||
_STOPWORDS = {
|
||||
@@ -92,11 +140,21 @@ class BaseClassifier:
|
||||
|
||||
|
||||
class RuleClassifier(BaseClassifier):
|
||||
"""基于关键词规则的分类器(零依赖)。"""
|
||||
"""基于关键词规则的分类器(零依赖)。
|
||||
|
||||
def __init__(self, confidence_floor: float = 0.55):
|
||||
domains 参数(可选):限定只对部分领域打分 —— 两级路由中,
|
||||
每个大领域的组内路由模型用 RuleClassifier(domains=组内领域),
|
||||
只认识本组领域,体积与匹配开销约为统一分类器的 1/4。
|
||||
"""
|
||||
|
||||
def __init__(self, confidence_floor: float = 0.55,
|
||||
domains: Optional[List[str]] = None):
|
||||
self.confidence_floor = confidence_floor
|
||||
self.rules = DOMAIN_RULES
|
||||
if domains is None:
|
||||
self.rules = DOMAIN_RULES
|
||||
else:
|
||||
self.rules = {d: DOMAIN_RULES[d] for d in domains if d in DOMAIN_RULES}
|
||||
self.domains = list(self.rules.keys())
|
||||
|
||||
def _score(self, query: str) -> Tuple[Dict[str, float], Dict[str, List[str]]]:
|
||||
q = query.lower()
|
||||
@@ -159,7 +217,7 @@ class HuggingFaceClassifier(BaseClassifier):
|
||||
仅当安装 torch+transformers 且模型可加载时可用;否则抛错提示。
|
||||
"""
|
||||
|
||||
def __init__(self, model_name: str, num_labels: int = 5, confidence_floor: float = 0.55):
|
||||
def __init__(self, model_name: str, num_labels: int = 8, confidence_floor: float = 0.55):
|
||||
try:
|
||||
from transformers import AutoModelForSequenceClassification, AutoTokenizer
|
||||
except ImportError as e:
|
||||
@@ -170,7 +228,8 @@ class HuggingFaceClassifier(BaseClassifier):
|
||||
self.model = AutoModelForSequenceClassification.from_pretrained(
|
||||
model_name, num_labels=num_labels
|
||||
)
|
||||
self.labels = ["code", "math", "legal", "medical", "general"]
|
||||
self.labels = ["code", "math", "legal", "medical", "general",
|
||||
"finance", "life", "education"]
|
||||
self.confidence_floor = confidence_floor
|
||||
|
||||
def classify(self, query: str) -> Classification:
|
||||
|
||||
Reference in New Issue
Block a user