language

语言的边界就是我的世界

引子

有印尼的朋友问我, mokondo 在中文里面对应的词是什么? 我想了一下, 发现没有对应的词. 不是单一语言的人都知道, 有很多词无法翻译到另一个语言. 你最多只能找到一个意义非常接近的词, 在大部分的语境下, 他们能直接替换, 但他们总会有细微的差异. 例如, 怎么把中文的"江湖"翻译到其他语言呢?

一个词, 还是一个概念? 我曾经尝试和别人解释 monad 的概念, 但是发现很难. 网上有调侃说 monad 的悖论 “一旦你知道了什么是 monad, 你就失去了其他人解释什么是 monad 的能力”. 要解释 monad 的概念, 需要大量其他概念的支撑, 他们是一环套一环的, 与普罗大众都认识的日常生活概念之间有很长的距离.

我也经常想推荐 clojure 给朋友, 他们很自然会问, clojure 有什么好处? 我发现这个回答也很困难, 不是因为 clojure 相比于其他编程语言很难找到优势, 而是我不知道应该从哪开始讲起.

概念是不能独立存在的

一个概念的存在, 依赖于他和其他概念的关系. 如果没有了对比和衬托, 相对的概念就一起消失了. 例如有一个外星人社会, 他们从来不会说谎, 怎么和他们解释"诚实"的概念呢? 要解释一个概念, 我们必须大量的其他概念来支撑. A 是 B 的反面, A 类似 C, 但是在 D 情况下, A 不是 C, 因为 E.

甚至一些日常生活中的概念, 我们认为很容易理解, 但是要怎么和外星人解释这个概念呢? 例如什么是 “鸟”. 需要"动物", “羽毛”, “飞”, “翅膀” 等概念去支撑, 然后你又需要再用"植物", “生命"等概念去支撑"动物”.

除了日常的, 自然的概念. 还有很多因为人和社会才诞生出来的概念, 例如"正义", “公平”. 概念是一层一层往上堆叠出来的, 不同语言的, 不同文化背景的人, 他们会用不同的"下层概念"堆叠出"上层概念". 正是这种构建概念时使用的基础材料不一致, 导致了有些词句无法翻译. 思考如何解释"找关系", “人情”, “面子”, “信任”, 给蜂巢意识, 绝对集体化的外星人听.

NLP 的基石, word embedding 背后的原理, 也是基于同样的思想. 简单来说,一个向量之所以能表示词义,是因为这个向量捕捉了该词在大量文本中与其他词的共现关系。这个向量在数学空间(高维空间)中的位置,就是由它的“邻居”们共同决定的。

不同的语言系统

不同的语言系统构造新词/新概念的方式不一样, 构建方式有没有好坏之分呢? 先看几个例子 德语 中文 kraken 病 haus 房子 krakenhaus 医院 wagen 车 krakenwagen 救护车 versichern 保证 krankenversicherung 医疗保险

中文 英文 肉 meat 猪肉 pork 牛肉 beef 羊肉 mutton 鱼肉 fish 鸡肉 chicken

对于外语学习者, 都是左边的更容易理解, 更容易记忆. 能清晰的看到新概念的组成部分. 这就是 rich hicky 说的 simple vs easy. simple 是构造清晰, easy 是和已经熟知的概念接近. easy 是相对的, 对于汉语母语者, 英语母语者学习其他欧洲语言例如法语, 德语会更容易.

以下是我自己的推论. 自然语言总体的演化是向着 easy 方向的, 文化融合的时候, 对双方都 easy 的词, 会被保留下来. simple 会导致 easy, 但是 easy 并不一定 simple. 所以不同的语言系统, 因为其历史原因, 都在不同的地方演化出了 non-simple 的"屎山".

转换系统

学习外语中最重要的, 就是思维的转变. 从基础的词/概念开始记忆和理解, 用基础的外语概念, 来解释更高层次的外语概念. 这就是很多人说学习外语, 记住一个词最好的方式是使用那门语言来解释这个词.

越是高层次的概念, 在直接翻译转换的时候就越容易失真. 我在和其他人解释技术问题时, 经常听到 “X 的 Y 不就是 Z 的 W” 嘛. 不是, 他们只是近似, 一开始为了方便理解, 可以先这样想, 但他们有本质上的不同. 而很多人没有转换系统的能力, 他们会直接把新概念投射到他所认知世界的最近似位置, 并由此产生一系列后续的错误理解.

DDD (domain driven design) 的核心就是技术人员和业务人员说同样的"语言", 使用相同的"概念"来描述世界. 而有些人自己嘴里说出来的词, 在不同场景下表达了不同意义却不自知. 以后有谁难沟通, 我就发这个给他看.