人工智能企业在训练大模型时往往需要海量文本,图书因其语言质量高、结构完整而成为重要语料来源。但当这些图书并未获得版权方授权,甚至直接来自盗版资源时,训练行为就可能触及著作权法中的复制权与演绎权。近期一起涉及十五亿美元和解金额的案件,首次以如此高的代价明确了非法获取副本用于训练不能简单主张合理使用。

和解背后的法律逻辑:复制与训练的分离认定
在这类案件中,法院通常将「获取并存储图书副本」与「使用副本训练模型」视为两个独立行为。复制图书到本地服务器,如果来源是盗版网站或未授权分发渠道,就构成了对复制权的直接侵犯。即便企业主张最终目的是训练人工智能,该目的并不能溯及既往地洗白此前的非法复制。这种分离认定意味着,数据合规的第一步不是看用途,而是看来源。
合理使用抗辩在美国著作权法中需衡量四要素:使用的目的与性质、受版权作品的性质、所使用部分的数量与实质性、对作品潜在市场的影响。图书作为完整创作的出版物,通常具有较高的原创性;全部复制显然满足「数量与实质性」中对核心内容的抽取;而开源模型若可能替代原书市场,也会在第四要素上失分。因此,仅以「科研或转化性使用」为由很难覆盖整本盗版书训练的情形。
从企业风控角度看,分离认定直接提高了语料供应链的审计要求。团队需要记录每一份文本的获取时间、渠道、授权文件与哈希值。下面是一段用于建立版权溯源元数据的简化示例代码,它把图书文件的来源证明写入本地清单,供后续合规审查调用。
import hashlib
import json
import os
def record_book_source(file_path, source_type, license_file):
with open(file_path, 'rb') as f:
data = f.read()
file_hash = hashlib.sha256(data).hexdigest()
meta = {
'file_name': os.path.basename(file_path),
'sha256': file_hash,
'source_type': source_type,
'license_file': license_file,
'size_bytes': len(data)
}
with open('book_provenance.json', 'a', encoding='utf-8') as out:
out.write(json.dumps(meta, ensure_ascii=False) + 'n')
return meta
# 示例:记录一本获授权图书的元数据
record_book_source('C:\corpus\ai_basics.pdf', 'authorized_purchase', 'C:\licenses\ai_basics.pdf')
对比两种语料构建方案的成本与风险
很多团队在起步阶段会在「爬取盗版资源」与「采购正版授权」之间犹豫。盗版方案表面成本极低,只需写个脚本批量下载即可,但在法律视角下,每一次下载都生成了一份侵权复制件。若模型最终商业化,权利人可就每件作品主张法定赔偿,累积起来便是天文数字。上述和解金额之所以巨大,正是因为涉及海量图书的集体侵权。
正版授权方案包括向出版社批量采购、使用开放授权 corpus(如明确允许商用的学术开放集)或与版权代理谈判数据集许可。其前期投入可能是盗版的数倍甚至数十倍,但换来了可审计、可抗辩的合规底座。当监管或诉讼来临时,企业能出示授权链,而非只能删除数据并求和。下表从四个维度对比两种路径。
| 维度 | 盗版爬取 | 正版授权 |
|---|---|---|
| 初期成本 | 极低 | 高 |
| 法律赔偿风险 | 极高,按件累积 | 低,有合同保障 |
| 数据可审计性 | 无溯源 | 完整凭证 |
| 长期商业安全 | 随时可能被诉 | 稳定可持续 |
实践中也有折中路线,例如仅使用已进入公共领域的作品,或利用出版方提供的官方训练许可 API。无论哪种,核心原则都是「先确权、后入库」。技术团队应把版权检查当作数据清洗的前置步骤,而不是上线前的补救动作。
给开发者的合规操作建议与代码示例
在工程层面,可以把合规校验嵌入数据管道。每当有新文本进入训练队列,系统先查询其哈希是否在已授权清单中;若未命中,则阻断入库并告警。这样能把法律风险控制在数据流动的最前端,避免侵权副本进入分布式存储后难以清理。
下面示例展示了一个简单的入库前拦截逻辑,它读取 provenance 清单并比对哈希,未授权文件直接抛出异常。注意这里的路径分隔符使用了原生的反斜杠,在 Windows 环境下应保持原样。
import hashlib
def is_authorized(file_path, provenance_list):
with open(file_path, 'rb') as f:
digest = hashlib.sha256(f.read()).hexdigest()
for item in provenance_list:
if item['sha256'] == digest:
return True
return False
# 假设从数据库载入了已授权清单
authorized_books = [
{'sha256': 'abc123', 'file_name': 'ai_basics.pdf'}
]
try:
path = 'C:\raw_corpus\new_book.pdf'
if not is_authorized(path, authorized_books):
raise PermissionError('未授权图书,禁止入库')
print('通过校验,允许进入训练流水线')
except PermissionError as e:
print('合规拦截:', e)
除了技术拦截,组织层面也需明确责任。算法工程师不应自行决定语料合法性,而应由法务与数据负责人共同签署入库审批。只有把法律规则翻译成代码中的硬约束,才能在类似十五亿美元和解案的行业警示下,保护团队与产品不被复制权诉讼拖垮。