微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 语言会变,但四种"器官"是一起变老的吗?一项跨越223年、五种语言的实验给出了答案

语言会变,但四种"器官"是一起变老的吗?一项跨越223年、五种语言的实验给出了答案

2026-08-20 12:59
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-08-20 12:59 科技行者

1803年到2026年,英国议会里的人们从"陛下的天恩演讲"聊到今天的移民政策辩论。德国、意大利、波兰、土耳其的议会记录也留下了同样漫长的时间刻度。

这些记录堆在一起,是接近1700万亿个词的文本,覆盖两百多年。研究者面对这样一座数据宝库,问了一个听起来简单、实际上没人真正回答过的问题:语言的语法在变,词义在变,说话方式也在变,这些变化是齐头并进的吗?还是说,某种语言的语法可能已经"未来感十足",但用词还停留在上个世纪?

这个问题之所以一直悬而未决,不是因为没人关心,而是因为研究工具本身就是碎片化的。研究词义变化的人用的是词向量模型,研究语法变化的人算的是依存句法树的深度,研究语用变化的人做的是言语行为分类。三条河各流各的,谁也没法把它们放到同一张地图上比较水位。这就是CHRONOLENS这项研究要解决的核心问题。

四条河为什么汇不到一起

先说清楚这四条"河"具体指什么。

**形态学**:研究词的内部构造,比如动词的时态、语态(主动还是被动)、名词的词形变化。**句法学**:研究句子的结构,比如从句嵌套得多深、词与词之间的依存距离有多远。**语义学**:研究句子在说什么内容,比如主语是不是人、有没有用否定词、说的是具体的事还是抽象的概念。**语用学**:研究话语在交际场合里的功能,比如是不是用了"我们""你"这样的人称指示词,是陈述还是提问,语气客气还是强硬。

这四个层面各自有一套成熟的分析工具,但问题是,这些工具用的度量单位完全不同。你没法把"从句嵌套深度增加了0.3"和"被动语态使用率下降了7个百分点"放在同一个坐标系里比大小,就像你没法直接比较"我今天跑了5公里"和"我今天读了200页书"哪个"更多"一样,它们根本不在同一个量纲上。

这就是为什么研究者要引入语言模型。近些年的多语言大模型,比如Qwen、Llama这类,能把不同语言的句子都编码进同一个高维数学空间里。理论上,这个空间应该能同时容纳形态、句法、语义、语用的信息,给它们一把统一的尺子。

但这里出现了第二个障碍。多语言模型内部的每一个维度,并不对应某个具体的语言学特征。

**稠密表示**:指神经网络输出的那种每个维度都有非零数值、信息混杂在一起的向量表示。

一个稠密向量的第137维可能同时和"是否用了被动语态""句子长不长""有没有提到经济话题"都沾点关系,你没法指着某个维度说"这就是语法特征"。这就好比你去医院验血,报告单上只给你一个综合分数,不告诉你血糖、血脂、白细胞各自的数值,你根本没法诊断具体哪里出了问题。

稀疏自编码器:把混沌拆成可读的信号

针对这个问题,学界这几年发展出了一种叫**稀疏自编码器**的技术(Sparse Autoencoder,简称SAE):一种把稠密、难以解读的神经网络内部表示,重新分解成一组更少被激活、但每个激活都对应相对明确含义的"特征"的技术。

打个比方,稠密表示像是把一段音乐录成一条波形曲线,你能看到声音在动,但看不出这段音乐里到底有几种乐器、谁在什么时候进的。稀疏自编码器则像是把这条波形拆成分轨,鼓点是一条轨道,贝斯是另一条,人声又是一条,大部分时间大部分轨道是静音的(这就是"稀疏"),但一旦某个乐器响起来,你立刻知道是谁在响。

问题是,这项技术本身还留了一个大坑。如果你分别在英语文本和德语文本上各训练一个稀疏自编码器,两边学出来的"特征编号137"根本不是同一回事。这就好比两个团队各自给自己乐队的乐手编号,A团队的3号是鼓手,B团队的3号可能是贝斯手,编号本身不携带任何跨团队可比的信息。

**这正是这项研究要跨过的第二道坎:如何让不同语言、不同历史时期学出来的特征,共享同一套编号,从而真正可以互相比较。**

Crosscoder:给不同语言发同一本编号手册

研究者采用的解决方案叫**crosscoder**(跨模型编码器):一种不是分别给每个语言/时期训练一套独立特征字典,而是让所有语言/时期共用一套特征索引,只在"重建方式"上各自保留专属解码器的架构。

具体的做法是这样的。研究者先把句子按长度和话题严格配对,比如从英语、德语、意大利语、波兰语、土耳其语里各挑一句长度相近、话题类似的句子,组成一个"元组"。之所以要这么严格地配对,是因为如果任由crosscoder自由学习,它很可能偷懒,不去学真正的语言学差异,而是直接靠"句子长短""话题是不是经济类"这种表面特征就能分辨出这是哪种语言、哪个年代的句子。这就好比你想测试两个学生谁的数学更好,结果给的题目难度完全不一样,那测出来的差距根本不能说明数学能力,只能说明题目难度不一样。

配对完成后,每种语言的句子先经过一个冻结不动的语言模型编码成向量,然后送进crosscoder。这个crosscoder有一个共享的编码器把所有语言的向量投影到同一个特征空间,叠加起来,只保留最强的一批激活(这就是稀疏性的来源),但在把这些特征"翻译"回去、重建成各语言原始向量的时候,每种语言用的是自己专属的解码器。

**这个设计的精妙之处在于:特征的身份是全局共享的,但每个特征在不同语言里"有多强""起多大作用"可以完全不同。**

打个比方,这就像一本多语言词典的词条编号是统一的,第872号词条永远指向"愤怒"这个概念,不管你查的是英语版还是德语版。但每种语言表达"愤怒"这个概念时用的具体词汇、语气强度可以完全不一样。如果不这样设计,你就没法回答"愤怒这个概念在英语和德语里的表达强度是否同步变化"这种问题,因为你压根不知道两边词典里哪个词条对应哪个词条。

特征贴标签:先学会认路,再问路牌上写的什么

crosscoder训练完之后,产生的是一堆没有语言学含义的数字编号特征。第872号特征到底是"愤怒"还是"经济话题"还是别的什么,模型自己不知道,也不该知道,因为如果在训练阶段就告诉模型"这是语法特征""那是语义特征",学出来的特征分布就会被人为的标签框死,反而丢失了模型自己发现的、可能更细腻的结构。

所以研究者采取的策略是**先不告诉模型任何语言学标签,等特征学完了,再用事后归因的方式给每个特征贴标签**。

具体操作是这样的:研究者准备了23个句子级别的探测任务,分别对应形态、句法、语义、语用四个层面。比如判断一个句子的谓语动词是主动还是被动语态(形态)、判断句子里有没有从句嵌套(句法)、判断主语是不是一个具体的人(语义)、判断句子里有没有用"我们""你"这样的指示词(语用)。

对每一个crosscoder学出来的特征,研究者做的事情是:把这个特征从某个句子的表示里"抹掉"(术语叫**消融**,ablation:把某个特定特征的激活值人为设为零,观察这样做之后模型在某个任务上的表现下降了多少,用下降幅度反推这个特征到底负责什么),然后看看这四类探测任务的准确率各自下降了多少。如果抹掉这个特征后,被动语态判断任务的准确率掉得最厉害,而且掉得比其他三个任务都明显得多,那这个特征就被归入"形态学"。

这个思路其实很像医生给病人做手术前的功能定位测试。医生想知道大脑某个区域到底是负责运动还是负责语言,他们的做法不是直接切开脑子看结构(那样看不出功能),而是用微弱电流暂时"关闭"这个区域,然后让病人做各种任务,看哪项任务突然做不了了。如果关闭之后病人说不出话了,那这块区域大概率和语言有关。特征消融用的正是同样的逻辑:不看结构,看功能;不问"这是什么",问"拿掉它,什么坏了"。

而且这个归因过程还留了一道保险,如果一个特征拿掉之后,对四个层面的影响都差不多、没有哪个特别突出,那它就不会被强行归到某一类,而是标记为"未分配"。这个设计承认了一个语言学事实:语言的这四个层面本来就不是完全互斥的,一个句子的用词选择常常同时携带语法信息和语用信息。**与其把这种模糊性硬掰成清楚的分类,不如老老实实承认有些特征就是跨界的。**

三方对比:crosscoder到底强在哪

光有方法不够,得有证据证明这套方法比现有方案更靠谱。研究者拿crosscoder和两个对照组做了比较。

一个对照组是最朴素的方案:直接用语言模型编码出来的稠密向量,取前512个主成分。另一个对照组是**pooled SAE**(池化稀疏自编码器):把所有语言的向量混在一起训练一个共享的稀疏字典,但保留各语言独立的解码器,这个方案介于纯稠密表示和crosscoder之间,少了crosscoder那种"联合编码、分别解码"的结构。

对比结果相当清楚。在**语言学一致性**这项指标上(也就是特征空间里的历史变化轨迹,和独立测量的形态、句法、语义、语用统计数据之间的相关系数),稠密向量只有0.29,pooled SAE是0.28,crosscoder则达到0.72。差不多是前两者的两倍半。

这组数字值得多说两句。0.28和0.29几乎是一样的,这意味着单纯把训练数据换成"共享稀疏字典"这一步,基本没带来任何实质性提升。真正的跳跃发生在crosscoder引入"共享特征身份+条件专属解码器"这个结构之后。这说明单靠稀疏性本身解决不了问题,关键是要让同一个特征编号在不同语言里保持身份一致,同时又允许它在不同语言里表现出不同的强度。

在**特征专一性**指标上(一个特征的消融效应有多集中地落在它被分配的那个语言学层面上,0.25代表四个层面各占四分之一、完全没有专一性),crosscoder达到0.89,明显高于稠密向量的0.74和pooled SAE的0.73。

有意思的是,在**重建误差**(衡量特征还原原始信息的能力,误差越低说明还原得越准)和**轨迹稳定性**(衡量测出的变化方向是不是稳定,不会因为换一批采样句子就大幅波动)这两项更偏工程性的指标上,三者的差距反而没那么大。crosscoder的重建误差是0.04,比pooled SAE的0.07低,但轨迹稳定性三者都在0.90到0.92之间,相差无几。

这组对比传递出一个很关键的信息:**crosscoder的优势不是让轨迹变得更"平滑",而是让学出来的特征更贴近语言学真实结构。**换句话说,原始表示里其实已经包含了足够稳定的历史变化信号,只是这些信号被打乱地混在稠密维度里。crosscoder做的事情,本质上是把这份已经存在的信号,重新组织成人类能读懂的语言学范畴。

研究者还挑了几个具体特征出来看,这部分挺好玩的。第5236号特征在1900到1945年间的英国议会记录里激活最强,典型触发语句是"asked the Minister whether it is the intention of the Government"(询问部长政府是否有意……),这是一种书面质询的固定句式,和具体讨论的是移民问题还是别的什么政策话题无关,纯粹是一种语用层面的"提问框架"。而第1082号特征则在1980到2004年间激活最强,典型句式是"Does he not agree that..."(他难道不同意……),是一种更具对抗性的口头质询语气。这两个特征都被自动归为"语用"类,而且区分得很细,一个是书面质询模式,一个是口头对抗模式,这说明crosscoder捕捉到的不只是粗糙的话题变化,而是真正精细的交际功能差异。

测量"变了多少"和"往哪儿变"

搞定了特征归因,接下来就是这项研究真正想回答的问题:不同语言、不同层面的历史变化,量级上是不是可比的?方向上又是不是一致的?

研究者设计了两个指标。第一个叫**量级**(magnitude):某种语言在某个历史层面上,相对于它最早可考的那个年代,特征表示移动了多远,用欧几里得距离除以初始表示的模长做归一化,得到一个无量纲的相对变化幅度。第二个叫**方向**(direction):两种语言各自的变化位移向量之间的余弦相似度,数值接近1说明两者朝着相似的方向变化,接近-1说明方向相反,接近0说明毫无关联。

这两个指标合起来其实很像描述一次旅行。量级告诉你这个人走了多远,方向告诉你他往哪个方向走。走得一样远的两个人,完全可能一个往北一个往南,南辕北辙。

先看量级的结果。把每种语言各自完整历史区间的变化画出来(图2),德国语言变化的最终量级最大,达到0.89,而且从1980年前后开始明显加速。英语变化得比较平缓,在1990年代达到峰值后回落到0.62。波兰语在1980年前后一度达到0.53,之后反而回落到0.45。意大利语和土耳其语的最终数值都是0.53,但两者的历史轨迹形状完全不同。

如果换到一个所有语言都覆盖到的公共区间(1950到2020年)来比较(图3),排名又变了:土耳其语跃升为变化幅度最大的语言,均值0.61,德语第二,0.43,英语和意大利语并列第三,0.35,波兰语最小,0.34。

这个排名倒挂本身就是一个值得琢磨的现象。**"哪种语言变化最快"这个问题,压根没有一个固定答案,答案完全取决于你选的时间窗口。**德语在它自己长达一个半世纪的历史里积累的变化最大,但如果只看最近七十年,土耳其语的变化速度反而更快。这提醒我们,任何关于"语言正在快速演变"的论断,都得先说清楚是在哪个时间尺度上说的。

更细一层,研究者把变化拆到四个语言学层面上分别看(图3那张热力图)。结果显示,同一种语言内部,四个层面的变化幅度其实相当接近,比如英语的形态、句法、语义、语用分别是0.36、0.36、0.38、0.29,四个数字挤在一小段区间里。德语是0.43、0.41、0.45、0.44,也很接近。这说明**语言的四个"器官"确实倾向于同步老化,而不是某个层面突飞猛进、另一个原地踏步。**

语言之间的差异,明显大于同一语言内部四个层面之间的差异。这就好比你去体检,同一个人的心肺功能、肝肾功能、骨密度这些指标往往会呈现出相近的"年龄段"(一个健康的人各项指标都年轻,一个老化的人各项指标往往一起老化),但不同人之间的整体健康水平差异,会比同一个人内部各项指标的差异大得多。

同样走了多远,却走向了完全不同的方向

如果只看到这里,可能会觉得故事已经讲完了:语言在变,四个层面一起变,不同语言变化速度不同。但真正让这项研究显出深度的地方,是它没有止步于"变了多少",而是继续追问"往哪儿变"。

图4画出了每种语言从最早记录到最新记录的净变化向量,箭头长度代表量级,箭头之间的夹角代表方向差异。这张图揭示了一个此前的量级分析完全遮蔽掉的事实。

意大利语和土耳其语的净变化量级完全相同,都是0.53,但它们的方向截然不同,夹角很大。反过来,德语和土耳其语的量级差异很大(0.89对0.53),方向却高度接近。

**这意味着,量级相同不代表演变路径相似,量级不同也不妨碍演变方向一致。**

这个发现如果换成一个更贴近生活的比方来说会更清楚。假设有两个人同一年从北京出发去旅行,一年后各自走了差不多同样的总里程,一个走了5000公里,一个走了5200公里,单看"走了多远"这个数字,你会觉得他们经历差不多。但如果一个人往南走到了海南,另一个人往北走到了漠河,他们看到的风景、经历的气候完全是两个世界。只报告"总里程数"这一个数字,会把两段完全不同的旅程包装成"差不多的经历",这是一种信息的丢失。语言变化的量级指标,面对的正是同样的陷阱。

那么这种方向上的分化,能不能用"语系相近"来简单解释呢?研究者也检验了这一点,结果并不支持。英语和意大利语的变化方向相似度很高,但英语和同属日耳曼语族的德语,反而不是彼此方向最接近的搭档。德语和土耳其语的方向相似度反而很高,尽管这两种语言在语系谱系上几乎毫无关联。

这个结果耐人寻味。它暗示着**议会语言的演变可能更多地被共同的政治、文化、制度性压力所塑造,而不是单纯由语言自身的谱系血统决定。**比如,如果两个国家在同一历史时期都经历了类似的民主化进程、都面临相似的移民政策讨论压力,它们议会语言的语用层面(比如个人指示词的使用、质询句式的演变)可能会朝着相似方向靠拢,即便这两种语言在语法结构上八竿子打不着。

这个发现也呼应了此前学界的一些工作,有研究区分过"文化驱动的语义变化"和"语言内部自发漂移"这两种不同机制,还有研究证明文化差异确实可以从语言使用模式里被反推出来。这项研究相当于给这类假说,提供了一份跨越五种语言、跨越两百年、来自同一分析框架的证据。

具体到每一个语言学指标,故事更细腻

前面说的都是crosscoder学出来的抽象特征层面的结果。为了让这些发现更可验证、更"接地气",研究者还额外做了一层分析:直接用18个可观测的、人工可解释的语言学指标(比如"被动语态使用比例""个人指示词使用比例""长距离依存结构比例"),在1950到2020年这个公共区间里,看看每种语言各自涨跌了多少。

这一层分析里,90组"语言×指标"的检验结果里,有37组在统计上显著(经过多重检验校正后依然成立)。**个人指示词**(personal deixis,指句子中用来指代说话人、听话人的代词,比如"我""你""我们")这一项呈现出全场唯一的普遍一致上升趋势,五种语言全部上升,其中德语、意大利语、波兰语、土耳其语的上升幅度都达到统计显著。这大概反映出一种跨语言共通的趋势:现代议会话语正在变得越来越个人化、越来越直接对话式,不再是过去那种更加冷峻抽象的官方陈述口吻。

但其他指标就没这么齐心了。**被动语态**在英语、德语、土耳其语里都显著下降,却在波兰语里显著上升。**长距离依存结构**(衡量句子里相隔较远的两个词之间语法关系的复杂程度)在英语、德语、意大利语里下降,波兰语却反着涨。**并列结构**的使用在英语、德语里显著增加,波兰语却显著减少。

这些反着来的指标恰恰说明了一件事:**"总体变化量级相近"这个宏观结论,完全可能是由完全不同、甚至相互抵消的微观变化拼凑出来的。**这就好比两个班级的期末平均分一模一样,但一个班是大家分数都很平均,另一个班是一半学生考满分、一半学生不及格,平均分这一个数字,把两种截然不同的分布状况给抹平了。crosscoder测出的宏观量级指标,某种程度上也面临类似的风险,它把18项具体指标压缩成了一个综合数字,方向性的细节需要回到分项数据才能看清。

分层来看这种跨语言一致性也不均匀。语用层面的跨语言方向一致性最强,平均余弦相似度达到0.92,十组语言两两配对里,全部十组的置信区间都排除了零,也就是说这种一致性在统计上非常稳固。句法层面则完全没有一个共同方向,平均余弦相似度是0.00,十组配对里四组显著为正,五组显著为负,呈现出明显的分裂状态。形态和语义层面则介于两者之间,分别是0.21和0.29的弱正相关。

这个分层结果其实也挺有解释力。**语用是最贴近具体交际场景和社会规范的层面,受到"现代议会应该怎么说话"这种跨文化共享的规范性压力影响最大,所以最容易趋同。而句法结构更深地嵌在每种语言自身的语法系统里,受制于各语言不同的类型学特点,所以最不容易趋同。**

质量控制:两百年的文本,坑在哪里

一项跨越223年的历史语料研究,免不了要面对一个绕不开的麻烦:越老的文献,扫描识别出错的概率越高。

研究团队对这个问题做了专门处理。对于1867年到1942年间通过OCR(光学字符识别)扫描获得的德国国会记录,他们使用字符置信度分数,把置信度低于阈值、或者低置信度字符占比超过15%的页面直接剔除,这一步删掉了大约8%最早期的页面。对于那些原本就是电子文本、不涉及扫描识别的资料,则用一种基于字符n-gram的乱码检测器筛查,删掉了大约0.5%的文本。

**这一步质控之所以重要,是因为历史文本的扫描错误在视觉上和真正的语言演变太像了。**一个被扫描错认的字母,看起来就像是一种"从未见过的拼写变体",如果不加过滤,模型很可能把这种识别噪音误当成真实的语言创新,得出"某个时代的语言突然出现了大量新形态"这种错误结论。这就像一个考古学家挖掘古代陶罐,如果不能分辨出哪些裂纹是烧制时留下的、哪些是运输途中磕碰产生的,他就可能把运输破损误判成某种古代工艺特征。区分"真实信号"和"测量噪音",永远是historical研究里绕不开的第一道关。

局限:这把尺子量的是什么,不是什么

研究者自己也很坦诚地列出了这套方法的局限。

**形态、句法、语义、语用这四个类别的划分本身就是一种分析简化。**这四个层面在真实语言里从来不是互相隔绝的,很多语言现象天然横跨多个层面。研究里采用的"硬性归类"策略,虽然避免了重复计算,但也意味着一些真正跨层面的特征,会被强行简化成单一维度,这可能掩盖了一部分更复杂的联系。

研究覆盖的也仅限于五种语言的议会话语,各语言的历史覆盖长度还不均等。**议会记录代表的是政治精英的制度化语言,不是整个社会普通民众的日常语言。**用议会记录得出的跨语言相似性,不能直接推广成"这些国家的人民语言正在变得更相似"这种更宏大的社会学论断。

冻结的多语言模型本身也不是完美的测量仪器,不同的分词方式、预训练数据构成、语言覆盖比例,都可能悄悄影响最终测出的轨迹。研究里提到,土耳其语的句法和语义指标在不同模型之间的波动最大,这可能就和土耳其语作为一种黏着语,其形态复杂性容易导致不同分词器给出差异较大的子词切分方式有关。

写在后面

读完这项研究,最触动我的其实是那张"量级相同、方向不同"的图。它提醒我一件很容易被忽略的事:我们习惯用一个数字去概括一件复杂的事情,比如"这个国家的GDP增长了5%""这个人今年瘦了3公斤",但这类总量指标天然会抹掉方向和路径上的差异。语言变化的量级也是同样的道理,两种语言"变化程度相近"这句话,几乎不携带任何关于"具体发生了什么"的信息,除非你继续追问方向。

另一个让我反复琢磨的细节是,德语和土耳其语在语系上毫无关系,变化方向却出奇一致,而英语和德语同属日耳曼语族,方向反而不那么接近。这个结果轻轻推翻了一个我以前没有认真质疑过的假设:语言演变主要是自身语法系统内部的自发漂移。这项研究的证据更倾向于支持另一种解读,议会语言的变化,或许更多地是被共享的政治现代化进程、共享的公共话语规范塑造的,语系血统反而没那么重要。

还有一个问题这项研究没有直接回答,但读完之后一直悬在我脑子里:如果换成日常对话、社交媒体这类更贴近普通人真实语言使用的语料,语用层面的跨语言一致性还会这么高吗?议会本身就是一种高度制度化、有既定礼仪规范的话语场,这种趋同会不会恰恰是"制度"造成的假象,而不是"语言"本身的趋势?这个问题,可能得等更大范围的后续研究来回答了。

Q&A

Q1:CHRONOLENS是什么?

A:CHRONOLENS是一个用来测量语言历史变化的分析框架,它把冻结的多语言语言模型、crosscoder特征对齐技术和事后语言学标注结合起来,能够在同一套坐标系里比较不同语言、不同历史时期、不同语言学层面(形态、句法、语义、语用)的变化幅度和方向,应用在了1803到2026年间五种语言(英语、德语、意大利语、波兰语、土耳其语)近17.2亿词的议会文本上。

Q2:crosscoder和普通稀疏自编码器有什么区别?

A:普通稀疏自编码器(SAE)在多语言场景下用的是共享字典加独立解码器,但研究发现它和直接用稠密向量效果差不多(语言学一致性都在0.28左右)。crosscoder的关键区别在于用一个共享编码器把不同语言/时期的输入联合投影到同一个稀疏特征空间,再用各条件专属的解码器分别重建,这样学出的特征和真实语言学指标的相关性能提升到0.72,效果明显更好。

Q3:这项研究最重要的发现是什么?

A:核心发现有两点。第一,同一种语言内部,形态、句法、语义、语用这四个层面往往以相近的幅度一起变化,不会出现某一层突飞猛进、另一层原地不动的情况。第二,变化幅度相近不代表变化方向相同,比如意大利语和土耳其语变化量级完全一样但方向截然不同,而德语和土耳其语量级差很大方向却高度一致,说明只看变化"有多大"是不够的,还必须看"往哪个方向变"。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-