NER_Game — 多游戏语义单元抽取

本次更新为 r27-merged-20261013:基于 Qwen/Qwen3-4B 进行 LoRA 微调后,已将权重合并进基座。可直接使用 Transformers 加载,无需 PEFT 或单独加载 adapter。

  • 面向多游戏品类的中文 UGC 信息抽取,不再限于旧版的三款游戏。未验证每一款游戏,不能保证覆盖所有品类或所有新游戏。
  • 只做抽取,不做实体类型、事件类别或其他分类。
  • 模型输出:{"semantic_units":[{"mention":"原文片段","occurrence":1}]}。
  • SDK 将 mention/occurrence 定位为正文中的 Python Unicode 字符下标 start/end,end 为开区间。
  • 合并权重为 BF16,约 8.06 GB / 7.51 GiB(含 tokenizer 与元数据);未量化。
  • 默认关闭思考,生成结果直接为 JSON,不将结果放在思维链中。OpenAI 兼容服务应从 message.content 读取最终输出,而不是 reasoning_content。

快速使用

pip install -r requirements.txt

直接加载仓库根目录

import json
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "li-ovo/NER_Game"
tokenizer = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(
    repo, torch_dtype=torch.bfloat16, device_map="auto"
).eval()

text = "孙悟空打野"
messages = [
    {"role": "system", "content": "你是游戏 UGC 评论的语义单元抽取器。只判断连续字符片段的边界与出现序号,不做任何分类。只输出严格 JSON,不输出 Markdown、解释或思考过程。"},
    {"role": "user", "content": (
        'game_name: "王者荣耀"\n'
        'context.parent_text(仅消歧,禁止从中输出 span): ""\n'
        f"text: {json.dumps(text, ensure_ascii=False)}\n"
        "请抽取 text 中的全部语义单元,输出 JSON:\n"
        '{"semantic_units": [{"mention": "...", "occurrence": 1}]}\n'
        "每个单元只能包含 mention 和 occurrence。occurrence 表示 mention 在当前 text 中从左到右精确、"
        "区分大小写、非重叠出现的第几次,从 1 开始;禁止从 context 计数。"
        "不要分类,不要输出任何分类字段或 start/end。没有语义单元时输出空数组。"
    )},
]
prompt = tokenizer.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True, enable_thinking=False
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.inference_mode():
    generated = model.generate(**inputs, do_sample=False, max_new_tokens=2048)
content = tokenizer.decode(
    generated[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True
)
print(json.loads(content))

不要只发送普通聊天文本:应使用上面的抽取提示词,或使用随仓库提供的 SDK。

SDK 与旧目录兼容

hf download li-ovo/NER_Game --local-dir NER_Game
cd NER_Game
python example.py
import sys
sys.path.insert(0, "sdk")
from extraction_sdk import SemanticUnitExtractor

extractor = SemanticUnitExtractor("model", dtype="bf16")
result = extractor.extract(
    "原神抽卡,原神更新后卡顿", record_id="demo", game_name="原神"
)
print(result)

仓库根目录和 model/ 中的模型文件同步更新且内容一致。旧代码使用 subfolder="model" 仍可加载同一 R27 权重。extract_batch 当前是逐条执行,不是连续批处理引擎。

契约与失败处理

契约 版本
提示词 reasoningner-lite-sft-v5-extraction-only
模型输出 semantic-units-occurrence-v3-extraction-only
SDK 输出 semantic-units-span-v3-extraction-only

occurrence 从 1 开始,严格区分大小写,按正文中非重叠出现计数;上下文仅用于消歧,不能从中提取词。输出必须是原文连续片段,禁止纠错、标准化和生成不存在的词。

ok=False 表示格式、原文定位、重复单元或输出截断校验失败。此时 semantic_units 仅保留合法子集;不能将失败当作可靠空标签。业务应重试、降级或人工处理。

验证范围与评测说明

  • 合并后的默认非思考模型在 8 条合成样本上均直接输出合法 JSON;与相同非思考输入下的基座加 LoRA 抽取结果 8/8 一致。
  • 这只是冒烟测试,不能证明合并与解码配置变化在全量数据上完全等价。
  • 历史 R27 离线结果:旧口径人工 old_dev(298 条)词面 F1 **76.41%**;Pro 银标 seen_dev(418 条)词面 F1 **66.08%**;Pro 银标 unseen_test(399 条有效参考)词面 F1 **63.98%**。
  • 上述指标来自原 R27 adapter 离线预测,不是本次合并 release 的全量重评成绩。Pro 银标不是人工金标;没有已验证覆盖全品类的人工基准。
  • 本版本未改用后续 v21 新抽取口径,不应混入不同版本的规则或使用旧标签宣称新口径成绩。
  • 以往 R27 离线延迟门槛未通过,本次 release 的线上时延与吞吐仍需重新验收。

A10 部署起始配置

建议单张 A10、BF16、不量化、上下文上限 4096、初始 max_num_seqs=4、显存比例 0.85。这些是初始建议,不是 A10 实测保证。A10 显存、长文本峰值与 P95 延迟尚未验证。

可使用支持 Qwen3 的 vLLM,设置 temperature=0、max_tokens=2048、enable_thinking=False,不要启用将最终输出送入推理通道的 reasoning parser。最终结果从标准 content 读取。

T4 等不支持 BF16 的硬件须显式使用 FP16;精度转换和更换推理引擎都可能改变结果,需重新做一致性与质量验证。

训练与限制

  • 基座:Qwen/Qwen3-4B;LoRA rank 16、alpha 32、dropout 0.05,现已合并。
  • 训练样本计数:19,003(包含锚点重采样,不代表同等数量独立样本),1 epoch、1,188 优化步。
  • R27 训练包剔除了调用失败的教师标签;成功空标签保留。训练标注含教师银标,不代表全部由人工审核。
  • 训练最大序列为 1,117 tokens;更长文本、多游戏长尾和跨领域效果需额外验证。部署上下文 4096 不等于长文本准确率已经验证。
  • 本仓库不发布训练语料、评测正文、凭据或内部服务配置。
  • 许可证:Apache-2.0,沿用 Qwen/Qwen3-4B 基座许可证。

版本细节见 RELEASE.md、manifest.json。文件完整性可用 SHA256SUMS.txt 校验。旧版可通过 Hugging Face 提交历史访问。

Downloads last month
388
Safetensors
Model size
4B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for li-ovo/NER_Game

Finetuned
Qwen/Qwen3-4B
Finetuned
(1190)
this model