从踢牙老奶奶到火星文,从火星文到人工智能
先复制一个小的密码——
£³¨Ç£ê£±£¬£µ¨É¨Ù¨Ó¡££±¨Ð¨Ç¨Í£¬£±¨Ð£ä¨Ê¡£
¨×£²£ä£´£¬¨ß¨Ç¨Ñ¨È¡£¨ÙYA¨È£ã£¬£ê£±£´¨Ø¡£
£´¨Ñ£´£õ£¬£â£ã£â¨Ó¡££±£ã£±¨É£¬¨Í¨Ø£´¨Ó¡£
看的出来的——请和火星总部联系。
很多朋友可能不知道一个事情,不过不少人应该听说过无冬城之夜。台湾版的无冬城之夜本地化(l10n)中有一个重大bug。俗称踢牙老奶奶。
原文是:我看到一位老奶奶慈祥的脸——我抓住她的手,但是她竟然一脚踢到我的牙齿。
估计所谓踢牙,应当是英文kicked my teeth in,指漠视。最后应当是她竟然无视我。这是典型的一个翻译错误,而且估计可能是机器辅助翻译没有修润的结果。这个错误和当年大菠萝的温暖骷髅情况不一样,没有任何一个电脑会把蠕虫骷髅(wormskull)错成温暖骷髅(warmskull)。
由此肇因产生了很多火星文,例如说:这个游戏里面到处是踢牙老奶奶。
不过,无论是机器翻译不完善造成的火星文,还是人造的火星文。其实都是一个核心问题,NLP。
机器可以理解形式化的编程语言,并且转换为机器代码。是因为语言是具备一定的形式(form)的,或者叫做范式(pattern)。而例如说可以借助符号来做唯一分割(语法树的生成,或者说波兰树的生成),符号的唯一性。(所谓重载,是用将参数等重载辨识元素附加在名字里面,导致名字的定义仍旧唯一,详细大家可以看有做对象导出的库的导出符号表)然而自然语言本身分割未必唯一,符号也是和上下文相关的。例如最有名的例子,中国队大败美国队获得冠军。(中国队大败美国队获得冠军。和中国队大败美国队获得冠军。前一句中的败是动词,后一个应当是使动用法)这句同时出现了非唯一分割和符号歧义,即使对于人来说,也是具备歧义句特征的。只有在特定的语境中,歧义才会消除。例如如果在表扬中国队表现的文章中,那应当是后面一个解释。
对于自然语言的理解,人工智能中叫做NLP问题(Nature Language Precess)。首先要处理的就是断词和消除歧义。其中涉及的问题到不繁复,但是很庞大。最关键就在于数据量上。
断句的话,一般简单的都采用HMM算法,这就需要有前后词或者词组的衔接概率作为基础。中文又具备一个恶心的特性,就是假借。尤其在口语和古语方言一类的东西里面,倒置使动频繁。所以单纯做HMM还不完全解决问题。现在有很多分词软件,是基于HMM的。拿古文上去试试就知道是不是了,例如:古之人诚不余欺也。
至于消除歧义,更是麻烦的要死的东西。要消除歧义,只有把所有歧义可能全部列举出来。然后查看上下文中相关词汇出现的频率,选择比较高的一个。然而对于上面那个使动用法的例子,两者相关词汇的频率应当差不多。而电脑又不会像人一样判断语境,因此要误判就不奇怪了。
还有一个就是上面踢牙老奶奶出现的原因,俗语(idiom)或者叫俚语。例如百口莫辩,如果不加处理,至少也是can’t argue with one hundred mouth(people)。事实上比较恰当的翻译应当是unable to give a convincing explanation for self-defense。当然,NLP的目的未必是翻译,因此可能出现别的错误。不过错误的原因是一样的,就是俗语不了解。这个问题人也会出现,只是人的智能就比电脑高一些。百口莫辩不知道典故错误翻译过去还算难免,买椟还珠这种东西即使知道椟怎么翻译,在真的翻译前也会问问典故的吧。