小语种内容是不是译过来的,正文里量不出来,能认出来的痕迹全长在壳上
本文目录
- 怎么用带答案的样本给一个判断方法打分?
- 先有正负样本,才谈得上判别力
- 选哪9门语言,为什么
- 正样本很硬,负样本有瑕疵
- 量哪六个特征
- 怎么算判别力
- 红链这个数只能算下限
- 六个特征在9门语言上的表现是什么样?
- 合并起来看,方向都对
- 拆开之后,方向开始翻
- 红链率的方向是齐的,但齐在反方向
- 引用标记数是唯一一个没翻车的
- 这意味着你量到的不是你以为的那个东西
- 把这六个特征当分类器用,能对多少?
- 最好的两个也只有65.9%
- 为什么合起来也救不回来
- 拉丁残留这把尺子在拉丁语言上直接归零
- 换个语言就得重新标定一次
- 负样本不纯,这一层要说清楚
- 那些从外面看得见的痕迹,到底还剩下什么?
- 换个地方找:不看正文,看壳
- 什么样的痕迹才可能跨语言稳定
- 抽样框:最有钱做本地化的那批公司
- 先把没有本地语言内容的站挑出去
- 本地化几乎没有中间状态
- 英文界面词跟着占比走
- 页面语言声明:17家里写对6家
- 那13家“只有零星几个本地字”的站,那几个字是什么?
- 数量都落在4到49之间,太巧了
- 是那个“切换到本地语言”的按钮
- 这一条本身就是个可用的判据
- 多语言标注的覆盖率低得离谱
- 把壳上的信号凑成一个判定流程怎么做?
- 三处硬信号
- 两处软信号
- 半天能跑完的最小版本
- 三档结果分别意味着什么
- 什么时候该重跑
- 这套判断在实际决策里怎么用?
- 先说它不能用来干什么
- 能用来干什么
- 跟母语审校是两回事
- 中文市场用得上吗
- 我在这批数据上犯过的错
- 用错解码,把结论量反了
- 把两种“没有”混在一起算
- 抓不到本地文字,先怀疑自己的工具
- 差点把标定结果讲反
- 常见问题解答
- 用维基的数据标定,结论能搬到商业站上吗?
- 为什么不干脆用现成的AI检测工具?
- 65.9%的判别力,是不是特征选得不好?
- 负样本里混了半自动批量建的短条目,是不是让结论不成立?
- 壳上那三处,对方改一下不就没了?
- 只有一个市场要做,值得跑这一套吗?
- 权威参考资料
摘要:拿一批已经知道答案的样本做标定——9门语言各取译过来的和本地写的两组页面,逐条量六个正文特征,看哪个能把两组分开。结果是没有一个分得开。判别力最好的两个是首版体量和外链条数,各65.9%,跟抛硬币差不了太多;更糟的是方向不稳定:首版体量在缅甸语上译文大11.95倍,在格鲁吉亚语上反过来只有0.68倍;拉丁字母残留在蒙古语上5.58倍,在僧伽罗语上0.43倍;红链率四门语言全部是译文更低,跟直觉正好相反,原因是翻译工具会自动处理链接。换句话说你以为在量“是不是搬来的”,量到的其实是“用什么工具搬的”。稳定的痕迹不在正文里,在页面的壳上:2019年8个市场56家商业站的快照里,确实有本地语言内容的17家中,页面语言声明写对的只有6家。本文给出六个特征的完整标定表、三处壳上的硬信号,以及一套半天能跑完的判定流程。
上一篇量了一门语言的公共内容里有多少是从别处搬来的,用的是维基媒体那个会自报家门的标记。那套办法有个前提:样本自己承认。
真实市场上没有这个前提。对手的站不会告诉你哪些页面是翻译的,所以只能从页面上找痕迹。
直觉上痕迹应该不难找。译文读着别扭、专有名词没换、链接指向不存在的页面、上线之后就没人管——这几条几乎是共识,我自己也讲过好几年,讲的时候还挺理直气壮。
这次决定把它们一条条量一遍。手上正好有一批带答案的样本,标定完就知道这些直觉值多少钱。
先说结论:值不了多少钱。但量完之后我知道了该去哪儿找,这个收获比原来想要的那个大。
怎么用带答案的样本给一个判断方法打分?
先有正负样本,才谈得上判别力
一个判定方法好不好,不能靠讲道理,得拿已知答案的样本试。试的方式是给它一批确定是译文的、一批确定不是的,看它能分对多少。
这批带答案的样本来自维基媒体。2019年新建的条目里,带官方翻译工具标记的算正样本,不带任何标记的算负样本。这个工具在建条目的时候会自动打标记,编辑者想躲也躲不掉。
正样本的答案很硬——标记是工具自动打的,不可能有假。负样本弱一点,只能说“没用那个工具”,理论上可能是手工翻的。这个瑕疵我后面会单独说。
9门语言各取60条正样本、60条负样本,样本池不够的按实际数量取。合计415条正样本、540条负样本。
选哪9门语言,为什么
选语言有两条考虑。一是要有足够的正样本,译文条数太少的语言标定不出东西;二是书写系统要有对照,全挑非拉丁的会得出一个只在非拉丁语言上成立的结论。
最后定的是缅甸语、高棉语、蒙古语、泰米尔语、尼泊尔语、僧伽罗语、格鲁吉亚语、希腊语,加上越南语。
越南语是故意放进来的。它用拉丁字母,译入率又是全表最高的47.43%,正好用来验证那些依赖“非拉丁书写系统”的特征在拉丁语言上还剩多少。越南语的声调符号那一层虽然复杂,但字母本身还是拉丁的,字符统计分不出来。
高棉语和蒙古语的正样本只有10条和16条,比别的语言薄得多,因为这两门语言2019年一共才有14条和29条译入条目。这两门的结论我只当参考,不进主要判断。
剩下七门每门都是60对60,够用。东南亚那几个市场在这批语言里占了四个,算是本站写得比较熟的一片,用它们做标定我心里有底。
正样本很硬,负样本有瑕疵
这批样本的可信度不对称,这一点得先摆出来。
正样本是工具自动标的,不存在误标。一条记录带着那个标记,就一定是用那个工具建的,这一侧的答案是确定的。
负样本弱得多。它的定义只是“没带任何标记”,理论上完全可能是有人把英文页面复制到编辑框里手工改改就发了。这种情况在数据上看不出来。
所以严格说,这次标定的是“用工具译的”和“其余全部”之间的差别,不是“译的”和“原创的”之间的差别。负样本里混进译文,只会让两组更像,也就是让判别力被低估。结论是分不开,那么这个瑕疵不会救回这个结论。
量哪六个特征
六个特征都挑了从外面看得见的:首版的字节数、拉丁字母在全部字母里的占比、内链条数、引用标记数、红链率、以及首版之后到截断日为止被改过几次。
选它们的理由是每一个都对应一条常见的直觉。首版字节大对应“一次性粘贴”,拉丁占比高对应“专名没跟着译”,红链率高对应“带着源语言的链接结构”,修订次数少对应“搬进来就没人管”。
另外两个是内链条数和引用标记数,对应的直觉是“译文继承了源语言那套密集的交叉引用”。这一条我信心最低,但既然一起量了就一起报。
六个数全部从首版的原始文本上量,不看现在的版本。看现在的版本等于把后来所有人的修改也算进来,那就不是在量“它被建出来的时候什么样”了。
字符统计只算字母,数字和标点一律不参与。这一步不做,各语言标点习惯的差异会直接混进拉丁占比里,而那个差异跟内容来源没有半点关系。
怎么算判别力
判别力的算法是给每个特征扫一遍可能的阈值,每个阈值试两个方向,取分对比例最高的那一组。
这个做法对特征相当宽容——阈值是知道答案之后反过来挑的,方向也是。真实使用时你没有这两样,只会比这个数更差。
还要有个基线做参照。正负样本415比540,什么都不做、一律判成“本地写的”,正确率就是56.5%。任何特征都得跟这个数比,不能跟50%比。
红链这个数只能算下限
红链是指内链指向的目标页面不存在。麻烦在于我只能查“今天还不存在”,2019年不存在、后来被人补上的那些查不出来。
所以红链率是个下限。好在正负样本用的是同一把尺子、同一个时点,两边低估的方向一致,比较仍然成立。
这类右侧删失的问题在历史数据上几乎躲不开。能做的是把它写在明处,并且确保它不会单方向地帮某一组说话。
顺便说一句,删失这件事在小语种上比在大语种上轻,因为小语种的红链被补上的概率本来就低——没那么多人在填坑。所以这个下限在本文关心的那几门语言上,离真值反而更近。
六个特征在9门语言上的表现是什么样?
合并起来看,方向都对
先看把9门语言合在一起的中位数。译文首版3237字节,本地写的1660字节,1.95倍。拉丁占比0.426对0.200,2.13倍。截断前编辑者数2人对1人。
光看这几个数,直觉基本被证实了:译文更大、拉丁残留更多、经手的人更多。
我当时挺高兴,觉得可以直接进入“怎么用”的部分了。
然后拆开逐语言看了一眼,前面那份高兴就没了。
这一步本来是可做可不做的。合并中位数已经能撑起一篇文章,方向也漂亮。我拆开纯粹是因为上一批吃过一次亏——那次算出来的方向刚好符合预期,换个变量重算就翻了。
拆开之后,方向开始翻
| 语言 | 首版字节 | 拉丁占比 | 内链条数 | 截断前修订数 |
|---|---|---|---|---|
| 缅甸语 | 11.95 | 3.18 | 1.67 | 3.00 |
| 高棉语 | 3.48 | 3.72 | 6.00 | 1.50 |
| 蒙古语 | 2.79 | 5.58 | 2.50 | 0.75 |
| 泰米尔语 | 2.13 | 0.72 | 1.27 | 1.00 |
| 越南语 | 2.12 | 1.00 | 0.71 | 0.75 |
| 尼泊尔语 | 1.23 | 1.16 | 1.50 | 1.00 |
| 希腊语 | 0.81 | 1.54 | 0.83 | 1.00 |
| 僧伽罗语 | 0.86 | 0.43 | 0.50 | 2.00 |
| 格鲁吉亚语 | 0.68 | 2.77 | 0.12 | 2.25 |
表里的数是译文中位数除以本地写的中位数。大于1表示译文更大,小于1表示反过来。
首版字节这一列:6门语言译文更大,3门更小。缅甸语11.95倍,格鲁吉亚语0.68倍。同一把尺子,两头都指得出去。
拉丁占比:6门更高,2门更低,1门打平。蒙古语5.58倍,僧伽罗语0.43倍。
内链条数更散:5门更多,4门更少,格鲁吉亚语只有0.12倍——译文的内链条数只有本地写的八分之一。
截断前修订数这一列也不齐:4门译文更多,2门更少,3门打平。这条对应的是“搬进来就没人管”那个直觉,实测它连方向都定不下来。
把四列放一起看,一个规律都排不出来。不是某一门语言特别怪,是每一门都按自己的方式怪。
红链率的方向是齐的,但齐在反方向
六个特征里只有红链率方向一致:能比的4门语言全部是译文的红链率更低。缅甸语0.38倍、越南语0.37倍,希腊语和僧伽罗语的译文中位数直接是0。
这跟直觉正好相反。我原本的预期是译文红链率至少高2倍,因为译文会带着源语言的链接结构过来,落到本地语言里全是空的。
实际发生的事是:翻译工具会自己处理链接。它把源语言里的内链逐个查一遍,能对上本地已有条目的就映射过去,对不上的直接把链接去掉,只留文字。
所以译文的红链更少,不是因为译得好,是因为工具替它把红链清干净了。这跟内容质量没关系,跟谁写的也没关系,纯粹是一段代码的默认行为。
这条发现值一整篇文章的钱,虽然它把我原来想写的那篇否掉了。锚文本在屈折语上的形态问题我写过,那时候我默认链接的目标是稳定的、变的只是锚文字;这次才发现连目标都会被工具动。
引用标记数是唯一一个没翻车的
六个里有一个表现相对稳定:引用标记数,也就是正文里挂了多少条出处。能比的三门语言里两门是译文更多,一门打平,没有反向。
原因不难猜:源语言的条目本来就带着出处,翻译的时候这些标记会跟着过来,而本地随手写的短条目往往一条出处都不挂。
但它的判别力也只有63.9%,而且能比的语言只有三门——另外六门的负样本中位数是0,除不出比值。一个在多数样本上分母为零的特征,稳定得没有意义。
这意味着你量到的不是你以为的那个东西
把这一条想透,整篇的结论就变了。
红链率这个特征,反映的不是“这段内容是不是从别的语言来的”,而是“搬它的那个工具会不会处理链接”。换一个不处理链接的工具,或者干脆手工复制粘贴,同一个特征就会翻个方向。
你以为在量内容的来源,实际量到的是搬运的手法。这两件事在同一批样本上碰巧相关,换一批样本就不相关了。
其余五个特征多少都有这个毛病。首版字节大,是因为这个工具一次性提交整篇;换成边译边存的做法,首版就小。拉丁占比高,是因为工具会保留没译的模板参数;换个工具可能就清掉了。
推到商业站上,这个道理更狠。同一家公司先后换过三套翻译流程,那么它站上三批页面的“痕迹”长得完全不一样。你按一批标定出来的规则去判另一批,会得到一堆假阴性。
把这六个特征当分类器用,能对多少?
最好的两个也只有65.9%
光看倍数不够,还得算判别力。做法是给每个特征找一条最优阈值,让分对的比例最高,然后看这个最高值有多高。
首版字节65.9%,外链条数65.9%,引用标记数63.9%,截断前编辑者数62.0%,拉丁占比60.8%,红链率60.0%,内链条数58.4%。
正负样本的比例是415比540,全部猜“本地写的”就能拿到56.5%。也就是说,最好的特征比闭着眼睛猜只强了9.4个百分点。
而且这还是在阈值按结果反过来挑的情况下——真实使用时你不知道最优阈值在哪,只会更差。
把这几个数摆在一起看还有个细节:最好的两个特征里,外链条数跟首版字节其实高度相关(内容多的页面外链自然多),所以它们不是两条独立证据,是同一条证据的两种说法。
为什么合起来也救不回来
常见的下一步是把几个特征组合起来投票。但组合的前提是各个特征的方向在样本内一致,否则组合只会把噪声叠加。
这批数据里,首版字节在3门语言上反向、拉丁占比在2门上反向、内链条数在4门上反向。组合的时候,你得先知道当前这门语言上每个特征该往哪边算,而这个恰恰是要靠标定才知道的。
换句话说,只要你能标定,就不需要组合;不能标定,组合也没用。
所以我没有做组合模型。做出来会有个好看的数字,但那个数字来自过拟合,换一门语言就掉下去。
拉丁残留这把尺子在拉丁语言上直接归零
越南语是个干净的演示。它用拉丁字母,所以译文和本地写的拉丁占比都是1.000,比值恰好是1.00。
这条特征在越南语上不是判别力弱,是完全没有信息量,等于一根没有刻度的尺子。
更麻烦的是泰米尔语:译文0.363,本地写的0.504,比值0.72,方向是反的。泰米尔语的本地条目里有大量矿物名和化学名,那些名字本来就带拉丁写法,反而比译文更多。
所以这条尺子有三种状态:好使、不好使、和反着使。你在用之前分不清自己碰上的是哪一种,只有事后拿答案对一遍才知道。
这一点跟编码遗留问题有点像:都是看起来通用的技术判断,一落到具体语言上就得重新验一遍前提。
换个语言就得重新标定一次
把上面这些合起来,得到的操作结论很朴素:这些特征不是不能用,是不能跨语言用。
在缅甸语上,首版体量11.95倍,拿它当判据相当好使;把同一条判据搬到格鲁吉亚语上,它会把方向指反。这不是精度问题,是符号问题。
而要在一门新语言上知道该往哪边算,你得先在这门语言上拿到一批带答案的样本。能拿到带答案的样本,就已经不需要这些特征了。这是个死结。
所以我的结论不是“这些特征无效”,而是“在你实际会遇到的场景里,它们用不上”。这两句话听着像,做起来差别很大。
负样本不纯,这一层要说清楚
负样本是“没打任何标记的新建页”,理论上可能混进手工翻译的内容。我查了一遍建者的分布,情况比预想的还特别。
缅甸语的60条负样本里有57条出自同一个账号,中位字节515,标题大多是日本铁路车站;僧伽罗语60条里32条出自一个账号,中位字节276。
这不是机器人,是真人在做半自动的批量小条目。所谓“本地写的”,在好几门语言上其实是“本地某一两个人批量建的短条目”。缅甸语那个11.95倍,一大半是这个原因。
但这个瑕疵不改变主结论。方向翻转发生在僧伽罗语、格鲁吉亚语、希腊语三门上,其中后两门的负样本集中度并不高——格鲁吉亚语60条负样本出自31个账号,最高产的只占13%。
而且商业站上的情况也一样:对手站里的“本地写的内容”,本来就混着大量程序化生成的模板页。这批页面有没有人读是另一个问题,但它们确实会以“本地内容”的身份参与你的每一次比较。
那些从外面看得见的痕迹,到底还剩下什么?
换个地方找:不看正文,看壳
正文这条路走到这儿就断了。但断的只是正文这一层。
回头看红链率那个反转,它给出的其实是一条正面线索:特征之所以不稳定,是因为它反映的是搬运工具的行为。那么反过来,如果一个痕迹反映的是模板的来历,它就应该跨语言稳定——因为模板的来历跟语言无关。
页面的壳正好是这样一层东西:语言声明、语言切换、多语言标注。它们由模板决定,不经过译员的手,也不随书写系统变。
所以我把同一个问题挪到了壳上,换了一批真实的商业站来验。这一步顺带解决了另一个疑虑:前面那批样本毕竟是维基,商业站上到底什么样,总得亲眼看看。
什么样的痕迹才可能跨语言稳定
换地方之前先想清楚一个判据,不然只是换个地方碰运气。
正文层的特征之所以不稳定,是因为它们全都由“谁在搬、用什么搬”决定。搬运的人和工具每门语言都不一样,特征当然跟着变。
那么稳定的痕迹应该满足一个条件:它由模板决定,而不是由内容决定。模板是一套代码,代码不管你写的是哪门语言,它在40个语言版本上的行为是一样的。
按这个判据筛一遍,剩下三样东西:页面开头那行语言声明、页面上的语言切换入口、以及多语言标注。这三样都写在模板里,都不经过译员的手。
抽样框:最有钱做本地化的那批公司
取的是8个市场——斯里兰卡、柬埔寨、缅甸、老挝、蒙古、尼泊尔、格鲁吉亚、亚美尼亚。每个市场取电信运营商、商业银行、国家航空、头部电商与零售各若干家,一共87家。
这是个有意的抽样框,不是随机抽样。这批公司是每个市场里最有预算、最有理由把本地化做完整的,如果连它们都留着痕迹,别的站只会更多。
数据取自2019年12月前后的网页存档快照,接口会返回离目标时间最近的一份,时间戳落在2019年之外的一律不用。
87家里拿到窗口内快照的56家,其余31家分三种情况:根本没有存档、有存档但时间不在窗口内、以及接口当时取不到。这三种要分开计,不能都算成“没有”。
先把没有本地语言内容的站挑出去
量之前得先分档,因为一个整站都是英文的公司,谈不上有没有翻译痕迹。
按可见文本里本地书写系统字母的数量分:200个以上算确实有本地语言内容,17家;1到49个算只有零星几个字,13家;50到199个之间5家;一个都没有的21家。
接下来那17家才是要看的对象。这一步很关键:把没有本地内容的站混进来算比例,会得出一个虚高的结论——它们的语言声明当然写着英语,因为它们本来就是英文站。
分档还带出一个地理上的分野。斯里兰卡9家、柬埔寨8家,一家有本地语言内容的都没有;而格鲁吉亚7家里有5家、亚美尼亚5家里有3家、蒙古6家里有3家。做语言优先级排序的时候,这个分野比人口数据有用得多。
本地化几乎没有中间状态
把56家站按本地文字占比排一遍,会看到一个很干净的两头堆。
占比超过0.88的一批:亚美尼亚两家银行0.90和0.96、格鲁吉亚一家银行0.955、蒙古两家0.96、老挝一家银行0.905。占比低于0.05的另一批,有39家之多。
落在0.5到0.8这个中间带的,56家里只有5家。本地化在实践中要么整站做,要么只做个入口,中间状态很少见。
这条对预算判断有直接用处:你不用纠结“做到什么程度”,市场已经替你把选项砍成了两个。
英文界面词跟着占比走
再看边角文案。本地文字占比在0.88以上的那几家,首页上能识别出的英文界面词是0到1个;占比0.5到0.8的几家是2到4个;而占比只有0.049的那家尼泊尔银行,英文界面词有11个。
数值上这是个同义反复——本地语言多,英文自然少。有意思的是分布的形状:从0跳到11,中间几乎没有过渡。
换句话说,边角文案不是被一点一点翻完的,是跟着整站一起翻或者一起不翻。这跟前面那条两头堆是同一件事的两个侧面。
页面语言声明:17家里写对6家
第一个硬信号是页面开头那行语言声明,跟正文实际使用的语言对不对得上。
17家里写对的6家,写错的3家,干脆没写的8家。写对率35.3%。
写错的三家很典型。格鲁吉亚一家电信运营商的正文88.4%是格鲁吉亚字母,语言声明写的是俄语;尼泊尔一家银行48.9%是天城文,声明写的是英语;另一家尼泊尔银行的正文里有227个天城文字符,声明写的是美式英语。
这一行是模板里的常量,译员拿不到,测试也不会测它。按页面语言声明的规范说明,它要标的是这一页内容的主要语言,而不是这个站的默认语言——很多站错就错在把它当成了后者。
这条痕迹的好处是它跟书写系统无关。不管正文是天城文、格鲁吉亚字母还是西里尔,判断方法都是同一个:把声明的语言和正文实际用的语言比一下。
那13家“只有零星几个本地字”的站,那几个字是什么?
数量都落在4到49之间,太巧了
分档的时候我注意到一件怪事:13家站的本地字母数量分别是4、6、6、7、8、12、14、16、21、26、26、27、33,全部落在同一个很窄的区间里。
这些站分布在5个国家,用5种不同的书写系统,行业也不一样。数量这么接近,多半不是巧合,而是它们上面的本地文字是同一个东西。
于是把这几个站的快照重新抓了一遍,把每一段非拉丁文字连同上下文抠出来看。
是那个“切换到本地语言”的按钮
答案比我猜的还整齐。
斯里兰卡三家电信运营商和一家银行,页面上全部的僧伽罗文和泰米尔文,就是语言菜单里那两个词本身:僧伽罗语和泰米尔语。链接指向的是本地语言版本,而那个版本大多数是空的或者跳回英文。
两家电商平台上是“切换语言”这四个字,尼泊尔那家是“语言切换”,缅甸那家是“语言”。一家尼泊尔银行是“尼泊尔语”,柬埔寨一家电信是“高棉语”,老挝航空是“老挝语”。
整个站上唯一用本地语言写的字,是那个让你切换到本地语言的按钮。
剩下几家的情况稍微不同:蒙古两家和格鲁吉亚一家,本地文字出现在标题标签里的公司名和标语上,正文一个字都没有——那是因为页面用脚本渲染,静态内容里只剩下一个壳。
这一条本身就是个可用的判据
这个现象可以直接当信号用:如果一个站上的本地语言文字少到能数得清,先去看它们出现在什么位置。
出现在语言切换菜单里,说明本地化只做了入口,没做内容。出现在标题标签里,说明可能是脚本渲染,你的静态抓取拿不到真实情况,得换工具。
还有第三种位置:零星出现在某一条新闻标题或者某个促销活动的文案里。这种通常是市场部临时发的一条本地语言内容,跟整站的本地化程度无关,看看日期就知道了。
这两种情况的判断完全不同,而在字符统计表上它们长得一模一样,都是“本地字母十几个”。前一种是本地化只做了入口,后一种是我的抓取方式不对。
分辨方法很简单:看这几段文字出现在什么标签里。挂在导航或者链接文字上的是入口,挂在标题标签里的是渲染问题。锚文本在小语种上会长出多少种形态那篇讲的是同一个位置的不同写法,这里看的是同一个词只出现在一个位置。
多语言标注的覆盖率低得离谱
第三处是多语言标注。56家里有这个标注的只有9家,而在17家确实有本地语言内容的站里,只有1家有。
有的那9家里,几家跨国电商平台把5个市场全部标成了英语的地区变体,一个本地语言都没标;一家赌场标了一个不是任何合法语言代码的写法;另一家把地区子标签写成了跟语言码相同的两个字母,指向的是一个完全不相干的国家。
这几个错法的共同点是格式合法、内容错误。语言标签的格式标准把语法正确和取值有效分成了两件事,校验工具通常只查前一件,所以这些写法一路绿灯。
要抓这类错,只有一个办法:把每个语言代码丢回注册表反查出语言全名,人工扫一眼。格式校验永远抓不到“把柬埔寨写成科摩罗”这种错。
把壳上的信号凑成一个判定流程怎么做?
三处硬信号
第一处,页面语言声明跟正文实际语言是否一致。不一致或者缺失,记一分。
第二处,本地语言文字的数量与位置。少到能数清、且集中在语言切换入口上,记一分。
第三处,多语言标注是否存在、是否指向本地语言。缺失或者只标了英语的几个地区变体,记一分。按多语言站点的官方规范,这组标注要成对出现且互相指回,实测中大多数站连单向都没写。
三处都中,判为“壳是从别的语言版本复制来的”。这个判断比“这些内容是翻译的”弱一点,但它稳定,而且它蕴含的商业结论是一样的——本地版本不是本地团队从头做的,选题就不会按本地需求排。
三处的成本也不一样:语言声明最好查,看一眼源码开头即可;本地文字的数量与位置要跑个脚本;多语言标注最省事,正则一抓就有。真要偷懒,只查第一处和第三处也能用,准确率会掉一些但方向不会错。
两处软信号
软信号不单独作数,只在存疑的时候用来加权。它们的问题在于跟内容策略纠缠得比较深,有可能是主动选择而不是疏忽。
一是地址结构:本地语言的页面用英文单词拼地址,说明这批页面是从主站复制出来再翻的。地址用本地字母还是拉丁转写那篇讲的是主动选择,这里看的是被动留下的痕迹。
二是边角文案:站内搜索提示、错误页、表单校验这类文字通常不在翻译稿范围内。在17家有本地内容的站里,本地文字占比超过0.88的那几家,英文界面词是0到1个;占比在0.5到0.8之间的,是2到4个。
顺带说一个观察:本地文字占比的分布是两头堆的。56家里超过0.88的和低于0.05的各占一大堆,落在0.5到0.8中间的只有5家。本地化这件事在实践中几乎没有中间状态,要么整站做,要么只做个入口。
半天能跑完的最小版本
选20个核心词,每个取搜索结果前10条,去重后大概100到150个页面。
逐个页面看那三处硬信号,各记一分。得3分的判为“壳是复制的”,得0分的判为“本地做的”,1到2分的单列为存疑,不要强行归类。
最后看三档各占多少。这个分布比任何单个数字都有用,因为存疑那一档的大小本身告诉你这个市场的本地化成熟度。
如果连搜索结果都拿不全,小语种上工具没数据时的那几条替代路子可以拿来凑样本,把行业目录、本地媒体的外链页面都算上,凑到100个页面就够跑了。
三档结果分别意味着什么
三分那一档,判为壳是从别的语言版本复制来的。对你的意义是:这个站的本地版本很可能是主站的投影,选题跟着主站走。
零分那一档,判为本地团队自己做的。这种对手最难缠,因为它的选题是按本地需求定的,你占不到结构性便宜。
一到两分的存疑档最有信息量。它通常意味着这个站正在从第一种往第二种过渡,或者不同栏目由不同团队负责。存疑档占比越高,说明这个市场的本地化正在发生变化,值得盯紧。
什么时候该重跑
改版会让所有壳上的信号一次性失效或者一次性修好,所以对手改版之后必须重跑。
另外两种情况也要重跑:对手接入了新的翻译流程,或者你发现存疑那一档突然变大。后一种通常意味着市场里进来了新玩家,用的是跟原来那批不一样的做法。
频率上我的建议是半年一次,比语言层那个数勤一倍。原因很简单:语言层的构成靠一批人的长期习惯撑着,变得慢;单个站的壳一次改版就全变了。
这套判断在实际决策里怎么用?
先说它不能用来干什么
它不能用来判断内容质量。壳是复制的,正文可能翻得很好;壳做得很正,正文也可能是机器直出。这两层没有必然联系。
它也不能用来算精确比例。前面那套标定已经说明,正文层量不准,壳这一层只能给你一个站级别的定性判断,不是页级别的。
还有一点:它判的是“壳的来历”,不是“内容的来历”。两者高度相关但不等价,遇到本地团队用总部模板自己写内容的情况,会误判。
这种误判有个特征:壳三处全中,但内容里全是本地话题、本地人名、本地时间。碰上这种就把壳的结论作废,直接按本地原生对手处理。结构证据被内容证据推翻的时候,听内容的。
能用来干什么
最直接的用途是判断对手的选题清单从哪来。壳是从主站复制的,内容大概率也跟着主站的话题走,那么本地特有的需求就是空位。
第二个用途是估工作量。整个市场的站都只做了入口没做内容,说明这个市场的本地化基础设施还没建起来——没有成熟的译员供给,没有做过这类项目的本地代理,你进去的时候要自己从零搭,预算得往上调。
反过来,如果这个市场上已经有几家把整站本地化做完了,说明供给链是通的,你的执行成本会低不少,但选题上的便宜也没那么好占了。
第三个用途是挑时机。一门语言的公共内容里有多少是搬来的那篇给的是语言层的构成,壳这一层给的是站层的实际状况,两个数一起看,能判断这个市场是刚起步还是已经卷起来了。
还有一个用途是防守。你自己的多语言站上,那三处大概率也没改——我按同样的标准检查过几个客户的站,三处全中的不在少数。看流量报表里机器占多少的时候顺手把这三处也查一遍,成本几乎为零。
跟母语审校是两回事
要说清楚一件事:本文讲的是从外面判断来源,不是判断质量。母语者审校该验哪几层那篇讲的是你自己的稿子怎么验收,那是内部视角,能看到原文和译文的对照。
外部视角看不到对照,所以只能退而求其次去看结构。两套方法解决的是不同的问题,别混着用。
硬要说有什么联系,那就是:验收清单里那些最容易被漏掉的项,正好也是从外面最容易看出来的项。省掉审校那道工序的代价在两个视角下是同一笔账。
中文市场用得上吗
用得上,而且用法更宽。中文站的多语言版本大量存在同一个问题:主站中文做得很细,英文和其他语言版本的壳直接复制,语言声明和多语言标注常年不改。
反过来,中文市场的站在被别人抄的时候也留下同样的痕迹。抄的人会复制结构,但不会改那三处,所以这三处也可以当成溯源的线索。
只是中文市场的内容搬运更多发生在中文内部,也就是站与站之间的转载,那一层跟语言无关,得换别的办法查。壳这套判据只对跨语言的复制有效。
我在这批数据上犯过的错
用错解码,把结论量反了
抓存档快照的时候,有两家站的网页没有声明字符集。工具库遇到这种情况会默认按西欧编码解,我写的判断分支又恰好永远走不到猜测那一步。
结果是这两家站的西里尔文和格鲁吉亚文被解成了一串乱码,而乱码里每个字符都算“非拉丁字母”,于是被统计成了本地文字。
蒙古一家航空公司的本地文字被算成109个,真值是5268,差48倍;格鲁吉亚一家银行算成12个,真值792,差66倍。按错的数字写出来会是“蒙古航空的官网基本是英文的”,跟事实正相反。
正确的解码顺序是:先看响应头里的字符集声明,再看页面里的声明,然后试通用编码,最后才轮到猜。这个顺序不能倒,倒一次就会把一门语言判成另一门。
更值得记的是错误的方向:乱码里的字符全都不是拉丁字母,所以它污染的永远是“本地文字”那一列,而且永远是往多了污染。一个会朝固定方向出错的故障,比随机出错的故障危险得多。
把两种“没有”混在一起算
87家站里31家没拿到窗口内的快照。第一版我把它们统一算成“没数据”,比例是56除以87。
后来分开数才发现,20家是有存档但时间不在2019年,4家是根本没有存档,7家是接口当时连不上。这三种的含义完全不同:第一种说明站还在只是快照不巧,第二种说明这个站在当时几乎没有影响力,第三种纯粹是我这边的问题。
把第三种算进“没有”,等于让自己的网络故障参与了对市场的判断。这条听着荒唐,但在批量采集里特别容易发生,因为失败和空值在数据表里长得一模一样。
抓不到本地文字,先怀疑自己的工具
还有两家站的静态页面里几乎没有正文,本地文字只出现在标题标签里。第一版我把它们跟“只做了语言开关”的那批归成了一类。
实际上完全不同:那两家用脚本渲染页面,正文是在浏览器里生成的,我抓的静态文件里当然没有。把工具的局限当成对方的问题,是这类测量里最容易犯的错。
判据是看文本总量。整页可见文字只有几十个字符,那多半不是页面真的这么空,是抓法不对。这一条跟编码那条是同一个道理,都是先怀疑自己再怀疑对象。
差点把标定结果讲反
合并9门语言的中位数时,六个特征里有五个方向都符合直觉。如果我在那一步收手,这篇文章会是一份“教你识别翻译内容的五个特征”,读着顺,用起来会坑人。
方向符合预期的时候,最该做的就是再拆一层。拆开逐语言看,才看到三门语言方向是反的。
这条规矩我给自己写死了:任何一个符合预期的结论,至少要在一个更细的维度上重算一遍再采信。这次是按语言拆,下次可能是按时间拆或者按站点拆。
成本很低,通常十几分钟;收益是不用把一篇错的东西发出去,然后再花几个月被人当成常识引用。
常见问题解答
用维基的数据标定,结论能搬到商业站上吗?
正文层那部分的结论可以搬,因为它是个否定结论:连有官方标记、格式统一的样本上都分不开,商业站上只会更乱。
壳那部分本来就是在商业站上量的,不存在搬不搬的问题。抽样框有偏,偏向大公司,这一点前面说明了。
为什么不干脆用现成的AI检测工具?
那类工具判的是“像不像机器生成的”,跟“是不是从别的语言翻过来的”不是同一个问题。一篇人工精心翻译的稿子在那类工具上通常是干净的,一篇本地人用生成工具写的原创反而会被标红。
而且那类工具在小语种上的表现本身就没有公开的验证数据,拿一个没标定过的工具去解决一个需要标定的问题,等于把不确定性又叠了一层。
65.9%的判别力,是不是特征选得不好?
有可能。我选的六个都是从外面看得见、不需要读懂语言的特征。如果允许用语言模型去读正文,判别力肯定更高。
但那样就不是“从外面看”了,成本也完全不同。本文要回答的是不懂这门语言、不进对方后台的情况下能做到什么,答案就是这个数。
负样本里混了半自动批量建的短条目,是不是让结论不成立?
不成立的是具体倍数,不是方向不一致这个结论。方向翻转发生在僧伽罗语、格鲁吉亚语、希腊语上,而这三门里格鲁吉亚语和希腊语的负样本集中度并不高。
更重要的是,商业站上的情况也一样:对手站上的“本地写的内容”里,本来就混着大量批量生成的模板页。样本不纯这件事本身就是现实的一部分。
壳上那三处,对方改一下不就没了?
会没,但这恰恰说明它有用。改这三处的成本很低,愿意改的团队通常也会把内容做好;一直不改的团队,多半是因为没人在管这个市场。
所以这三处与其说是技术痕迹,不如说是投入程度的代理指标。
只有一个市场要做,值得跑这一套吗?
值得,但可以简化。单市场的话不用做标定,直接看那三处硬信号,20个词、100来个页面,半天能完。
标定那一套是给需要在多个语言之间比较的场景准备的。只做一个市场,你要的是绝对判断,不是排序。
权威参考资料
本文标题:《小语种内容是不是译过来的,正文里量不出来,能认出来的痕迹全长在壳上》
本文链接:https://zhangwenbao.com/minor-language-translation-trace-shell-not-text.html
版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0