Nike这四个字母在哪门语言里都是一个整块,写成本地文字之后碎成九片
本文目录
- 一个名字在模型眼里到底算不算一个东西
- 这篇跟本站写过的品牌名转写不是同一个问题
- 数据源为什么用维基数据
- 选了哪些品牌和哪些品类词
- 先看一个最简单的例子
- 四个字母对九个碎片,这个对照说明什么
- 整块率:一个名字被切成一个块的比例是多少?
- 拉丁字母32.8%,非拉丁4.8%
- 整块率为零的那19门语言
- 为什么这个比例比token数更值得看
- 英语的42.9%意味着什么
- 品类词比品牌名更惨吗?
- 35门语言的品类词整块率是零
- 因为品类词往往是两个词
- “手机”这一个词,十七门语言的切法
- 一张关键词表的总账
- 希腊语那个2.74倍是个警告
- 碎片率:哪几门语言的名字是靠字节拼出来的
- 同一门语言里,品牌名和品类词的碎片率不一样
- 转写成本地文字那一下,代价到底是多少?
- 同一个品牌,两种写法各数一遍
- 三星电子那个更夸张的例子
- 这些数字该怎么用
- 同一个品牌的两种写法,在模型里有没有共同的块?
- 236组比较,207组交集为空
- 剩下那12.3%是怎么回事
- 搜索引擎那一侧有兜底,这一侧没有
- 同一个词在标题里和在句子中间,是同一串块吗?
- 英语的答案是“是”,而这正是问题所在
- 俄语和阿拉伯语的答案是“不是”
- 老挝语反过来,加空格反而更碎
- 这件事会在哪几个位置真的咬到你
- 名字碎成一堆之后,具体哪几件事会变差?
- 指令执行的确定性下降
- 生成时的拼写稳定性下降
- 被引用时的名字准确度下降
- 跨语言的品牌监测会数不准
- 本地化流水线里最先出问题的那一步
- 那到底该保留拉丁原名还是转写?
- 先承认两个口径会打架
- 按位置分的一张表
- 替代名那一格具体怎么填
- 什么时候应该只用拉丁原名
- 不懂这门语言,怎么自己测一遍自己的品牌名?
- 二十分钟能跑完的最小测试
- 各语言写法从哪儿来
- 结果怎么读成动作
- 顺手多测两样
- 三种看着稳妥、实际会留后患的做法
- 为了让块数好看,去改品牌的本地写法
- 把整块率当成语言优先级的判据
- 假设模型知道两种写法是同一个品牌
- 哪些相邻的问题不归这一层管
- 常见问题解答
- 换一家模型厂商,整块率还是这个样子吗?
- 品牌名碎成一堆,会影响搜索引擎收录和排名吗?
- 结构化数据的替代名字段填了,模型真的会读吗?
- 我们的品牌名是纯英文,是不是就没这个问题了?
- 型号和SKU这类编码,情况一样吗?
- 这套测量多久重跑一次?
- 权威参考资料
摘要:拿维基数据里14个真实品牌和14个电商品类词的官方多语言写法,逐个丢进模型的词表数一遍。Nike这四个字母在英语、俄语、希腊语里都是完整的一个块,转写成本地文字之后:日语3块、泰语3块、老挝语9块而且8块是半个字节,阿姆哈拉语6块全是字节。品牌名整块率拉丁字母语言平均32.8%,非拉丁只有4.8%,19门语言是0。更要紧的是拉丁原名和本地写法之间236组比较有207组连一个块都不共用——在模型看来,那压根就是两个毫不相干的字符串。
有个做小家电的客户去年问了我一个当时答不上来的问题。他们在俄语市场同时用两种写法:官网用拉丁原名,社媒和本地经销商用西里尔转写。问题是,AI回答里提到他们品牌的时候,两种写法的出现频率差了将近一个量级。
当时我给的解释是搜索量和外部提及的差别,这个解释站得住,但不完整。
后来我拿tokenizer把这两串字符各数了一遍,才发现还有一层更底层的东西:拉丁原名在模型的词表里是一个完整的块,西里尔转写是三个块,而且这三个块跟拉丁原名那一个块之间没有任何交集。
模型不是把它们当成同一个品牌的两种写法,是当成两个不相干的字符串。这件事跟搜索引擎那一层完全不同——搜索引擎至少还有同义词表和实体库能把它们连起来,词表这一层什么都没有。
顺着这个念头,我把14个真实品牌和14个电商品类词的官方多语言写法全拉了下来,在39门语言上逐个切一遍。下面这些数字就是那次测量的结果。
一个名字在模型眼里到底算不算一个东西
这篇跟本站写过的品牌名转写不是同一个问题
本站很早写过品牌名进小语种市场会长出三种写法,那篇解决的是用户会打哪一种、你该覆盖哪几种、优先级怎么排。判据全部来自用户行为。
这一篇问的是另一个问题:这几种写法在模型内部长什么样。判据不来自用户,来自那本词表。
两个问题的答案可能冲突,而冲突恰好是这篇最有价值的部分——用户最爱打的那个写法,未必是模型最认得的那个写法。后面有一整节讲这个冲突怎么处理。
另外要跟上一篇量整段文本的token膨胀划开。那篇算的是成本和容量,是量的问题;这篇算的是一个名字的完整性,是形的问题。同一本词表,量整段字决定你花多少钱,量一个名字决定机器认不认得你。
数据源为什么用维基数据
要量“品牌名在各语言里的写法”,第一个问题是写法从哪儿来。自己翻译不行,我不懂那些语言;找译者成本太高而且不可复现。
最后用的是维基数据的实体接口。每个实体有一组多语言标签,由各语言社区自己维护,一个实体编号就能把几十门语言的官方写法一次拿全。
这份数据的好处是它反映的是各语言社区的共识写法,不是某个人的翻译;坏处是它偏向百科式的正式写法,跟商业场景里的实际用法可能有出入。
所以下面所有的数只能用来看结构和量级,不能直接当成你自己品牌的答案。你自己的品牌得自己测,方法在最后一节。
选了哪些品牌和哪些品类词
品牌取了14个:三星电子、耐克、宜家、阿迪达斯、丰田、华为、小米、亚马逊、Zara、奈飞、索尼、飞利浦、IBM、雀巢。挑的标准是全球知名度高、各语言都有正式写法、覆盖不同的品类和不同的原产地。
品类词也取14个,全是电商里最常见的:手机、鞋、洗衣机、咖啡、电视、冰箱、背包、手表、吸尘器、空调、笔记本电脑、耳机、太阳镜、信息技术。
语言选了39门,跟上一篇那70门语言是同一份清单的子集——只留了维基数据里标签齐全的那些。
切分工具还是tiktoken,词表用o200k_base那一代,同时记录每个名字被切成几块、其中几块是不完整的字节。
先看一个最简单的例子
Nike这四个字母,在英语里是一个token。整个名字就是词表里的一个条目,模型读到它的时候,那是一个不可再分的东西。
俄语维基里这个品牌的标签写的也是Nike,希腊语同样。这两门语言直接保留了拉丁原名,所以在词表里同样是一个块。
换成本地文字之后:日语ナイキ3块、韩语나이키3块、中文耐克2块、泰语ไนกี้3块、印地语नाइकी3块。
老挝语ໄນກີ້,5个字符,切成9块,其中8块是半个字节。阿姆哈拉语ናይኪ,3个字符,切成6块,6块全是字节碎片。
四个字母对九个碎片,这个对照说明什么
一个名字被切成几块,直接决定了模型处理它时的“完整性”。一个块意味着这个名字在模型内部有一个独立的表示;九个字节碎片意味着它得靠上下文把这九块拼回一个概念。
拼得回来吗?大部分时候拼得回来,模型见过足够多的老挝语文本。但拼这个动作是有成本的,而且在上下文不足的时候会拼错。
更直接的后果是匹配。当你要模型“把文中所有出现的品牌名替换成标准写法”,它对一个整块的匹配是确定的,对九个碎片的匹配是概率的。
这就是为什么同一条指令在英语上百分之百执行到位,在老挝语上偶尔漏掉几处——不是模型偷懒,是那个名字在它眼里本来就不是一个明确的边界。
整块率:一个名字被切成一个块的比例是多少?
拉丁字母32.8%,非拉丁4.8%
把14个品牌在每门语言里的写法逐个数,统计其中有多少个是“一个块”,这个比例我叫它整块率。
13门拉丁字母语言的品牌名整块率平均是32.8%。26门非拉丁语言是4.8%。
英语最高,42.9%——14个品牌里有6个是完整的一个token。德语和法语27.3%,西班牙语33.3%,斯瓦希里语和约鲁巴语50%(这两门的样本少,标签不全,参考价值有限)。
非拉丁那一侧:希腊语37.5%、格鲁吉亚语22.2%、亚美尼亚语10%、波斯语8.3%、韩语8.3%、乌克兰语11.1%。
剩下19门语言是0.0%。一个都没有。
整块率为零的那19门语言
完整名单:保加利亚语、塞尔维亚语、蒙古语、希伯来语、阿拉伯语、乌尔都语、日语、简体中文、泰语、老挝语、高棉语、缅甸语、印地语、孟加拉语、泰米尔语、泰卢固语、马拉雅拉姆语、僧伽罗语、阿姆哈拉语。
这份名单里有一个细节值得注意:阿拉伯语和简体中文也在里面。这两门语言在上一篇的token膨胀表里表现相当好——阿拉伯语1.38倍、简体中文1.25倍,都比德语便宜。
也就是说,整段文本便宜,和单个名字完整,是两回事。一门语言可以在成本上占优,同时在专名的完整性上全军覆没。
原因是词表里存的整块是按频率来的,而常见的整块基本都是这门语言的高频功能词和常用词根,品牌名这种专名的频率永远排不上。拉丁字母语言之所以还有三成整块率,是因为那些品牌名本来就是拉丁字符串,蹭到了英语词表的位置。
这条机制本身有专门的研究,《语言模型的tokenizer在语言之间制造了不公平》量的是整段文本的成本,专名的完整性是同一个机制在另一个侧面的表现。
为什么这个比例比token数更值得看
token数会随词表换代改善,这一点上一篇量过,印度诸语两代下来省了将近九成。
整块率不会。它取决于这个具体的字符串有没有单独拿到一个位置,而品牌名的频率在整份训练语料里是极低的,扩容多少代都轮不到它。
所以这两个数的性质不同:一个是会好转的成本项,一个是结构性的、基本不变的属性。做长期决策的时候要分开对待。
另一个原因是它更接近你真正关心的问题。你关心的不是这个名字花多少钱,是模型认不认得它、会不会拼错它、能不能在答案里正确提到它。整块率跟后面这几件事的关系更直接。
英语的42.9%意味着什么
反过来看英语这一头也有信息量。14个品牌里有6个在词表里是独立条目,说明这些品牌名在训练语料里出现的频率高到足以单独占一个位置。
这是个很硬的门槛。要拿到一个位置,你的品牌名得在全网的英语文本里频繁到跟常用词一个量级。
换句话说,词表里有没有你的名字,本身就是一个品牌知名度的读数,而且是全球口径的、无法用预算买到的那种读数。
这个读数还有个副作用:已经拿到位置的大品牌,在AI相关的每一个环节都比后来者更稳。它的名字不会被拼错,不会被切错,不会在长上下文里被拆散。这是一层没人讨论过的先发优势。
品类词比品牌名更惨吗?
35门语言的品类词整块率是零
同一套方法量14个品类词,结果比品牌名更极端。
英语21.4%——mobile phone、shoe这类词里只有三个是完整一块,其余都要拆成两块以上。德语7.1%,法语、西班牙语、葡萄牙语、意大利语、荷兰语、波兰语、土耳其语全部是0.0%。
39门语言里,品类词整块率为零的有35门。只有英语、德语、日语、简体中文这四门不是零,而后两门也只有7.1%。
这个结果第一眼看着奇怪:品类词是高频词,为什么反而比品牌名更碎?
因为品类词往往是两个词
答案在样本本身。“手机”在多数语言里不是一个词,是一个词组:mobile phone、мобильный телефон、โทรศัพท์เคลื่อนที่、هاتف محمول。
词组必然拆,因为词表存的是词不是短语。所以品类词的整块率低不完全是语言的问题,一部分是概念本身的问题。开放词表建模那份综述把这个折中讲得很清楚:词表必须在“整块查得快”和“罕见词也能拼出来”之间取舍,取舍的结果就是常见的进整块、罕见的拆片段。
但真正的差别在拆成几块。英语的mobile phone是2块,俄语4块,希腊语7块,泰语6块,缅甸语10块,老挝语22块,阿姆哈拉语13块。
而老挝语那22块和阿姆哈拉语那13块里,几乎全是字节碎片——不是“把词组拆成两个词”,是“把每个字拆成两三截”。
“手机”这一个词,十七门语言的切法
用一个具体的词把上面的抽象说法落地。手机是电商里最通用的品类词之一,各语言都有稳定的说法。
英语mobile phone切成2块,正好是两个词。德语Mobiltelefon是个复合词,也是2块,切在Mobil和telefon之间。
俄语мобильный телефон 4块,阿拉伯语هاتف محمول 4块,孟加拉语4块,印地语5块,泰米尔语5块,格鲁吉亚语6块,泰语6块,希腊语7块,僧伽罗语8块,缅甸语10块。
日语携帯電話4个字切成3块,韩语휴대 전화5个字符3块,中文4个字3块。这三门语言的表现明显好于同为非拉丁的南亚诸语。
然后是两个离群值。阿姆哈拉语ነፋስ ስልክ,7个字符,13块,其中12块是字节碎片。老挝语ໂທລະສັບມືຖື,11个字符,22块,22块全是字节碎片。
把最好和最差摆在一起:英语2块,老挝语22块。同一个概念,同一个日常品类,在模型内部的表示复杂度差11倍。而这个词是那门语言的电商站上出现频率最高的词之一。
一张关键词表的总账
把14个品类词的平均值折成一张500词的关键词表,账是这样的。
| 语言 | 平均每词 | 500词表的token数 | 相当于英语 |
|---|---|---|---|
| 英语 | 2.3 | 1142 | 1.00倍 |
| 荷兰语/简体中文 | 3.2 | 1607 | 1.41倍 |
| 德语 | 3.5 | 1750 | 1.53倍 |
| 日语 | 3.7 | 1857 | 1.63倍 |
| 俄语/希伯来语 | 4.4 | 2214 | 1.94倍 |
| 阿拉伯语 | 4.5 | 2250 | 1.97倍 |
| 泰语 | 5.2 | 2576 | 2.25倍 |
| 希腊语 | 6.3 | 3136 | 2.74倍 |
| 僧伽罗语 | 6.9 | 3437 | 3.01倍 |
| 缅甸语 | 7.6 | 3818 | 3.34倍 |
| 阿姆哈拉语 | 8.2 | 4083 | 3.57倍 |
| 老挝语 | 18.2 | 9100 | 7.96倍 |
这张表最实用的读法是:如果你的流程里有“把整张词表塞进提示词让模型对照着改”这一步,最后一行那门语言的这一步单次要花掉英语的八倍。
而且9100个token的词表加上正文和指令,在不少配置下已经开始挤了。挤的时候框架静默截断,截掉的是词表尾巴——按重要性倒序排的话,尾巴上正好是长尾词。
希腊语那个2.74倍是个警告
表里有一行容易被跳过:希腊语每词6.3个token,比僧伽罗语只低一点,比泰语还高。
希腊语在上一篇整段文本的膨胀表里是2.14倍,已经偏高;到了单个词这一层变成2.74倍,恶化了。
这说明整段文本的倍数和词表的倍数不是一个数,而且可以不同向。整段文本里有大量高频功能词能拿到整块,把平均值拉下来;纯词表没有功能词,全是实词,平均值就上去了。
所以拿整段文本的倍数去估词表的成本会系统性偏低,多数语言偏低两到四成。要估词表,就用词表量。
碎片率:哪几门语言的名字是靠字节拼出来的
整块率看的是“有没有一步到位”,还有一个更狠的指标:这些块里有几块根本不是字。
把14个品牌名在每门语言里切出来的块加总,数其中有多少块单独拿出来不构成一个合法字符,这个比例叫碎片率。
老挝语91.5%——59个字符切成106块,其中97块是半个字节。阿姆哈拉语100.0%——15个字符切成30块,没有一块是完整的字。
然后是一个我没预料到的数:简体中文的品牌名碎片率是20.0%,比泰米尔语的20.6%只低一点点,比缅甸语的0.0%和高棉语的0.0%都高。
原因是品牌译名用的汉字组合不是日常高频组合。“雀巢”“奈飞”“宜家”这类译名在通用语料里的频率,远低于同样两个字的常用词,于是拿不到整块,只能按字节拼。
这条推翻了我开工前的一个隐含假设:中文因为单字信息密度高,专名应该比较稳。实测下来中文的专名跟印度诸语一个量级。
同一门语言里,品牌名和品类词的碎片率不一样
还有一组对照值得单独看:同一门语言,品牌名和品类词的碎片率往往差很多。
日语品牌名5.6%,品类词15.4%。简体中文品牌名20.0%,品类词13.3%。高棉语品牌名0.0%,品类词24.0%。乌尔都语品牌名0.0%,品类词4.8%。
方向不统一,说明这不是语言的属性,是具体字符串的属性。哪一串恰好在词表里有位置,是训练语料决定的,没有规律可循。
实操上的含义是:别用一门语言的一个测量结果去推这门语言的其他词。要知道某个词的处境,就测那个词,成本是几秒钟。
这也是为什么这篇给的方法比给的数字重要。我的14个品牌不是你的品牌,我的数字对你只有参照价值,方法才是能直接拿走的。
转写成本地文字那一下,代价到底是多少?
同一个品牌,两种写法各数一遍
这一节是整篇最能直接落到决策上的一段。做法很简单:拿同一个品牌,把它的拉丁原名和各语言的本地转写各切一遍,比块数。
| 语言 | 拉丁原名 | 本地转写 | 块数对比 |
|---|---|---|---|
| 俄语 | Nike=1块 | Найк | 3块(3倍) |
| 希腊语 | Nike=1块 | Νάικι | 4块(4倍) |
| 日语 | Nike=1块 | ナイキ | 3块(3倍) |
| 韩语 | Nike=1块 | 나이키 | 3块(3倍) |
| 泰语 | Nike=1块 | ไนกี้ | 3块(3倍) |
| 印地语 | Nike=1块 | नाइकी | 3块(3倍) |
| 泰米尔语 | Nike=1块 | நைக் | 2块(2倍) |
| 阿拉伯语 | Nike=1块 | نايكي | 3块(3倍) |
| 希伯来语 | Nike=1块 | נייקי | 3块(3倍) |
| 格鲁吉亚语 | Nike=1块 | ნაიკი | 4块(4倍) |
| 缅甸语 | Nike=1块 | နိုက်ကီ | 5块(5倍) |
| 僧伽罗语 | Nike=1块 | නයික් | 3块(3倍) |
| 老挝语 | Nike=1块 | ໄນກີ້ | 9块,8块是字节 |
| 阿姆哈拉语 | Nike=1块 | ናይኪ | 6块,全是字节 |
规律很整齐:转写一次,块数变成2到9倍,而且完整性从“一个不可分的东西”降到“一串需要重新拼装的片段”。
三星电子那个更夸张的例子
品牌名短的时候差距还不明显,名字一长就摊开了。
Samsung Electronics在英语里19个字符,2块(Samsung一块,Electronics一块)。日语サムスン電子6个字符5块,中文四个字2块,韩语4个字3块。
泰语ซัมซุง อีเลคทรอนิคส์,20个字符,12块。缅甸语32个字符,19块。孟加拉语21个字符,11块。泰米尔语22个字符,14块。
老挝语ຊຳຊຸງ ເອເລັກໂຕຣນິກ,18个字符,34块,其中33块是字节碎片。
英语2块,老挝语34块。同一个公司的名字,同一个意思,在模型内部的表示复杂度差17倍。
这些数字该怎么用
先说不该怎么用:不要拿它当成“别转写”的证据。转写与否首先是市场问题,用户打得出来、看得懂、认得出,这三条比块数重要得多。
该用的地方是当你已经决定要两种写法并存的时候——多数小语种市场都是这个情况——用它来决定哪一种写在哪儿。
具体判据是:希望被机器准确识别的位置用整块那一版,希望被人搜到看到的位置用用户实际会打的那一版。这两个位置在页面上是可以分开的。
本站写结构化数据那篇给过一个同构的结论:正文越本地化越好,标记里却要反着写回国际格式。这里是同一条原则的又一个实例,只是这次的消费方从搜索引擎换成了模型。
同一个品牌的两种写法,在模型里有没有共同的块?
236组比较,207组交集为空
上一节比的是块数,这一节比的是块本身。
做法是:拿每个品牌的拉丁原名切出一组token编号,再拿它在某门非拉丁语言里的写法切出另一组,求交集。
14个品牌乘上各语言,一共236组有效比较。其中207组的交集是空的,占87.7%。
交集为空的意思是:这两串字符在模型内部没有共享任何一个表示单元。它们不是“同一个东西的两种写法”,是两个从零开始的字符串。
剩下那12.3%是怎么回事
有交集的那29组,绝大多数是因为该语言的维基标签本身就保留了拉丁原名——比如俄语和希腊语的Nike条目。那当然有交集,因为它们本来就是同一串字符。
剩下极少数是巧合:转写后的某个字节组合恰好跟拉丁原名的某个片段撞到了同一个编号。这种撞车没有语义含义,纯属编码层的偶然。
所以更准确的说法是:只要真的转写了,交集就是零。没有例外。
这个结论看起来是废话——不同字符集当然不共享编码。但它的推论不是废话:任何依赖字符串相似度的机制,在跨写法的品牌名上都会完全失效,包括模糊匹配、编辑距离、前缀匹配、向量之外的一切浅层方法。
搜索引擎那一侧有兜底,这一侧没有
同样的问题在搜索引擎那边早就存在,但那边有几层兜底:实体库把不同写法挂在同一个实体上、同义词表可以手动配、用户的点击行为会把它们关联起来。
词表这一层什么兜底都没有。它是纯粹的字符串到编号的映射,不认识实体,不认识同义词,也不学习。
模型本身当然知道Nike和ナイキ是同一个品牌——那是它在训练中学到的语义知识,存在参数里,不在词表里。但这层知识的可靠性远低于词表层的确定性,而且在冷门语言上会明显减弱。
判断方法很直接:拿你的品牌名的两种写法分别问模型同一个问题,看回答的内容和详细程度差多少。差得越多,说明这层语义关联在这门语言上越弱。
同一个词在标题里和在句子中间,是同一串块吗?
英语的答案是“是”,而这正是问题所在
量品类词的时候我撞见一个更细的现象,它比整块率更容易被忽略。
拿英语的phone试:单独写是1块,前面加个空格还是1块,放句子中间1块,放句首1块。四种情况完全一致。德语的Telefon、波兰语的telefon,也是四种全一致。
之所以这么稳,是因为词表把带前导空格的版本单独存了一份。英语是空格分词的语言,这个设计对它极其友好——一个词无论出现在哪儿,模型看到的都是同一个编号。
问题在于,所有关于“关键词要不要精确出现”的直觉,都建立在这个稳定性成立的前提上。而这个前提只对英语和几门主要拉丁语言成立。
俄语和阿拉伯语的答案是“不是”
俄语的телефон:单独写2块,前面加个空格变1块。阿拉伯语的هاتف:单独写2块,加空格1块。泰米尔语的கைபேசி:单独写5块,加空格4块。
也就是说,同一个词出现在句子中间和出现在一个列表项的开头,模型收到的是两串不同的编号。字符完全一样,编号不一样。
数值上不大,一两个块而已。但它打破的是一个默认假设:同一个词在页面的不同位置是同一个东西。
在英语上这个假设成立,所以没人验过它。在小语种上它不成立,而同样没人验过它。
老挝语反过来,加空格反而更碎
老挝语的ມືຖື更奇怪:单独写8块,前面加空格变成9块。方向是反的。
原因是老挝语在词表里几乎没有整块,所有组合都靠字节拼。加一个空格改变了字节边界,反而把原来能拼在一起的两个字节拆开了。
这类现象在字节回退占主导的语言上会经常出现,没有规律可循——它取决于那本词表里恰好存了哪些字节组合。
所以对这一档语言,任何关于“这个词值几个块”的说法都必须带上下文。我做实验时吃过这个亏:第一版脚本把词单独编码计数,得出的表跟真实文本里的表现对不上。
这件事会在哪几个位置真的咬到你
第一处是提示词里的关键词清单。清单通常一行一个词,每个词都在行首,行首那个位置的编码跟正文里的不一样。
第二处是少样本示例。你给模型看几个例子让它照做,例子里的词和正文里的词如果编码不同,示例的效果会打折。
第三处是结构化输出。让模型返回JSON,字段值里的词被引号包着,引号改变了边界,跟正文里的编码又不一样。
第四处最隐蔽:锚文本那一层本来就有变形问题,屈折语里一个词进句子就要变格。变格已经让字符串对不上了,编码层又加了一次不对齐,两层叠在一起,“精确匹配”这个概念在小语种上基本失去意义。
名字碎成一堆之后,具体哪几件事会变差?
指令执行的确定性下降
最直接的一处是替换类指令:把文中所有品牌名统一成标准写法、把所有型号加上前缀、把某个词全部替换掉。
这类任务在整块的名字上接近百分之百,在碎片化的名字上会漏。漏的方式还很讨厌——不是整段漏,是十处漏一两处,抽查很容易抽不到。
为什么会漏?因为模型要先从一串字节碎片里还原出“这是一个专名”,这一步是概率的。上下文清晰的时候还原得准,上下文短的时候就未必。
所以症状会集中在标题、属性值、按钮文案这类短文本上——正好是最赚钱也最容易被机器认错的那几类字段。
生成时的拼写稳定性下降
第二处是让模型自己写出这个品牌名。整块的名字它只能写对,因为那是一个不可分的输出单元。碎片化的名字它是一块一块拼出来的,中间有出错的空间。
实际表现是偶尔多一个元音符号、少一个声调记号,或者用了另一种合法但不是你规定的转写。这类错误母语者一眼能看出来,不懂那门语言的人完全看不出来。
这也解释了一个常见现象:AI写的小语种文案里,品牌名的写法在同一篇里就会前后不一致。不是模型不认真,是它每次拼装的结果有随机性。
破法是把品牌名从生成环节里拿掉——用占位符生成,生成完之后本地替换。这样模型压根不需要写出那个名字。
被引用时的名字准确度下降
第三处影响最难量化,但可能最要紧:AI回答里提到你的品牌时,写出来的是哪一种写法、写没写对。
如果你的名字在这门语言里是碎片化的,模型倾向于用它更有把握的那个写法——通常是拉丁原名,因为那是一个整块。
这件事有好有坏。好处是拉丁原名的写法更稳定;坏处是如果你的本地化策略是主推本地写法,模型会持续输出跟你的策略不一致的那一版。
这一层跟你的语种有没有被AI答案覆盖到是两个问题,得先过了覆盖那一关,这一层才有意义。
跨语言的品牌监测会数不准
第四处是报表侧。要统计品牌在各语言内容里的提及次数,脚本按字符串匹配数,而各语言的写法互不相同。
这件事本身不新鲜,做多语言监测的人都知道要建别名表。新的部分是别名表要建到什么颗粒度——如果模型输出的写法带随机性,别名表就得覆盖变体,而变体是列不完的。
相对可行的做法是反过来:不数写法,数上下文。在一段文本里找“这个品牌所在的语义位置”,而不是找那个字符串。这需要另一套工具,成本高很多。
低成本的折中是接受误差,但把误差按语言标出来——整块率高的语言数得准,整块率为零的语言数出来的数偏低,报表里注明这一点,别拿两个数直接比。
本地化流水线里最先出问题的那一步
把上面几件事串起来看,会发现它们集中爆发在同一个位置:批量处理。
单篇人工把关的内容不会出问题,人一眼就能看出品牌名写错了。出问题的是那些一次处理几百条、没人逐条看的环节——商品标题批量改写、属性值批量翻译、描述批量生成。
这些环节的共同点是量大、单条价值低、没有逐条验收。而它们恰好是最依赖“模型能准确识别这个名字”的环节。
所以排查的顺序应该反过来:不是先查内容质量,是先查这条流水线上有没有一步依赖模型识别专名。有,就把那一步单独拎出来加一道显式对照。
那到底该保留拉丁原名还是转写?
先承认两个口径会打架
用户口径的答案在本站早就给过:看当地人实际打什么,多数非拉丁市场里本地写法的搜索量更高。
机器口径的答案正相反:拉丁原名是一个整块,本地写法是一堆碎片。
两个口径打架的时候,先别急着选一个。它们对应的是页面上不同的位置,而位置是可以分开的。
本站写地名的本地名与外来名时用过同一套思路:不是二选一,是判断每个字段的消费方是谁,然后按消费方填。
按位置分的一张表
| 位置 | 写哪一版 | 理由 |
|---|---|---|
| 标题、H1、正文首段 | 用户实际打的那版为主,拉丁原名并列一次 | 这里的消费方是用户和搜索引擎 |
| 正文其余部分 | 本地写法 | 可读性优先,模型有上下文可用 |
| 结构化数据的name字段 | 本地写法 | 跟页面主体一致 |
| 结构化数据的替代名字段 | 拉丁原名必填 | 给机器一条确定的锚 |
| 图片替代文本、文件名 | 拉丁原名 | 文件名本来就只能拉丁 |
| 喂给模型的提示词与术语表 | 拉丁原名为主键,本地写法作值 | 主键要整块才稳 |
| 数据源与平台字段 | 按平台要求,通常拉丁原名 | 跨市场对齐优先 |
这张表的核心思路只有一句:给人看的地方按人的习惯写,给机器当锚点的地方留一个整块。
替代名那一格具体怎么填
结构化数据里有个专门放别名的字段,schema.org的alternateName,多数站都空着。
这一格是成本最低、收益最直接的一处改动:把品牌名的所有写法都列进去,拉丁原名、本地转写、常见的错误写法各一条。
它不影响页面显示,不影响用户体验,改一次管很久。而它给出的是一条明确的“这几串字符指同一个东西”的声明,而这正是词表那一层给不了的东西。
本站写缩略语那篇里说过同一件事:一个概念在这门语言里有几种形态,词表要单独立一层。替代名字段就是那一层在页面上的落点。
什么时候应该只用拉丁原名
有几种情况可以不纠结,直接全用拉丁原名。
一是品牌名本身是无意义的生造词,转写过去在当地也没有含义,转了只是增加一种写法要维护。
二是目标用户的键盘上打拉丁字母比打本地文字更顺手,这在几个市场是真实存在的。
三是你的品类本身是技术类或者奢侈品类,这两类的用户天然接受拉丁原名,甚至更信任拉丁原名。
反过来,快消、日用、母婴这几类,本地写法几乎是必须的——用户不会打拉丁,而且拉丁写法会显得这个牌子跟自己没关系。
不懂这门语言,怎么自己测一遍自己的品牌名?
二十分钟能跑完的最小测试
整套流程不需要懂那些语言,只需要拿到你自己品牌名的各语言写法。
准备三样东西:你的品牌名清单(拉丁原名加各语言写法)、一个tokenizer库、一台能跑Python的电脑。
输出是一张表,每行一个语言,四列——写法、字符数、块数、其中几块是字节碎片。这里的“字符数”指的是Unicode码点数,不是UAX #29定义的字素簇——对天城文、孟加拉文这类文字,两个数会差不少,报数的时候要说清用的是哪一个。
核心代码就是编码一次取长度,加上逐个token试解码判断是不是完整字符。整个脚本不到三十行。
各语言写法从哪儿来
最可靠的来源是你自己的本地团队或者经销商实际在用的写法。他们写在合同、发票、社媒账号名上的那一版,才是这个市场真正流通的写法。
没有本地团队的话,退而求其次是搜索建议——把拉丁原名打进去,看引擎给出的本地写法建议。这条路本站讲工具返回零怎么补数据时详细写过。
再退一步是维基数据,也就是我这次用的源。它的写法偏正式,但至少是社区共识,不是某个人拍脑袋定的。
三个来源如果给出不同的写法,那本身就是个发现——说明这个市场里你的品牌名还没收敛,这比块数重要得多。
结果怎么读成动作
块数1到3、零字节碎片:不用管。这个名字在模型里是稳的。
块数4到8、字节碎片少于一半:可以用,但要在结构化数据的替代名字段里补上拉丁原名,并且在提示词里用拉丁原名做主键。
字节碎片超过一半:这个写法不适合当任何自动化流程的锚点。生成环节用占位符,替换环节用本地脚本,监测环节按上下文数而不是按字符串数。
三档的分界线不精确,你可以按自己的容错度挪。重点是这张表最后必须变成三种不同的做法,而不是一列数字。
顺手多测两样
测品牌名的时候,顺手把两样东西一起测了,成本几乎为零。
一是你的核心品类词。品类词的块数决定了关键词表的整体成本,也决定了模型能不能准确识别品类边界。
二是你的型号和SKU编码。这一类通常是字母加数字的混合串,切出来往往比想象中碎,而它们在商品页上出现的密度非常高。
三样加起来一次跑完,得到的是一张属于你自己的对照表。这张表建议存进内容规范里,因为它一两年不会变。
三种看着稳妥、实际会留后患的做法
为了让块数好看,去改品牌的本地写法
第一种是过度反应。看到本地写法碎成九块,就想换一个切得整齐一点的写法。
这个方向是错的。品牌名的写法首先要用户认得、打得出、念得顺,块数在这三条面前排不上号。
而且换写法的成本远高于块数带来的收益——已有的外部提及、经销商物料、社媒账号全部要跟着动,而外部世界怎么写你的名字,你本来就管不了。
正确的做法是接受碎片,然后在流程上绕开它:主键用拉丁原名,生成用占位符,替代名字段填全。
把整块率当成语言优先级的判据
第二种是把这个数用错了地方。19门语言整块率为零,很容易被读成“这19个市场不适合做”。
这个推论有两个问题。一是整块率反映的是这个具体名字的处境,不是这个市场的价值。二是整块率低的语言往往就是竞争最稀薄的语言,两件事由同一个原因决定。
本站最早那篇算优先级的文章说过,按单一指标排序,第一年一定会做反。这一条是同类的错,只是指标换了一个。
整块率的正确用途是决定“在这门语言上要不要多做一层防护”,不是决定“做不做这门语言”。
假设模型知道两种写法是同一个品牌
第三种最隐蔽,因为它在多数时候是对的。
模型确实知道Nike和ナイキ是同一个品牌,这层知识存在参数里。但这层知识的强度跟这门语言的语料量正相关,在冷门语言上会明显减弱。
而你没法直接观测这层强度。它不报错,只是在某些查询上答得薄一点、在某些替换上漏一处。
能做的是别把它当成保证。任何依赖“模型会自己关联起来”的流程,都该在小语种上加一道显式的对照——把两种写法在提示词里明确并列一次,成本几个token,收益是把概率变成确定。
哪些相邻的问题不归这一层管
品牌名在这门语言里该怎么转写、用户实际打哪一种,不归这一层,那是用户行为的问题。
商标能不能注册、有没有跟别人的商标撞车,不归这一层,那是法律的问题。
页面上品牌名的排版、字体缺字形、大小写折叠,不归这一层,那是字形集和字体文件的问题。
这一层只管一件事:这个名字进模型之后,还是不是一个东西。它决定的是自动化流程的可靠性,不决定这个名字好不好。
常见问题解答
换一家模型厂商,整块率还是这个样子吗?
绝对数会变,结构不变。各家的词表规模和构成不同,某些品牌在这家是整块、在那家是两块,这种个案差别很常见。但“拉丁字母语言的整块率明显高于非拉丁”这条结构性结论,在任何一家的词表上都成立,因为它由训练语料的语言构成决定,不由某一家的工程选择决定。要用在具体决策上,最稳妥的做法是拿你实际在用的那家的分词库重跑一遍,改一行代码的事。有一种情况值得单独测:如果某家厂商在某个区域市场投入很大,它的词表可能对那几门语言做过专门优化,这种优化不会写进公告,只能靠实测发现。
品牌名碎成一堆,会影响搜索引擎收录和排名吗?
不会。搜索引擎的分词和索引走的是完全另一套机制,跟模型的词表没有关系。你的页面在搜索里的表现只跟内容、结构、外链这些老因素有关,不会因为品牌名在某个模型的词表里碎成九块而变差。会受影响的是所有经过大模型的环节:AI答案里的提及、AI改写的准确度、站内AI客服的识别、批量处理脚本的可靠性。所以判断这件事要不要管,先看这些环节在你的流程里占多少分量。如果一个都没用上,这篇对你的实际价值就只有一条:结构化数据的替代名字段填一下,几分钟的事,早晚用得上。
结构化数据的替代名字段填了,模型真的会读吗?
读不读取决于内容进模型的路径。如果是通过检索管线拿到你的页面,结构化数据通常会被一起提取,替代名那几串字符会跟着进上下文,这时候它是有用的。如果是模型凭训练时记住的知识回答,那这个字段不起作用,起作用的是你的品牌名在训练语料里出现过多少次、以什么写法出现。所以这个字段的价值在于覆盖前一种路径,而前一种路径正是内容更新之后能最快见效的那一条。填它的成本很低,不确定性主要在收益侧,这个投入产出比在我看来是划算的。另外它对搜索引擎那一侧也有明确用途,那部分收益是确定的。
我们的品牌名是纯英文,是不是就没这个问题了?
问题小很多,但没有完全消失。纯英文品牌名如果知名度够高,在词表里可能是一个整块,那确实很稳。如果是新品牌或者生造词,它在词表里同样没有位置,会被拆成几块,只是拆出来的都是拉丁字母片段,不会退到字节级。实际影响是拼写稳定性——生造词模型容易拼错,尤其是那种故意省元音或者双写辅音的写法。测一下就知道:把品牌名单独编码,看是不是一块。如果不是一块,在提示词里给个明确的拼写示例,能省掉不少返工。至于要不要为了整块去改名字,那显然不值得,知名度上来了自然就有位置了。
型号和SKU这类编码,情况一样吗?
更碎。字母数字混合串在词表里几乎不可能有整块,因为它们的组合是无穷的。一个像XR-2400W这样的型号,切出来通常是四到六块,而且切法跟前后有没有空格、有没有连字符强相关。这带来两个实际问题:一是模型抄型号容易抄错,尤其是数字部分;二是让模型从一段文本里提取所有型号,召回率会明显低于提取品牌名。破法是在需要精确的场景里别让模型碰型号,用正则提取或者占位符替换。这一条在多语言场景下没有额外恶化——型号本来就是拉丁字符,各语言一视同仁,算是这堆麻烦里少见的好消息。
这套测量多久重跑一次?
品牌名清单变了就重跑,否则一两年跑一次就够。词表换代的时候值得重跑一遍,但对品牌名这类低频字符串,换代带来的变化通常很小——扩容出来的新位置会分给高频组合,专名依然排不上。真正需要重跑的时机有两个:一是你进了新市场,多了一种写法;二是你换了模型厂商。第一种只需要跑新增的那几行,第二种要全表重跑。跑完把新旧两版并排,重点看有没有哪个写法从整块变成了碎片,那种情况虽然少见但会影响已经上线的流程。
权威参考资料
本文标题:《Nike这四个字母在哪门语言里都是一个整块,写成本地文字之后碎成九片》
本文链接:https://zhangwenbao.com/minor-language-brand-name-token-fragmentation.html
版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0