同一个水管工被数了四次 - 以及我们为什么没有发布这个修复
在 72 条回答上测量:抽取出 454 条字符串,对应 424 家真实企业。那个看起来理所当然的修复消掉了 61 个重复 - 同时让 72 家真实店铺消失。我们没有发布。
昨天我们讲的是:我们的抽取器读不了日语、韩语、中文和阿拉伯语。改好之后,它读得了。今天是下一个问题:它读出来的东西,对吗?
昨天收集的 72 条回答 - 六个市场、两个行当、三个助手 - 已经足够拿来回答,不必再花一分钱调用。我们重读了一遍。
一个水管工,四行
在东京的同一张竞争对手表里,Kurashian 这家公司以四个不同的写法并排出现:只有字号的、字号后面跟着全角冒号和一句描述的、字号被括进括号的、以及字号后面挂着排名说明的。四行,一家公司。
在迪拜,Urban Company 出现了三次 - 它旧名字有几种写法就出现几次。在里昂,Ring Twice、Yoojo、ThreeBestRated 和 StarOfService 各出现两次:一次单独出现,一次后面跟着一个破折号和 Lyon 这个词。
一张把同一个对手摆成三行的表,错的不只是数目:它把这个对手的声量摊薄了,也把排名做假了。
六个市场逐个名字对下来的结果是:抽取出 454 条字符串,对应 424 家真实企业。三十个重复。一半集中在日语,但法语也有 - 而正是这个细节让原因变得有意思。
两个原因,其中一个人人都摊上
第一个还是文字的事,跟昨天一样。我们的切分器把名字切到第一个分隔符为止:「品牌 - 口碑很好」变成「品牌」。而它那份分隔符清单是用 ASCII 字符写的。可日语和中文的冒号和括号是全角的,前后不留空格:什么都对不上,于是名字就把整句话一起抱着走。
第二个一点也不异国。切分只作用于在项目符号列表里找到的名字。助手在正文中加粗的那些名字,从来没经过这一步。这就是为什么在里昂「Ring Twice」和「Ring Twice - Lyon」被算成两家:法语一直受影响,只是没人量过。
修复写好了,也量过了
把分隔规则收拢成一条,让所有抽取路径共用,再加上全角标点。大约三十行。放回 72 条回答里重跑:454 条字符串变成 424 条。Kurashian 又变回一家公司,Urban Company 也是。
然后我们逐条回答去数:什么进来了,什么出去了。问题就出在这里。
消掉 61 个重复。
这正是目的。
丢掉 72 个名字
- 其中包括 Maison Deschamps,里昂一家真实存在的面包店,以前抽得出来,现在抽不出来了。
新混进 85 条
,比如「核对资质」「口碑这个本能」。这是建议,不是店铺。
为什么一个正确的修复会弄坏别的东西
这个机制值得弄明白,因为它在代码里看不见。超过四十个字符的名字会被拒掉:这是一道老关卡,写来挡整句话的。在日语里,助手的一句反问大概正好四十五个字符,所以会被挡下。可一旦在括号处切开,只剩二十一个字符:它就过关了。
也就是说,长度这道关卡在那些不用空格的文字里,是在无意中充当噪声过滤器。我们把切分改对了,也就顺手拆掉了这道并非有意设下的堤坝。而竞争对手表只显示八个名字,所以每放进一条建议,就挤掉一个真的。
我们没有发布。这个修复已经写好、量过,连同这些数字一起存在仓库里。等到建议识别能在这四种文字里工作,它才会出去:那才是真正的活儿,而且需要一种语言一种语言地把规则写出来。
这对你意味着什么
在相信一张竞争对手表之前,先数数它有几行。
如果同一个名字以两种形态出现两次,排名就是假的,声量也被摊薄了。
一个工具可以同时朝两个方向出错。
我们的工具既把对手数目吹大,又放建议进来:修好其中一个,另一个才露出来。
问清楚数的是什么,而不只是数了多少。
「八个竞争对手」在你知道这八个是不是企业之前,什么都不说明。
对一个从不变动的数字保持怀疑。
八这个上限,在我们几乎所有测量里都是满的:那是天花板,不是结果。
局限
72 条回答、六个市场、两个行当、只收集了一个上午:这是抽样。把「企业」和「建议」分开是手工做的,其中带着判断 - 像「专业配置」这样的名字也可能是一家公司。但那三十个重复不需要任何判断:它们是以同一个名字开头的字符串。
我们把一个没有发布的修复公开出来,因为这才是有用的信息。一个只讲自己做对了什么的测量工具,量得会不准,讲出来的更不准。