刷 X(推特)的时候,遇到外语推文,下面会多出一行"翻译帖子"。点一下,原文下方就冒出中文。这个功能看着简单,但放在一个每天几亿条推文的平台上,背后的取舍其实挺值得说道。下面纯粹是从一个用户兼写代码的人的角度,聊聊它大致是怎么运转的——X 没有公开全部内部细节,这里讲的是公开行为和通用原理。
第一步:它怎么决定要不要给你看那个按钮
平台会判断这条推文是什么语言,再和你的界面/账号语言比一比。两者不一样,才显示"翻译"入口;一样就不打扰你。所以中文用户刷到中文推文是看不到翻译按钮的——这一步是语言检测,决定的是"要不要给你这个选项",还没真的去翻。
第二步:真正干翻译的不是 X 自己
X / 推特很长一段时间是把翻译外包给第三方机器翻译的——早年点开翻译,底下会写着 "由 Google 翻译"。平台没必要自己重新发明一套翻译模型,接一个成熟的机器翻译服务最划算。具体用哪家引擎这些年换过几次,但思路一直是:平台负责产品和入口,翻译交给专门的引擎。
第三步:为什么是"点了才翻"
这是最关键的一个设计。一个平台每天产生几亿条推文,如果每条都预先翻译成几十种语言,是天文数字级的浪费——因为绝大多数推文根本没人会去看它的翻译。
所以做法是按需触发:你点了"翻译",系统才去翻你点的那一条、翻成你要的那一种语言。没人点的推文,永远不消耗一次翻译。把成本花在真正被需要的地方。
第四步:一条爆款推文被几百万人点翻译
按需翻译有个副作用:一条病毒级推文,可能短时间内被几百万人各自点"翻译"。如果每次点击都老老实实调一次翻译接口,等于同一句话翻了几百万遍,结果还都一样。
合理的系统会缓存:同一条文本、翻成同一种语言,结果是确定的——翻一次,存起来,后面所有人复用。这样无论一条推文多火,真正的翻译计算基本只发生一次。
第五步:@、#、链接、表情怎么办
推文不是纯文字,里面塞满了 @用户名、#话题标签、短链接、emoji。这些东西不能翻:翻了 @ 就 @ 不到人,# 话题会断开,链接会失效。
所以翻译时要把它们当成"不可翻译的实体"挑出来、原样保留,只把中间的自然语言交给引擎。一条 @alice 看看这个 #巴黎 🗼,翻完里面的 @、#、emoji 必须一字不差地还在。
第六步:它还会告诉你"这是机翻"
翻译结果通常会标注"译自某语言",并保留"查看原文"的入口。这是有道理的:机器翻译会丢语气、玩不转俚语和反讽,所以默认给你原文、翻译只是辅助理解,而不是替代原文。把原文入口留着,是对内容的尊重。
它翻不好的地方
俚语、网络黑话、反讽、一词多义、还有阿拉伯语/希伯来语这种从右往左排版的语言——机器翻译都容易翻车。所以 X 的翻译定位很清楚:帮你看懂大意,不是给你一份信达雅的译文。看懂了再判断要不要回头啃原文,这才是它该有的样子。
说到底,社交平台的翻译功能不靠什么黑魔法,靠的是几个朴素的判断:需要的时候才翻、翻过的别重复、该保留的东西别动、翻不好的地方诚实地交回给原文。