AI 语料库怎么建立?给文本保存来源、许可和稳定编号

建立 AI 语料库时,除了文本,还要能回答来源在哪里、能否使用、如何找回原文。下面把教学文本写成 JSONL,保存来源、许可状态和基于文本内容的稳定编号,并拦截空文本与未知使用状态。

建立 AI 语料库时,除了文本,还要能回答来源在哪里、能否使用、如何找回原文。下面把教学文本写成 JSONL,保存来源、许可状态和基于文本内容的稳定编号,并拦截空文本与未知使用状态。

环境与运行方法

本文代码在 Windows、Python 3.11 的本地独立环境执行通过。以下数据全部为人为构造的教学样本,不是客户数据,也不是业务效果测试。

AI 语料库怎么建立?给文本保存来源、许可和稳定编号

新建一个空目录,在终端执行安装命令,把后面的完整代码保存为 demo.py,再执行 python demo.py。文件输出均保存在运行目录,请先在空目录练习。

python --version  # 本例只使用 Python 标准库

先定义最小记录结构

每条记录包含 text、source、license_status 和 text_id。source 可以是内部文件路径或已获授权的公开链接;license_status 由实际材料使用依据核实,不能让模型自动猜“公开就可训练”。本例的文本是自行编造,状态统一设为 self_authored。

text_id 对 strip 后的文本 UTF-8 字节计算 SHA-256。同样的规范化字节得到同一编号;如果你改变规范化规则,编号也可能变化,因此规则版本要另行保存。内容编号不等于整条元数据记录编号,同一文本有多个来源时还应保留来源关系。

先校验,再写成逐行 JSON

代码严格拒绝空文本及许可状态未知的材料,再给通过核对的两条教学文本生成编号。每行单独用 json.dumps 序列化;不能在同一个文件连续 dump 多个对象后声称它是一个标准 JSON 数组。JSONL 的读取方式是一行一个 JSON 对象。

教学程序只输出合格记录;正式语料应把被拒绝的材料另存到受控复核表,保留来源和拒绝理由。数据规模很大时逐条写入,避免把整个语料都装进内存。

可复制的完整代码

import json, hashlib
from pathlib import Path
raw = [{"text": "模型训练需要可靠标签", "source": "synthetic:a", "license_status": "self_authored"},
       {"text": "检索回答应保留证据", "source": "synthetic:b", "license_status": "self_authored"},
       {"text": "  ", "source": "synthetic:c", "license_status": "self_authored"},
       {"text": "待核实的文本", "source": "synthetic:d", "license_status": "unknown"}]
accepted, rejected = [], []
for row in raw:
    text = row["text"].strip()
    if not text or row["license_status"] == "unknown":
        rejected.append({"source": row["source"], "reason": "empty_text" if not text else "license_unverified"})
        continue
    accepted.append({**row, "text": text, "text_id": hashlib.sha256(text.encode("utf8")).hexdigest()})
path = Path("toy_corpus.jsonl")
path.write_text("".join(json.dumps(row, ensure_ascii=False) + "\n" for row in accepted), encoding="utf8")
loaded = [json.loads(line) for line in path.read_text(encoding="utf8").splitlines()]
assert loaded == accepted and len(loaded) == 2
assert all(len(row["text_id"]) == 64 for row in loaded)
print("accepted", len(accepted), "rejected", len(rejected))
print("rejected_reasons", [row["reason"] for row in rejected])
print("jsonl_roundtrip", loaded == accepted)

运行结果与核对方法

下面是本文教学代码在上述本地环境中的实际输出。浮点数末位可能随依赖版本变化。

accepted 2 rejected 2
rejected_reasons ['empty_text', 'license_unverified']
jsonl_roundtrip True

打开 toy_corpus.jsonl,应有两行可独立解析的 JSON,每行含 text、source、license_status、64位 text_id。输出显示空文本和许可未核实的两条被拒绝;读回结果须与保存前的两条记录完全一致。

使用边界与常见问题

本例只使用自写教学文本,没有核实任何真实网站的训练授权,也没有建立可公开传播的实际语料库。正式使用要逐来源保存真实使用依据,不能仅把许可字段填成允许。

只有哈希值,能找回文本吗?

不能从哈希逆推出原文。它是核对指纹,必须与原文或可访问的来源记录一起保存。语料文本修改后也要保留旧版与变更说明。

官方资料

接口与参数依据以下官方资料核对(2026年10月1日)。示例验证只覆盖本文输入和步骤。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30731.html

赞 (0)
AI小管家的头像AI小管家
一个模型怎样预测两个数值目标?用 MultiOutputRegressor 对齐输出并逐列验收
上一篇 5小时前
OCR 批量识别怎么避免漏文件?逐张保存文本、状态和异常清单
下一篇 5小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部