资讯动态

Data-Juicer extract_nickname_mapper 算子解析:用语言模型从对话文本中提取人物昵称关系

发布时间:2026/10/5 1:41:57 来源:尧图企业网站定制
人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载extract_nickname_mapper是 Data-Juicer 中一个基于语言模型的文本关系抽取 mapper 算子它能够从剧本、对话、小说等文本中识别说话人 → 被称呼人 → 昵称的三元组关系例如李莲花称方多病为方小宝并将结果以结构化格式写入样本的 meta 字段。本文以 extract_nickname_mapper 算子文档 为核心结合 算子源码、单元测试 与底层模型工具实现完整讲解该算子的工作原理、全部可配置参数、输出数据格式以及接入数据加工流水线的实战方法帮助读者直接复现并定制属于自己的昵称关系抽取能力。算子概览定位与注册方式在 Data-Juicer 的算子体系中extract_nickname_mapper属于mapper类型即对每条样本执行变换并可能新增字段与 filter 只做保留/丢弃不同mapper 会改写样本。其官方标签为cpu, api, text表明它不依赖 GPU通过调用外部 API 模型工作作用对象是文本字段。从源码可以看到该算子同时注册进了两套注册表extract_nickname_mapper.pyOP_NAME extract_nickname_mapper # TODO: LLM-based inference. TAGGING_OPS.register_module(OP_NAME) OPERATORS.register_module(OP_NAME) class ExtractNicknameMapper(Mapper):OPERATORS全局算子注册表定义于 base_op.py 附近的OPERATORS Registry(...)所有算子都会在此注册供配置文件按算子名实例化。TAGGING_OPS专门的打标类算子注册表。注册进该表的算子产出的结果会被视为文本标签tag可用于后续的分析与统计流程。也就是说在任意 Data-Juicer 的 process 配置文件中你都可以直接以extract_nickname_mapper作为算子名引用它无需额外 import。工作原理提示词、输出解析与 API 调用链该算子的核心思路是提示词工程 严格正则解析 结构化存储。整个处理链路可以拆成四个环节1. 构造请求系统提示词 输入模板算子内置了一套中文系统提示词DEFAULT_SYSTEM_PROMPT源码 L30-L52其要点包括提取说话人对被称呼人的称呼方式要求方向不能搞反相同的说话人和被称呼人之间最多给出一个最常用的称呼不输出彼此没有昵称关系的称呼方式输出格式严格固定为### 称呼方式N配合**说话人**、**被称呼人**、**...对...的昵称**三个字段。输入模板DEFAULT_INPUT_TEMPLATE则非常简单# 文本{text}在 process_single 中算子将样本的文本字段代入模板组装出system user两条消息发送给模型input_prompt self.input_template.format(textsample[self.text_key]) messages [{role: system, content: self.system_prompt}, {role: user, content: input_prompt}]2. 调用 API 模型API 模型通过prepare_model初始化源码 L105-L107self.model_key prepare_model( model_typeapi, modelapi_model, endpointapi_endpoint, response_pathresponse_path, **model_params )底层对应 model_utils.py 的 prepare_api_model它创建一个 OpenAI 兼容的可调用 API 模型对象支持endpoint默认/chat/completionsOpenAI 兼容的 chat 接口也支持/embeddings与/responsesresponse_path从响应中提取内容的点分路径默认choices.0.message.contentapi_backendopenai_compatible默认或litellm通过 LiteLLM SDK 路由到 100 提供商环境变量合并在openai_compatible后端下OPENAI_BASE_URL/OPENAI_API_URL与OPENAI_API_KEY/DASHSCOPE_API_KEY会在未显式传入时自动合并进模型参数源码 L677。初始化完成后get_modelmodel_utils.py L2311-L2333会维护一个进程级MODEL_ZOO缓存避免重复创建模型对象实际调用时直接执行client(messages, **self.sampling_params)。3. 解析与校验输出模型返回的原始文本由parse_output源码 L112-L144解析。它使用内置的正则DEFAULT_OUTPUT_PATTERN以re.VERBOSE | re.DOTALL编译匹配### 称呼方式N的段落并做三层校验方向双重校验double check昵称行**...对...的昵称**中嵌的说话人/被称呼人必须与上方**说话人**、**被称呼人**字段一致不一致的匹配直接丢弃昵称≠本名校验若昵称与被称呼人完全相同如李莲花对方多病的昵称方多病说明模型没有提取出真正的昵称该条被过滤去重通过set去除重复关系。最终每条有效关系被结构化为{ relation_source_entity: nr[0], # 说话人 relation_target_entity: nr[1], # 被称呼人 relation_description: nr[2], # 昵称 relation_keywords: [nickname], # 关系关键词 relation_strength: None, # 关系强度本算子不输出 }这些键名对应 constant.py 中 MetaKeys 类 定义的常量source_entity relation_source_entity等是整个项目关系抽取类算子共用的约定字段。4. 重试与写入process_single 的执行逻辑还包括幂等跳过如果meta字段中已经存在nickname_key直接返回原样本不重复调用 API失败重试在try_num次循环内调用模型并解析输出只要解析出非空结果就跳出全部失败时写入一条空关系占位各字段为空字符串/空数组并通过logger.warning记录异常可选丢文本drop_textTrue时输出样本会移除原始文本字段仅保留 meta。参数配置详解下表完整列出了算子的全部可配置参数来自算子文档并结合源码确认默认值与类型参数名类型默认值说明api_modelstrgpt-4oAPI 模型名称。注意测试与项目常量DEFAULT_API_MODELconstant.py L16当前为qwen3.7-max文档示例也使用qwen3.7-maxnickname_keystrnickname昵称关系在 meta 字段中存储的键名对应MetaKeys.nicknameconstant.py L134api_endpointOptional[str]NoneAPI URL 端点默认走/chat/completionsresponse_pathOptional[str]None从 API 响应提取内容的路径默认choices.0.message.contentsystem_promptOptional[str]None任务系统提示词为空时使用内置DEFAULT_SYSTEM_PROMPTinput_templateOptional[str]None构建模型输入的模板为空时使用内置# 文本模板output_patternOptional[str]None解析模型输出的正则表达式为空时使用内置DEFAULT_OUTPUT_PATTERNtry_numAnnotated[int, Gt(gt0)]3API 调用出错或输出解析失败时的重试次数必须大于 0由 pydanticPositiveInt校验drop_textboolFalse输出时是否丢弃原始文本字段model_paramsDict{}初始化 API 模型时的参数如base_url、api_key、api_backend等sampling_paramsDict{}每次 API 调用额外传入的参数例如{temperature: 0.9, top_p: 0.95}、{enable_thinking: False}kwargs—其他透传关键字参数如text_key默认text见 base_op.py L452参数使用建议换模型 / 换厂商修改api_model并通过model_params传base_url、api_key或者更简单地设置OPENAI_BASE_URL或OPENAI_API_URL与OPENAI_API_KEY或DASHSCOPE_API_KEY环境变量让prepare_api_model自动合并。自定义解析规则如果目标模型输出格式与内置模板不一致可同时自定义system_prompt、input_template、output_pattern三者保持提示词产出格式 ↔ 正则解析格式严格对应。控制成本与稳定性try_num控制重试次数sampling_params可降低采样随机性如调低temperature对关系抽取这类结构化任务通常更稳定。只留标签若下游只关心抽取结果设置drop_textTrue可丢弃原文减少存储占用。效果演示输入、输出与数据结构算子文档给出了一个真实的中文对话/剧本场景示例使用ExtractNicknameMapper(api_modelqwen3.7-max, response_pathNone)调用。输入文本如下节选保留了完整段落△李莲花又指出刚才门框上的痕迹。 △李莲花门框上也是人的掌痕和爪印。指力能嵌入硬物寸余七分力道主上三分力道垫下还有辅以的爪式看样子这还有昆仑派的外家功夫。 方多病看着李莲花愈发生疑os通过痕迹就能判断出功夫和门派这绝对只有精通武艺之人才能做到李莲花你到底是什么人 笛飞声环顾四周有朝月派还有昆仑派看来必是一群武林高手在这发生了决斗 李莲花如果是武林高手过招为何又会出现如此多野兽的痕迹。方小宝你可听过江湖上有什么门派是驯兽来斗方小宝方小宝 方多病回过神不、不曾听过。 李莲花还有这些人都去了哪里 笛飞声打架不管是输是赢自然是打完就走。 李莲花摇头就算打完便走但这里是客栈为何这么多年一直荒在这里甚至没人来收拾一下 笛飞声闹鬼这里死过这么多人楼下又画了那么多符所以不敢进来 △这时梁上又出现有东西移动的声响李莲花、笛飞声都猛然回头看去。输出时原始文本保持原样同时在__dj__meta__的nickname键下新增了两条结构化关系字段关系 1关系 2relation_source_entity说话人方多病李莲花relation_target_entity被称呼人李莲花方多病relation_description昵称李莲花你方小宝relation_keywords[nickname][nickname]relation_strengthNoneNone可以看到算子正确识别出方多病称呼李莲花为李莲花你原文李莲花你到底是什么人以及李莲花称呼方多病为方小宝原文方小宝你可听过……。这正是该算子的核心价值把散落在对话中的称呼方式抽取为可供下游分析使用的结构化关系数据。运行前提与环境配置该算子依赖外部 API 模型使用前需要准备好一个 OpenAI 兼容的 API 服务或 DashScope 等兼容服务通过环境变量或model_params提供密钥与地址。单元测试 test_extract_nickname_mapper.py 给出了最直接的配置范例def test(self): # before running this test, set below environment variables: # export OPENAI_API_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1 # export OPENAI_API_KEYyour_key self._run_op(DEFAULT_API_MODEL, sampling_params{enable_thinking: False})即设置OPENAI_API_URLDashScope 兼容模式地址与OPENAI_API_KEY后用默认模型DEFAULT_API_MODEL当前仓库中为qwen3.7-max即可运行。测试中还通过sampling_params{enable_thinking: False}关闭了模型思考模式以保证输出格式的稳定性。单元测试解析与边界行为的验证test_extract_nickname_mapper.py 从四个维度覆盖了该算子的行为可作为理解其语义的行为说明书端到端 API 测试ExtractNicknameMapperTest真实调用模型处理剧本文本断言meta中出现nickname键且结果包含(李莲花, 方多病, 方小宝)三元组输出解析测试ParseOutputTest无需 API覆盖正常解析两条关系、方向双重校验不匹配时丢弃说话人写李莲花但昵称行写方多病对方多病的昵称、昵称等于本名时过滤、空输出返回空列表四种情况幂等跳过测试EdgeCaseTest样本 meta 中已存在 nickname 时process_single直接原样返回API 边界测试ExtractNicknameMapperAPITest验证drop_textTrue会移除text字段、自定义nickname_keymy_nickname会把结果写入指定键名。这些测试既印证了 parse_output 的三层校验逻辑也明确了已生成则跳过与自定义存储键两个实用行为。接入数据加工流水线在 Data-Juicer 中mapper 算子通过配置文件中的ops列表即可接入处理流程。一个典型的用法如下示意process: - extract_nickname_mapper: api_model: qwen3.7-max sampling_params: enable_thinking: false temperature: 0.3 try_num: 3执行后每条样本的__dj__meta__中都会带上nickname键其值为结构化的昵称关系列表可供后续分析、过滤或导出使用。由于算子具备幂等跳过逻辑同一批数据重复跑同一算子不会产生重复调用。相关链接算子源码 extract_nickname_mapper.py单元测试 test_extract_nickname_mapper.pyMetaKeys 字段常量定义API 模型初始化实现 prepare_api_model算子总览 docs/Operators.md赞分享人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载相关推荐Data-Juicer dialog_sentiment_intensity_mapper 算子详解基于 API 模型的多轮对话情感强度标注Data Juicer dialog_sentiment_intensity_mapper 算子详解基于 API 模型的多轮对话情感强度标注 本篇技术指南以人工智能大模型数据工程数据清洗数据增强数据质检OpenReplay 网络代理库openreplay/network-proxy完全指南拦截 fetch、XHR 与 Beacon 实现网络请求追踪OpenReplay 网络代理库openreplay/network proxy完全指南拦截 fetch、XHR 与 Beacon 实现网络请求追踪 O人工智能大模型数据工程数据清洗数据增强数据质检Data-Juicer LaTeX 图片上下文提取算子实战用 latex_figure_context_extractor_mapper 从论文源码解析图片与引用段落Data Juicer LaTeX 图片上下文提取算子实战用 latex_figure_context_extractor_mapper 从论文源码解析图片与人工智能大模型数据工程数据清洗数据增强数据质检上一篇3步构建你的智能交易系统开源引擎的完整实战指南下一篇MediaMTX 实战三行 YAML 把 RTSP 摄像头变成网页直播流创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑