Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
140 lines
5.7 KiB
Python
140 lines
5.7 KiB
Python
"""
|
||
术语一致性检查工具。
|
||
|
||
思路:对每个受关注的英文术语,预先列出它在中文里“几种常见但不同”的译法。
|
||
扫描全书各章译文,统计每个术语实际出现了几种不同译法:
|
||
- 只出现 1 种 → 全书一致;
|
||
- 出现 >= 2 种 → 术语漂移(不一致)。
|
||
|
||
这不是给模型评分,而是用确定性的字符串匹配,客观度量“同一术语是否全书统一”。
|
||
"""
|
||
|
||
# 每个术语:canonical 为推荐/术语表规定译法;variants 为若干“互不相同”的常见译法。
|
||
# 注意:variants 之间尽量不互为子串,避免重复计数(如“嵌入向量”归入“嵌入”一族)。
|
||
TRACKED_TERMS = [
|
||
{"en": "token", "canonical": "词元", "variants": ["词元", "令牌", "标记", "token"]},
|
||
{"en": "embedding", "canonical": "嵌入", "variants": ["嵌入", "词向量", "向量表示"]},
|
||
{"en": "prompt", "canonical": "提示词", "variants": ["提示词", "提示语", "提示"]},
|
||
{"en": "inference", "canonical": "推理", "variants": ["推理", "推断"]},
|
||
{"en": "latency", "canonical": "时延", "variants": ["延迟", "时延", "延时"]},
|
||
{"en": "attention", "canonical": "注意力", "variants": ["注意力", "关注度"]},
|
||
{"en": "transformer", "canonical": "Transformer", "variants": ["Transformer", "变换器", "转换器"]},
|
||
{"en": "throughput", "canonical": "吞吐量", "variants": ["吞吐量", "吞吐率", "通量"]},
|
||
{"en": "fine-tuning", "canonical": "微调", "variants": ["微调", "精调"]},
|
||
]
|
||
|
||
|
||
import re
|
||
|
||
|
||
def _strip_code(text):
|
||
"""去掉围栏代码块与行内代码:代码按翻译指南原样保留英文,不应计入术语一致性统计。"""
|
||
text = re.sub(r"```.*?```", " ", text, flags=re.DOTALL)
|
||
text = re.sub(r"`[^`]*`", " ", text)
|
||
return text
|
||
|
||
|
||
# 编辑部“指定术语”(house style):为几个术语规定一个明确的、区别于模型默认译法的译名。
|
||
# 这些译法都是合法且更精确的选择,用来考察“共享术语表能否把指定译法贯彻到全书”。
|
||
# mandated:术语表规定的译法;default:模型自由翻译时常用的默认译法。
|
||
MANDATED_TERMS = [
|
||
{"en": "token", "mandated": "词元", "default": "标记"},
|
||
{"en": "prompt", "mandated": "提示词", "default": "提示"},
|
||
{"en": "latency", "mandated": "时延", "default": "延迟"},
|
||
{"en": "embedding", "mandated": "嵌入向量", "default": "嵌入"},
|
||
]
|
||
|
||
|
||
def check_adherence(translations):
|
||
"""
|
||
术语表遵从率:对每个“指定术语”,统计在出现该概念的章节里,
|
||
有多少章使用了术语表规定的译法(而非默认译法)。
|
||
|
||
这是管理者模式的核心价值:共享术语表能把指定译法贯彻到每一章;
|
||
单 Agent 看不到术语表,只能用自己的默认译法。
|
||
"""
|
||
rows = []
|
||
hit_total = 0
|
||
concept_total = 0
|
||
for t in MANDATED_TERMS:
|
||
m, d = t["mandated"], t["default"]
|
||
chapters_with_concept = 0
|
||
chapters_adhered = 0
|
||
for name, raw in translations.items():
|
||
text = _strip_code(raw)
|
||
has_m = m in text
|
||
# default 若是 mandated 的子串(如“嵌入”是“嵌入向量”子串),需去掉 mandated 再判断
|
||
has_d = (d in text.replace(m, "")) if d in m else (d in text)
|
||
if has_m or has_d:
|
||
chapters_with_concept += 1
|
||
if has_m:
|
||
chapters_adhered += 1
|
||
if chapters_with_concept:
|
||
concept_total += chapters_with_concept
|
||
hit_total += chapters_adhered
|
||
rows.append({
|
||
"en": t["en"], "mandated": m, "default": d,
|
||
"adhered": chapters_adhered, "total": chapters_with_concept,
|
||
})
|
||
rate = hit_total / concept_total if concept_total else 1.0
|
||
return {"rows": rows, "rate": rate}
|
||
|
||
|
||
def _variant_in_chapter(text, variant, other_variants):
|
||
"""
|
||
判断某个 variant 是否在 text 中“独立”出现。
|
||
对“提示”这种会成为“提示词/提示语”子串的情况:仅当去掉更长 variant 后仍出现才算。
|
||
"""
|
||
longer = [v for v in other_variants if variant in v and v != variant]
|
||
if not longer:
|
||
return variant in text
|
||
tmp = text
|
||
for v in longer:
|
||
tmp = tmp.replace(v, "")
|
||
return variant in tmp
|
||
|
||
|
||
def analyze(translations):
|
||
"""
|
||
translations:{chapter_name: 译文文本}
|
||
返回:
|
||
results:每个术语的分析(用到哪些译法、是否一致、各章用法)
|
||
consistent_terms / total_terms / rate
|
||
"""
|
||
results = []
|
||
consistent = 0
|
||
total = 0
|
||
for term in TRACKED_TERMS:
|
||
variants = term["variants"]
|
||
used = {} # variant -> [出现该译法的章节]
|
||
for name, raw in translations.items():
|
||
text = _strip_code(raw)
|
||
for v in variants:
|
||
others = [x for x in variants if x != v]
|
||
if _variant_in_chapter(text, v, others):
|
||
used.setdefault(v, []).append(name)
|
||
if not used:
|
||
# 全书都没出现该术语,跳过统计
|
||
continue
|
||
total += 1
|
||
distinct = list(used.keys())
|
||
is_consistent = len(distinct) == 1
|
||
if is_consistent:
|
||
consistent += 1
|
||
results.append(
|
||
{
|
||
"en": term["en"],
|
||
"canonical": term["canonical"],
|
||
"distinct_used": distinct,
|
||
"consistent": is_consistent,
|
||
"by_variant": used,
|
||
}
|
||
)
|
||
rate = consistent / total if total else 1.0
|
||
return {
|
||
"results": results,
|
||
"consistent_terms": consistent,
|
||
"total_terms": total,
|
||
"rate": rate,
|
||
}
|