诉诸存储和传输的编码

用脑补而不是重传对有损传输进行纠错 后,有朋友评论:

可现代的图像压缩、数据编码已经很大程度上把可以脑补的空间从传输载荷中沥干了——完美编码下所传输的数据是近乎噪声的没有任何特点的分布。在这个框架下,被压缩的载荷如果随便丢了一点什么、就缺缺实实损失了没法复原并且大段落的信息。这也是为什么一直要期待以tcp模拟无损传输媒介的原因。

随人工智能渐进,我们必须能够设想 ai 间的通信方式。即将到来的海量交互的万物互联时代,传统 tcp/ip 方式显然无法满足需求(主要是不带柔性的最短路径优先算法和不带柔性的可靠传输协议),作为一个例子,知乎上一个问题特别有代表性,我也给出了一个回答:把 14 亿中国人都拉到一个微信群里,在技术上能实现吗?

今天在技术之外的语言学层面谈谈这个问题,看看作为人类,我们如何解决相互交流的通信问题,可以此类比,模拟人的心智的人工智能仍有希望重走相同的路。

通信的核心是编码,对人类而言,编码即语言和文字。对比两种代表性的语文,中文和英文的诉诸对象,很多事实其实就在眼前。

中文作为象形文字代表,其实物可追溯到商代甲骨文(我出生在甲骨文故乡,我老婆母亲的外公主持过 1930 年代甲骨文挖掘工作),而英文作为字母文字代表,其实物可追溯到克里特岛和伯罗奔尼撒岛的爱琴文明(业余研究了 25 年有余),甲骨文和线形文字的不同起源背景可见两种文字不同的核心本质。

甲骨文主要用于占卜。在东亚大陆并没有大的地缘隔离,各地区(比如当时的河南,山东,陕西)无论在地貌还是物产上相差无几,物质同类,没有太大的物资交换所必需的交流动机,因此甲骨文记载的文字并不直接用于交流。果真用于占卜激励并取悦国王,国王供养的祭司阶层主观上并不希望平民掌握这种文字,从而垄断这种文字的解释权为自身获益。

至少在最初,甲骨上的象形文字以记录为主,交流为辅助。

线形文字完全不同,它诞生于地中海文明圈,这块地方从近东腓尼基人据点,经过塞浦路斯,克里特岛,伯罗奔尼撒岛,希腊半岛,西西里岛,亚平宁半岛,一直到迦太基角几乎都是地理隔离的,它们在物质上很依赖其它地方,商业交流甚至掠夺战争是常态,交流成为硬需求。线形文字以简单的线形笔划替代复杂的符号表示简单音节,满足了地中海文明圈的需求。

至少在最初,线形文字以交流为主,辅助记录,但他们也可能用另外的文字进行记录。

这篇文章不专门讲历史,对甲骨文和线形文字的年代以及此后发生的事情不详述,只需知道,最终甲骨文变成了汉字,而线形文字变成了英文(以及很多别的字母文字),但它们几乎都没有丢掉其产生时的背景动机,足足影响了后续文明 3000 多年。

语音侧重交流,而字型侧重记录,商业和占卜捡其所需,分别选择了字母文字和象形文字。可是事后看,先人们这种懵懂选择的合理性到底在哪?

中文汉字是压缩率非常高的文字,我们能看到的关于中文的缺点,在压缩率方面,都是它的优点。

汉字听到写不出来,看到却又不会读,有个段子,一个老外向中国朋友抱怨说自己学了好几年中文,听说完全没问题,就是不能读写,中国朋友告诉它,别担心,中国人中有超过一半(显然保守了)的人跟你一样。

汉字符号复杂难以记忆,这不是汉字难读写的根本,汉字难读写的根本在于读音和字型对不上,汉字的听说和读写系统是独立发展的,一音多字,一字多音,对于一个没有中国文化背景的外国人,很难在字音和字型之间总能做出正确的对应。即便是中国人,介绍自己名字时也必须人工对应,比如 “我叫山鸡,xx 的鸡”。

另一个有趣的例子,“我蒙泽于他”,如果单独学习过 “蒙” 和 “泽”,理解它们分别是 “盖上”,“潮湿” 的意思,这句话对于学习者而言就是 “我被他的潮湿覆盖” ,而 “蒙泽” 只是一种比喻语,没有背景完全不知道,很多中国人自己也不懂什么是 “蒙泽”。绝大多数任何组合词都有这问题,比如 “开水”,“雪耻”,“生存”,“熟识”,单看每一个字的含义和组合词的含义大相径庭。

和学习英文时单词量越大越上道不同,学习中文时孤立汉字学得越多,可能越糊涂。

学习中文有个前置,就是先学背景文化知识,获得一种汉字环境的共识,如果没有背景知识作为解压缩汉字的共识,与段子里老外说他 “听说完全没问题” 不同,听说也会很费劲。

当听到 “经理” 这个词,它指什么?解压缩后,它可能是 “经络纹理”,“经营管理”,“经世明理”,“经常被修理”,…

在不能保证每个人发音一致的客观情况下(注意,这里要涉及有损传输了),当你错听了一个汉字,或者听漏了一个汉字,由于汉字的孤立字型对应单音节发音,会丢失很多的意义载体。仍以 “经理” 举例,读作 “jing li”,如果没有听到 “jing”,或者听到了发音不准的 “jin li”,几乎没有任何手段将其纠错,恢复成 “jing li 经理”,也许你会误解为八杆子打不着的 “锦鲤”。

每个汉字的二维结构编码对应一个单音节,在听说过程中,丢失一个音节就丢失一个汉字,而一个汉字可能包含有非常核心的含义,比如上述的 “蒙泽”,如果错听成 “蒙灰” 会怎样?“我被他的潮湿覆盖” 显然是错的,但 “我被他的灰尘覆盖” 可能就对了。

汉字是很不适合做有损传输的,人与人之间的语言交流其实就是一个有损传输环境,一个例子是,东北人和广东人写同样的汉字,但说起话来却互相完全听不懂,在这个例子中,方言可以理解为对方之于自己方言的不准确发音。

但汉字非常适合记录存储,二维方块字空间压缩非常紧凑,读音脱离字型在别处,并不在记录中。现代出土的古籍,读音虽然可能早就不同,但仍能识别大意,紧凑的代价就是丢失了读音,但这看起来并无所谓。

把中文的例子反过来看英文。自然语言的交流必须诉诸听说,这是英文的优势。其中两点非常重要,一维多音节编码提供了单词冗余,屈折语法提供了句法冗余。

英文的特点是听到就能写出来,看到就能读出来。由于英文的一个单词对应多个音节,听错或听漏一个音节也可以从其它音节中将其恢复,同样,拼写错一个字母,也很容易从其它字母中恢复。比如 “anderson”,即使看到 “andersoX”,也可以恢复为 “an de sen”,如果汉字 “安德森” 缺了 “森”,就无法区分 “安德森”,“安德烈”,“安德鲁” 了。

作为屈折语的英文存在变格,时态,语态,在读音上有连读规则,都对 “纠错恢复” 提供了依据,比如哪些结构前后必须是哪些结构,哪些词前后必须是哪些词,语法上很严格但在读音上却很松散,这些特点和作为孤立语的中文汉字完全不同,汉字与此相反,语法很松散,读音很严格,这意味着即使印度人和日本人用英文交流丝毫无障碍,而两个不同的地方的人用中文几乎无法交流(感谢普通话吧)。

事情总守恒,英文自带纠错能力非常适合交流,但因为它的一维多音节编码不太紧凑,对于存储而言却有些浪费,同样一本书,中文版可以很薄,英文版却很厚。

屈折语即使对于存储,英文在传输和存储之间的权衡也有迹可循。

和哈夫曼编码的思想类似,在屈折语的语言自然进化过程中,常用单词倾向于用更少的音节编码以降低听说读写开销,但另一方面,更少的音节意味着冗余度降低,而越常用的单词误码概率越高,因此对于常用词,不能太长,易读写,也不能太短,易纠错。

对于孤立语,由于单音节构词,书写系统和读音很容易分离到两条独立路径,单音节字型不断被压缩进新的含义,而读音系统却独自走上类似屈折语的道路,这个从汉字的 “象形”,“会意”,“假借”,“形声” 四阶段发展路径中可见一斑,如今我们看各地方言,特别是南方方言和北方的晋语安阳片,与屈折语的听说系统非常类似,念出来都是 “一嘟噜一串儿”。

不管英文还是中文方言,对于交流都选择了屈折语的听说系统。

我不知道在后来的历史发展历程东亚大陆更多非易失但不易得的硬质读写介质对语言文字的影响有多大,但如果在公元前 2000 年就有了易失且易造的纸,我想汉字也会走上屈折语的道路,因为此时即便对于存储的误码率也不低了。有一点很明确,目前的考古学和语言学研究已经表明,在更早的二里头文化时期,中国人早期的语言确实是屈折语,文字显然是后来的事。

人类文明最自然的交流方式,就是使用多音节词的屈折语进行交流。

语言诉诸交流,也就是传输,强冗余纠错,文字诉诸记录,也就是存储,强压缩。

但传输和存储对于介质而言是一回事,信息都要在时间和空间小心翼翼地通过介质。因此压缩还是冗余,这是一个权衡的结果。

回到计算机网络,点一下题。

为了降低空间占用,如朋友的评论所说,现代编码算法已经榨干了可用的任何纠错空间,包括不限于 unicode(utf8),jpeg,以及几乎所有现代音视频编码,于是只能为这些编码构建一个无损的底层传输信道,比如使用 tcp 传输,即使有编码承认自己容忍有损传输,但显然这种有损并不是严格的,比如某些 “关键帧” 丢了还是要重传。显然这并不是自然的方式,特别是目的是为了交互而不是为了拷贝时。

终点是存储介质的编码方案强调压缩没毛病,这种场景一般具有守护,然而终点是对端的交互编码方案却必须强调冗余。

我们无法想象人工智能之间使用 tcp 或有约束的 udp 作为交互协议会怎样,海量流量会不会炸崩整个网络。但显然现如今编码方案的交互代价很高,为一个比特的误码重传一个 mtu 的数据代价太大,在海量终端交互的极端场景中,这种方式将使网络在实时性约束下彻底不可用。

在压缩为核心的编码内核之下,包括 fec 在内的任何缓解措施都是辅助,自然的方案是从编码中纠错而不是从协议中纠错,我们目前的 fec 更多强调 “大声喊”,而不是 “从意义中恢复缺失的部分”,这种 fec 显然不是语言学层面的 fec,它只是协议的附带。

自然的方案需要在流量和纠错能力之间权衡,纠错能力越强的编码越长,我们不应该去赌错误不会发生或者小概率发生而去构建无损信道,然后在这个无损信道上传输不需要纠错的短编码,反过来,我们应该接受信道有损的普遍性,从而去选择一个稍微长,但又不很长的编码,介于中文和英文之间,就像我们的祖先曾经做过的那样。

浙江温州皮鞋湿,下雨进水不会胖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux------进程地址空间

目录 一、进程地址空间 二、地址空间本质 三、什么是区域划分 四、为什么要有地址空间 1.让进程以统一的视角看到内存 2.进程访问内存的安全检查 3.将进程管理与内存管理进行解耦 一、进程地址空间 在我们学习C/C的时候,一定经常听到数据存放在堆区、栈区、…

4、正则表达式、本地存储

一、正则表达式 1、定义 用事先定义好的一些特定字符,这样的字符组合,组合成一个“规则字符串” 2、正则的组成 特殊字符 字母、数字、下划线、中文、特殊字符… 元字符(常用) 1、\d 匹配至少有一个数字 var reg /\d/ /…

2024Java面试题一

目录 问题: 答案: 问题: 什么是Java中的多态性(Polymorphism)?Java中的重载(Overloading)和重写(Overriding)有什么区别?什么是Java中的抽象类&…

XGB-13:使用 XGBoost 外部内存版本

在处理大型数据集时,训练 XGBoost 模型可能会面临挑战,因为整个数据集需要加载到内存中。这可能成本高昂,有时也难以实现。从版本 1.5 开始,用户可以定义自定义迭代器以按块加载数据来运行 XGBoost 算法。外部内存可以用于训练和预…

每日一题Acwing-借教室

503. 借教室 - AcWing题库 想到了差分没想到二分法。同时注意INT的范围是10位。 #include<iostream> using namespace std; int n,m; const int N 1e610; int r[N],s[N],d[N],t[N]; long long b[N]; bool check(int mid){for(int i1;i<n;i){b[i]r[i]-r[i-1];}for(…

SpringBoot整合rabbitmq-直连交换机队列(二)

说明&#xff1a;本文章主要是Direct定向/直连类型交换机的使用&#xff0c;它的大致流程是将一个队列绑定到一个直连交换机上&#xff0c;并赋予一个路由键 routingkey&#xff0c;当一个消息携带着路由值为routingkey&#xff0c;这个消息通过生产者发送给交换机时&#xff0…

【冲击蓝桥篇】动态规划(下):你还在怕动态规划!?进来!答题模板+思路解析+真题实战

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

【vue】vue 是怎么把 template 模版编译成 render 函数的,什么是AST抽象语法树

什么是AST 抽象语法树 是一个对象/或者json是一个数据结构 AST通常是由多个节点组成的树状结构&#xff0c;每个节点代表一个语法单位或表达式。节点之间的关系通过父子关系或兄弟关系来表示程序的结构。在不同的编程语言和工具中&#xff0c;AST可能有不同的表示方式和节点类…

Python中检查一个数字是否是科技数的完整指南

目录 前言 什么是科技数&#xff1f; 如何判断一个数字是否是科技数&#xff1f; 分割数字并计算平方 Python实现科技数检测的示例代码 科技数的应用场景 1. 数字游戏 2. 数据处理 3. 算法优化 4. 数据结构设计 总结 前言 科技数&#xff08;Tech Number&#xff09;是一…

(二十三)Flask之高频面试点

目录&#xff1a; 每篇前言&#xff1a;Q1&#xff1a;为什么把request和session放在一起&#xff1f;Q2&#xff1a;Local对象的作用&#xff1f;Q3:&#xff1a;LocalStack对象的作用&#xff1f;Q4&#xff1a;一个运行中的Flask应用程序分别包括几个Local/LocalStack&#…

若依前后端分离版开源项目学习

前言&#xff1a;vscode中vue代码没有高亮显示&#xff0c;可以下载vetur插件解决&#xff0c;ctrl点击无法跳转函数定义问题&#xff0c;可以下载vue-helper插件解决&#xff1b;idea中ctrl点击函数即可跳转函数定义。 一、登录 1.生成验证码 基本思路&#xff1a; 后端生…

vue a-table 实现指定字段相同数据合并行

vue a-table 实现相同数据合并行 实现效果代码实现cloums数据格式数据源格式合并代码 实现效果 代码实现 cloums数据格式 const getColumns function () {return [{title: "分类",dataIndex: "checked",width: "150px",customRender: (text, …

JMeter--9.录制脚本

录制步骤 1.新建线程组&#xff1a;测试计划->线程->线程组 测试计划下&#xff0c;至少要有1个线程组&#xff0c;因为在录制器中需要选择【目标控制器】 2. 新建录制器&#xff1a;测试计划->非测试原件->HTTP(S)测试脚本记录器&#xff08;HTTP代理服务器&…

【vue】vue2 和 vue3 的区别,响应式/性能提升/渲染函数/插槽

vue2/vue3 的对比 响应式原理 vue2 使用 definePropertyvue3 使用 proxyapi vue2 是选项式 options API 基于对象的方式&#xff0c;将组件的选项 data&#xff0c;methods 等作为组件实例属性代码逻辑比较复杂&#xff0c;难以维护data 必须是函数使用 mixin 复用相同逻辑 命…

Ansible自动化运维(四)jinja2 模板、Roles角色详解

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

PHP7.3 GD库报错imagecreatefromstring(): No JPEG support in this PHP build

最近在做docker容器的时候遇到了问题&#xff0c;安装的GD库没有JPEG支持&#xff0c;因为项目用到了绘图技术&#xff0c;这个支持必不可少。要解决这个问题也很简单&#xff1a; 安装jpeg支持&#xff0c;重新编译gd库&#xff0c;生成gd.so文件&#xff0c;重新加载gd库扩展…

Springboot+vue的考务报名平台(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的考务报名平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的考务报名平台&#xff0c;采用M&#xff08;model&#xff0…

vue2后台管理系统demo,包含增删查改、模糊搜索、分页

因一直敲小程序&#xff0c;vue不熟练&#xff0c;自己练手项目&#xff0c;就包含增删查改以及模糊搜索分页 一、页面简单但功能齐全 二、数据是mock模拟 三、启动步骤 1、 json-server --watch data.json 启动mock数据 2、npm i 下载依赖 3、npm run serve 四、github地址…

ETH网络中的账户

ETH网络中的账户 Externally owned accounts (EOA) - 外部账户 由用户控制&#xff0c;我们导入助记词创建的账户就属于此类账户。 Contract accounts (smart contracts) - 合约账户 合约账户由以太坊虚拟机执行的代码控制。它也被称为智能合约。合约帐户有相关的代码和数据存…