KAG icon indicating copy to clipboard operation
KAG copied to clipboard

[Bug] [schema映射问题] Ner抽取Schema拼接问题

Open kukukakakeikei opened this issue 3 months ago • 1 comments

Search before asking

  • [x] I had searched in the issues and found no similar issues.

Operating system information

Linux

What happened

你好!尝试重现medicine知识图谱过程 kag_config.yaml 设置 language: zh ner.py 中 self.schema = SchemaClient( host_addr=KAG_PROJECT_CONF.host_addr, project_id=self.project_id ).extract_types(KAG_PROJECT_CONF.language) 获取到中文类型 llm_client.py 331 response = ( self.call_with_json_parse(prompt=prompt, **kwargs) if with_json_parse else self(prompt, **kwargs) ) 拼接中文Schema,导致LLM(qwen3-max-preview)返回存在中文类型 { "instruction": "你是命名实体识别的专家。请从输入中提取与模式定义匹配的实体。如果不存在该类型的实体,请返回一个空列表。请以JSON字符串格式回应。你可以参照example进行抽取。", "schema": ['特医食品', '医学术语', '医疗器械', '医生', '药品', '疫苗', '医院', '疾病类目', '医保报销政策', '检查检验', '手术操作', '疾病', '其他', '诊疗建议', '科室', '人群', '综合服务', '人体部位', '症状', '保健食品', '医学指征'], "example": [ { "input": "烦躁不安、语妄、失眠酌用镇静药,禁用抑制呼吸的镇静药。 3.并发症的处理经抗菌药物治疗后,高热常在24小时内消退,或数日内逐渐下降。 若体温降而复升或3天后仍不降者,应考虑SP的肺外感染。 治疗:接胸腔压力调节管+吸引机负压吸引水瓶装置闭式负压吸引宜连续,如经12小时后肺仍未复张,应查找原因。", "output": [ {"name": "烦躁不安", "category": "Symptom"}, {"name": "语妄", "category": "Symptom"}, {"name": "失眠", "category": "Symptom"}, {"name": "镇静药", "category": "Medicine"}, {"name": "肺外感染", "category": "Disease"}, {"name": "胸腔压力调节管", "category": "MedicalEquipment"}, {"name": "吸引机负压吸引水瓶装置", "category": "MedicalEquipment"}, {"name": "闭式负压吸引", "category": "SurgicalOperation"} ] } ], "input": "甲状腺结节 甲状腺结节是指在甲状腺内的肿块,可随吞咽动作随甲状腺而上下移动,是临床常见的病症,可由多种病因引起。 临床上有多种甲状腺疾病,如甲状腺退行性变、炎症、自身免疫以及新生物等都可以表现为结节。 甲状腺结节可以单发,也可以多发,多发结节比单发结节的发病率高,但单发结节甲状腺癌的发生率较高。 患者通常可以选择在普外科,甲状腺外科,内分泌科,头颈外科挂号就诊。 有些患者可以触摸到自己颈部前方的结节。 在大多情况下,甲状腺结节没有任何症状,甲状腺功能也是正常的。 甲状腺结节进展为其它甲状腺疾病的概率只有1%。 有些人会感觉到颈部疼痛、咽喉部异物感,或者存在压迫感。 当甲状腺结节发生囊内自发性出血时,疼痛感会更加强烈。 治疗方面,一般情况下可以用放射性碘治疗,复方碘口服液(Lugol液)等,或者服用抗甲状腺药物来抑制甲状腺激素的分泌。 目前常用的抗甲状腺药物是硫脲类化合物,包括硫氧嘧啶类的丙基硫氧嘧啶(PTU)和甲基硫氧嘧啶(MTU)及咪唑类的甲硫咪唑和卡比马唑。" =============response ======================= {'output': [{'category': '疾病', 'name': '脂溢性皮炎'}, {'category': '疾病', 'name': '脂溢性湿疹'}, {'category': '症状', 'name': '红斑性皮疹'}, {'category': '症状', 'name': '油腻鳞屑'}, {'category': '症状', 'name': '痂皮'}, {'category': '症状', 'name': '黄红色斑片'}, {'category': '症状', 'name': '瘙痒'}, {'category': '症状', 'name': '糜烂'}, {'category': '症状', 'name': '渗出'}, {'category': '症状', 'name': '色素沉着'}, {'category': '症状', 'name': '皮肤细胞增生'}, {'category': '药品', 'name': '抗组胺药'}, {'category': '药品', 'name': '抗真菌药'}, {'category': '人体部位', 'name': '头'}, {'category': '人体部位', 'name': '面'}, {'category': '人体部位', 'name': '胸背'}, {'category': '人体部位', 'name': '会阴部'}, {'category': '人群', 'name': '新生儿'}, {'category': '人群', 'name': '30-60岁成年人'}, {'category': '人群', 'name': '男性'}, {'category': '人群', 'name': '女性'}, {'category': '人群', 'name': '婴儿'}, {'category': '人群', 'name': '亚洲婴儿'}, {'category': '医学指征', 'name': '遗传因素'}, {'category': '医学指征', 'name': '微生物感染'}, {'category': '医学指征', 'name': '皮脂分泌增高'}, {'category': '医学指征', 'name': '神经功能障碍'}, {'category': '医学指征', 'name': '免疫功能失调'}, {'category': '医学指征', 'name': '疲劳'}, {'category': '医学指征', 'name': '压力'}, {'category': '医学指征', 'name': '感染'}, {'category': '诊疗建议', 'name': '药物治疗'}, {'category': '诊疗建议', 'name': '外用药物'}, {'category': '诊疗建议', 'name': '口服药物'}, {'category': '诊疗建议', 'name': '家庭护理'}, {'category': '诊疗建议', 'name': '保持生活规律'}, {'category': '诊疗建议', 'name': '调整饮食习惯'}, {'category': '诊疗建议', 'name': '避免过度清洁和摩擦'}, {'category': '诊疗建议', 'name': '经常湿气肌肤'}, {'category': '诊疗建议', 'name': '无需手术治疗'}]}

导致问题

schema_free_extractor.py:285 for record in entities: s_name = record.get("name", "") s_label = record.get("category", "") properties = record.get("properties", {}) tmp_properties = copy.deepcopy(properties) spg_type = self.schema.get(s_label) if spg_type is None: s_label = "Others" spg_type = self.schema.get(s_label) 代码spg_type = self.schema.get(s_label)找不到对应的type,将全部中文type归类为"Others" 目前解决方案是在ner.py 中直接设置在英文 self.schema = SchemaClient( host_addr=KAG_PROJECT_CONF.host_addr, project_id=self.project_id ).extract_types(”en“) 是否有更好的处理方式?

How to reproduce

按照medicine知识图谱流程执行即可

Are you willing to submit PR?

  • [ ] Yes I am willing to submit a PR!

kukukakakeikei avatar Sep 14 '25 07:09 kukukakakeikei

你可以在kag-builder-extractor下面的schema_free_extractor文件里面 在schema启动之后 加入中英文类型映射支持
self.zh_to_en_mapping = schema_client.extract_types_zh_mapping() 并在assemble_sub_graph_with_spg_records()函数里面查找失败的情况下,尝试中文到英文的映射

Kaedeser avatar Oct 30 '25 05:10 Kaedeser