
2014年,如果你问一个ICU医生"这个病人接下来六个小时会发生什么",他会调出监护仪、翻看化验单、回忆病人的既往病史,然后给出一个基于经验的判断。这个判断背后,是医生大脑里几十年积累的模式识别能力,一种没办法被简单复制的直觉。
十年后的今天,有一群研究者试图让机器也具备这种直觉,而且不只是判断"接下来六个小时",是从病人出生开始,一直到死亡,整段生命轨迹都能被一个模型理解、记住、甚至预测。
这就是NOAH要做的事情。
这篇来自慕尼黑工业大学团队的论文,用了近560万份临床事件、43.1万次住院记录、29.9万个病人的数据,训练出一个能同时处理X光片、心电图、超声心动图、化验单、病历文本、用药记录的生成式AI模型。它不是又一个"预测某个特定疾病"的分类器,而是一个试图理解病人完整生命历程的基础模型。
这事儿难在哪?先说清楚问题
在NOAH出现之前,医疗AI领域面临一个挺尴尬的局面。
大部分模型只能处理一两种数据类型。有的专攻影像和文本的结合,有的专注影像和表格数据,有的只处理某一种波形信号。这就好比你请了好几个专科医生给同一个病人看病,心内科医生只看心电图,放射科医生只看片子,谁都不看对方的报告,最后拼凑出的诊断意见往往是割裂的。
更麻烦的是时间处理方式。绝大多数现有的Transformer模型(一种通过自注意力机制处理序列数据的神经网络架构,广泛用于语言和多模态任务)在处理临床事件序列时,要么用简单的位置编码把事件按顺序排列,要么用RoPE(旋转位置编码,一种把相对时间信息直接注入注意力计算的技术)来表示"多久之前发生的"。
问题是,这两种方式都没法区分"这个事件对预测明天的病情有多重要"和"这个事件对预测半年后的慢性病发作有多重要"。一次三个月前的血糖异常,对预测糖尿病并发症很关键,但对预测病人今天会不会突发心律失常几乎没用。传统的时间编码没法区分这种差异,它只知道"这是多久之前的事",不知道"这件事对多远的未来有意义"。
还有一个更深层的问题,叫做词表限制。
许多模型只能处理封闭词汇表里的诊断代码,比如固定的ICD编码序列。这意味着一旦出现新药名、新检查项目、或者医生用不常见方式描述的症状,模型就懵了。这就好比你训练了一个只认识五百个汉字的翻译系统,遇到生僻字直接卡壳。
最根本的问题是,这些模型大多是判别式的(discriminative,指模型直接学习输入到某个特定标签的映射关系,而不是学习数据的生成过程)。它们能告诉你"这个病人属于高风险类别",但没法告诉你"如果不这样治疗,病人接下来可能会怎样发展",也没法生成一个连贯、可信的未来轨迹。
临床世界本质上是随机的。同样病情的两个病人,可能走向完全不同的结局,这种不确定性不是噪声,是现实的一部分。一个真正有用的预测系统必须能表达这种不确定性,而不是给出一个虚假的确定答案。
NOAH想解决的,正是这三重困境:多模态融合、时间感知、以及生成式的不确定性建模。
给每个临床事件一个"通用护照"
NOAH的第一个关键设计,是把病人的每一条记录都当成一个独立的、带时间戳的"事件"来处理,不管这条记录是一次血压测量、一张X光片、一段医生笔记,还是一次手术操作。
每个事件被拆解成几个组成部分:高层级的类型类别(比如"用药"或"诊断")、可选的自由文本细节(比如具体药名)、以及一个通过外部预训练模型获得的数值嵌入(比如这张X光片的图像特征向量)。这些不同来源的信息,最终都被投影到同一个共享向量空间里,变成统一格式的token(模型处理的基本信息单元,可以理解为"一个信息片段")。
这个设计思路,其实是在解决一个很具体的痛点:如果事件类型必须来自封闭词表,模型永远学不会处理新出现的药物名字或者不常见的症状描述。而用自由文本和连续数值嵌入代替固定分类,模型就能"举一反三"地处理它训练时从未见过的具体内容,只要这些内容在语义上和已学过的东西相似。
这就像你教一个孩子认识"水果"这个概念,不是让他死记硬背一份"苹果、香蕉、橙子"的清单,而是教他理解"水果"背后的共同特征,颜色、形状、口感、生长方式。这样即使他第一次见到火龙果,也能大致判断这是水果而不是蔬菜。如果只靠死记硬背清单,遇到清单之外的东西就彻底抓瞎了。
值得一提的是,对于那些"持续一段时间"的事件,比如一次手术或者一段用药过程,NOAH会额外插入一个"结束token",标记在这个过程真正物理结束的时间点上,而不是提前插入。这个细节很讲究,它是为了避免"信息泄露",也就是不能让模型提前偷看到"这个手术会持续多久"这种未来信息。
双向时间注意力:让模型同时知道"过去多久"和"未来多久"
这是NOAH整篇论文里最有技术含量的部分之一,也是它区别于其他时间感知模型的核心创新。
论文提出了一个叫双向时间注意力(bidirectional temporal attention)的机制。
双向时间注意力:一种让Transformer的注意力计算同时考虑"距离上一个事件多久"和"距离下一个预测目标多久"这两种时间信息的机制,分别加到注意力计算中的键(key)和查询(query)上。
具体来说,每个token在作为查询(query,用来"询问"哪些历史信息值得关注)的时候,会带上"距离下一个事件的时间间隔"这个特征;而在作为键(key,用来"被查询",判断自己是否与当前查询相关)的时候,会带上"距离上一个事件的时间间隔"这个特征。
为什么要这么设计?论文里给出的理由很关键:两个相邻事件之间的时间间隔,对前一个事件来说是"向前看的间隔",对后一个事件来说是"向后看的间隔",这两种视角在功能上是不同的东西,不应该被对称地编码。
打个比方,假设你在规划一次长途旅行,你问朋友"从这里到下一个休息站还有多远",和你问"从上一个休息站到这里走了多远",虽然涉及的是同一段路程,但这两个问题在你脑子里唤起的决策是不一样的。前者关系到你接下来要不要加油,后者关系到你判断自己开车速度是否正常。如果把这两种信息混在一起用同一个数字表示,你可能会在该加油的时候没意识到,也可能在判断车速时搞错方向。
论文还处理了一个很实际的问题:临床数据里的时间间隔跨度极大,可能是几分钟,也可能是几年。为了让这种跨度巨大的数值稳定地参与计算,团队用了一个对数变换来压缩动态范围,然后用正弦余弦函数把这些标量映射到连续的高维空间。
从论文的消融实验结果看,这个设计确实起了作用。研究者对四种注意力组成部分做了拆解测试:内容对内容、内容对时间、时间对内容、时间对时间,结果发现移除"时间对内容"这一项(也就是查询带着"距离下一个事件多久"这个信息)对注意力分布的影响最大,仅次于移除内容本身的影响。这说明模型确实会根据"预测的时间跨度不同"而调整它关注历史的方式,这正是设计这个机制想要达到的效果。
变分隐空间:让不确定性成为模型的一部分,而不是bug
NOAH的第二个核心创新,是给整个Transformer架构加了一层变分隐空间(variational latent space,一种通过概率分布而非确定性数值来表示模型内部状态的技术,源自变分自编码器)。
这里要解决的问题是:一个复合的临床事件,包含类型、细节、时间、数值等多个组成部分,这些部分之间不是相互独立的。比如说,一种药物不可能对应一个心电图的数值嵌入,这在逻辑上是荒谬的。
变分自编码器(VAE):一种生成式模型,通过学习数据的概率分布来生成新样本,核心思想是把输入压缩成一个隐变量的概率分布,再从这个分布里采样重建输出。
变分循环神经网络(VRNN):把VAE的思想和循环神经网络结合,用于建模像语音、笔迹这样具有时序结构的数据,能在推理时通过随机采样生成非确定性的、结构丰富的序列。
如果给每个输出组成部分(类型、细节、数值等)独立地加随机性,会导致这些组成部分之间脱节,破坏"一个连贯的病人状态"这个整体语义。NOAH的解决方案是,把所有的随机性都收拢到一个共享的隐变量里,这个隐变量在每个时间步只采样一次,然后被所有解码头共同使用。
更巧妙的地方在于,这个隐变量的先验分布(prior,指在没看到当前实际发生什么之前,模型基于历史信息对下一步的预期)不是固定的标准正态分布,而是一个由病人历史上下文动态生成的、上下文相关的高斯分布。同时还有一个后验分布(posterior,指模型在看到实际发生的事件之后,结合历史和当前真实信息给出的判断),这个后验分布能访问到当前事件的真实内容。
训练目标是让先验和后验尽可能接近,用的是KL散度(Kullback-Leibler divergence,衡量两个概率分布之间差异程度的指标)作为约束。这个设计的巧妙之处在于,它其实是在逼迫模型学会"预期",也就是说,模型被鼓励去学一个足够准确的先验,让它已经能猜到大部分即将发生的事情,只有真正出乎意料的部分才需要额外的"惊讶"信息去弥补先验和后验之间的差距。
这就像一个经验丰富的老医生和一个刚入职的实习生一起查房。老医生看完病人的病历和体征后,心里已经有了八九不离十的判断,"这个病人接下来大概率会怎样"。而实习生每次都得从零开始重新分析,缺乏这种基于经验的预期能力。NOAH想训练出的正是那种"老医生式"的预期能力,让先验分布尽可能接近真实发生的情况,只在真正意外的时刻才需要额外信息来纠偏。如果不这样设计,模型每次预测都得从头猜,完全体现不出"经验积累"这件事的价值。
论文里还提到一个很实际的工程细节:为了防止模型学出一个"退化解",也就是后验的方差直接坍缩到零、变成一个确定性的复制粘贴机制,他们给先验的标准差加了一个下限(0.05到2之间),这样即使后验想要变得极度确定,KL散度里的惩罚项也会因为先验和后验标准差的比值而增大,从结构上阻止了这种"作弊"行为。
从惊讶程度,我们能读出临床世界的真实模样
这个变分设计有个特别有意思的副产品,就是模型的"惊讶程度"(论文里叫innovation或surprise,也就是先验和后验之间的KL散度大小)可以被拿出来单独分析。
结果非常符合临床直觉。研究者发现,这种"惊讶"在住院正式开始前就已经开始上升,在急诊科的生命体征记录时达到峰值,其次是用药和即时处置。这反映了急性事件和初次应对的真实不可预测性,尤其是在病人第一次就诊的情况下。随着更多背景信息的积累,病情趋于稳定,日常流程逐渐建立,惊讶程度也随之下降。
在转折性事件本身当中,急诊入院是相对可预测的(因为记录流程有固定套路),而院外因急性事件导致的死亡则几乎无法预测。这个模型的"惊讶"分布,和医学常识完全吻合:急救车呼叫方式(直升机 vs 步行),检伤分类的紧急程度(1级 vs 其他),手术是否为计划内还是紧急,甚至病人的既往就诊次数和年龄,都会显著影响模型的预测难度。内容最丰富的模态,比如心电图和X光片,天然就是最难预测的。
数据显示得更细,一个具体数字很能说明问题:急诊入院时的惊讶峰值达到了普通水平的2.2倍。而ECG(心电图)的中位KL散度是38,X光片是37,ECHO(超声心动图)是22.5,相比之下常规的生命体征测量只有0.0256,差了三个数量级。这说明模型确实在"该困惑的地方困惑",而不是随机地不确定。
预测未来:让机器学会"往前推演"
有了这套架构基础,NOAH最直观也最有用的能力,是自回归式地向前推演病人的未来轨迹。
自回归生成(autoregressive generation):一种生成方式,模型每次预测一个新的元素,然后把这个新预测的结果重新编码后加入输入,再预测下一个,如此循环,逐步构建出完整的序列。
论文对13,551个符合条件的测试病人,设定一个固定的锚点时间(比如最近一次住院后的24小时),然后让NOAH从这个时间点开始向前推演。这里有两种模式,一种是自由推演(free forecasting),模型自己决定接下来事件的类型、内容和发生时间;另一种是时间受控推演(time-controlled forecasting),研究者会告诉模型"下一个事件将在多久之后发生",只让模型预测事件的内容。
结果显示,NOAH在1到72小时的预测窗口里,事件类型和模态的AUROC(一种衡量分类模型区分能力的指标,取值0到1,越高越好)达到0.83到0.95之间,Brier分数(衡量概率预测准确度的指标,越低越好)在0.03到0.11之间,明显超过一个简单地重复历史窗口的持续性基线模型(persistence baseline)。
更有意思的是时间受控推演带来的提升。在较短的预测窗口内,提供准确的时间信息能让AUROC提升最多0.19个点。但这里有个反直觉的细节:虽然模态数量的预测误差在时间受控下降低了,事件类型数量的预测误差反而在长时间窗口下变得更大了。研究团队的解释是,强制指定的时间点会把其他不太准确的预测(比如具体的数值嵌入)推得离真实分布更远,这是一种误差传导的现象。
这个发现挺重要的,它说明"给模型更多约束"未必总是好事,有时候约束会放大其他方面的不确定性,这是理解生成式AI局限性时一个值得记住的教训。
蒙特卡洛模拟:不给一个答案,给一个概率分布
基于这套自回归推演机制,NOAH能做一件很酷的事情,零样本(zero-shot,指模型没有针对这个具体任务专门训练过,直接利用已有的通用能力完成任务)临床分类。
蒙特卡洛方法(Monte Carlo method):一种通过大量随机采样来估算某个事件发生概率的统计方法,这里指对同一个病人多次独立生成未来轨迹,再统计目标事件出现的频率来估计其概率。
具体做法是,给模型一个病人到当前时刻的完整病史,让它独立生成M次(25或50次)未来轨迹,然后统计这些轨迹里目标事件(比如出院、死亡)首次出现的时间分布,从而估计出病人属于某个结局类别的概率。
在延长住院时间超过72小时的预测任务上,NOAH达到了AUROC 0.74,平衡准确率0.68。在72小时死亡率预测上,表现更亮眼,AUROC达到0.97,平衡准确率0.82。而在30天再入院预测这个相对更难的长周期任务上,只有AUROC 0.61,平衡准确率0.57,表现明显更弱。
论文对这个差距给出了合理的解释,模型训练时只学习预测"下一个token",而不是学习多步的自回归预测,这导致长期推演过程中误差会逐渐累积,让生成的轨迹偏离真实分布。这个现象也侧面印证了这个任务本身的临床难度确实很高。
反事实模拟:如果换一种治疗方案会怎样
NOAH最让人眼前一亮的应用,可能是反事实干预模拟(counterfactual simulation)。
这部分工作选择了一个极具临床价值的场景来验证:脓毒症(sepsis,一种由感染引发的全身性炎症反应综合征,是重症监护中的常见危重症)患者早期补液时,选用0.9%生理盐水还是乳酸林格液,这两种液体的疗效差异一直是临床上的争议话题。
研究团队参考了真实的临床试验SMART,直接用NOAH做了一次"数字复现"。具体操作是,找到病史里符合条件的脓毒症患者,把他们实际接受液体治疗那个时间点的记录截断,然后分成两条路径,一条保持原样(事实臂),另一条把液体类型替换成另一种(反事实臂),接着让模型分别沿着这两条路径向前推演,用蒙特卡洛方法估算住院死亡率、住院时长、以及MAKE-30评分(一个综合评估肾功能不良结局的复合指标,包括死亡、新发需要肾脏替代治疗、或持续性肾功能不全)。
结果,模拟出的治疗效果显示,生理盐水比林格液在MAKE-30上多出8.92个百分点的风险,在死亡率上多出8.86个百分点,方向和真实临床试验SMART的脓毒症亚组结果完全一致,只是效应幅度大约是真实试验的两倍。
这就好比你有一台时光机,能把同一个病人的人生倒回到某个决策点,换一个选择,看看结果会如何不同。当然NOAH做的不是真正的时光机,它是一个基于统计规律的推演,不是严格意义上的因果推断。论文自己也坦诚地指出,模型确实存在系统性高估死亡率的问题,而且这种高估会随着预测时间窗口的延长而加剧,原因可能在于长期自回归推演本身就更容易偏离真实的"干净存活轨迹",一个真正健康存活下来的病人往往对应着长时间不发生重大临床事件的记录,而这种"平静"恰恰是自回归模型最不擅长生成的。
不过论文特别强调,这种整体性的高估偏差不影响组间对比,因为两个臂使用完全相同的随机数种子和隐变量噪声,所以组间差异的相对方向和大小是可信的,只是绝对数值有系统性偏移。
病人状态的"数字画像":能拿来做什么
除了预测未来,NOAH生成的病人状态嵌入本身也是一个极有价值的产物。这些是从Transformer最后一层输出、在进入隐空间模块之前提取的768维向量,代表着模型在观察完某个时间点之前所有事件后,对病人当前状态的理解。
研究团队用简单的线性探针(linear probing,指在冻结预训练模型参数的基础上,只训练一个简单的线性分类器来检验模型表征质量的方法)去检验这些嵌入到底蕴含了多少有用信息。
结果相当亮眼。在15个ICD疾病大类(国际疾病分类标准中的高层级分类,比如循环系统疾病、肿瘤等)和29种Quan-Elixhauser合并症(一套用于从诊断代码识别病人合并症的标准化编码体系,广泛用于医疗风险调整研究)上,检索AUROC分布在0.72到0.94之间。对于住院时长、ICU时长、院内死亡率这三个临床结局,AUROC分别达到0.87、0.98、超过0.99。
这说明什么?一个简单的线性模型,仅仅基于NOAH生成的表征向量,就能相当准确地反推出病人得了什么病、合并了哪些慢性病、最终会不会活着出院。这意味着下游系统不需要再重新处理复杂的原始多模态数据,直接拿这个紧凑的向量表示就能做很多事情,大大降低了实际部署的复杂度。
论文还专门训练了一个小型MLP(多层感知机,一种基础的前馈神经网络结构)去从这些病人状态里还原NEWS2评分(National Early Warning Score 2,英国国家医疗服务体系广泛使用的一套患者病情严重程度早期预警评分系统,范围0到20分,用来快速识别病情恶化的患者)。在39,952个来自4,414名测试病人的观察窗口上,平均绝对误差只有1.34分,在区分低风险与中高风险、以及区分低中风险与高风险这两个二分类任务上,AUROC分别达到0.94和0.91。
这个能力挺有想象空间的,因为一旦模型学会了"从病人状态向量读出NEWS2分数",这个训练好的读出器就能被直接套用到任何NOAH生成的状态上,包括反事实推演出来的虚拟状态,这也是为什么在前面提到的液体治疗模拟里,研究团队能直接追踪两条模拟轨迹上NEWS2分数随时间的变化曲线。
值得一提的是,研究者发现这些嵌入向量的表现会随时间推移而"遗忘",也就是说在住院早期,probe的表现通常最好,而到了住院中后期反而有所下降。研究者对此的解读是,这是因为在住院早期,主诉和初始治疗这类高信息量的信号最强,而到了中长期护理阶段,日常性的常规操作开始占主导。
这个现象其实提出了一个挺有意思的问题:模型的表征到底应该被设计成"记住一切",还是"聚焦于对未来最有预测力的部分"?论文明确指出,这种设计是有意为之的,NOAH的表征不是病史的摘要,它的目标是提取有预测价值的特征,而不是尽可能完整地保存历史信息。
这就像你去问一个经验丰富的侦探,"这个案子你还记得哪些细节",他不会把所有见过的信息事无巨细地复述一遍,而是会自动筛选出那些真正对破案有用的线索,忽略掉大量无关紧要的背景噪声。如果侦探试图记住所有细节而不做任何筛选,反而可能在真正需要做判断的时候被无关信息淹没,抓不住重点。
生存分析:越往后看,判断越准
论文还测试了NOAH的表征在时间到事件预测(time-to-event prediction,又叫生存分析,用来预测某个特定事件比如死亡发生的时间点)任务上的表现。
研究团队用DeepSurv(一种基于深度学习的Cox比例风险模型扩展,能利用高维特征预测生存风险)作为下游模型,在不同的住院阶段(进院时刻、20%、40%、60%、80%、以及出院前最后一刻)分别提取NOAH的状态向量,测试预测死亡时间的能力。
结果显示了一个符合直觉但依然有价值的规律:随着可用的住院内纵向信息越来越多,模型的判别能力(用时间依赖C指数衡量,一种考虑了时间因素的AUROC扩展版本)持续提升,从入院时的0.760一路涨到出院前的0.849,同时校准度(用D-calibration衡量,检验预测的生存概率分布是否符合真实观测结果的一种统计检验)也保持良好。这说明NOAH的表征确实随着信息积累而变得更有预测力,不是一个静态的、固定不变的编码。
模型的内部到底在关注什么
论文的最后一部分做了大量可解释性分析,试图打开这个黑箱模型内部看看它到底在"想"什么。
研究者检查了144个注意力头,发现其中141个都在专门处理有临床意义的关系模式。76个头专注于把某种类型的事件和过去同类型的事件联系起来,比如把一张X光片和之前的X光片关联,说明模型在为每种模态维持独立的纵向上下文。另外65个头则连接观察和记录行为,比如把病历笔记和心电图关联起来,或者把离开急诊科和生命体征关联起来,说明模型内化了真实的临床工作流程和记录逻辑。
论文还用积分梯度(Integrated Gradients,一种归因分析方法,通过计算输入特征对输出的梯度积分来量化每个输入对最终预测的贡献程度)分析了具体病例,比如一个急性躁狂症病人的病历,模型对哪些历史记录赋予了最高的重要性。结果发现模型确实依赖生理指标本身做判断,而不仅仅是依赖病历结构,比如患者测量数据对预测下一步的价值判断至关重要,而行政类信息虽然对预测事件类型很重要,但从不会压倒其他真实的临床信息。
模型局限:作者自己怎么说
这篇论文的讨论部分挺坦诚的,明确指出了NOAH存在的问题。
第一个是曝光偏差(exposure bias),这是所有自回归模型的通病:训练时用真实的历史数据做"教师强制"(teacher forcing,指训练时始终给模型输入真实的历史序列,而不是模型自己生成的预测结果),但在实际推演时,模型必须消费自己之前生成的、可能有误差的预测结果,这会导致误差随着推演步数增加而累积放大。
第二个是明确强调,NOAH的表征不应该被理解为病史摘要,它的目标始终是提取预测性特征,这一点前面已经详细讨论过。
第三个是承认NOAH不是一个基于生理机制的确定性病人模拟器,而是一个捕捉统计规律的概率模型,它依赖训练数据,估计的是可能的发展路径而非逻辑推演的必然结果。论文特别强调,反事实模拟不是其他领域里那种严格的因果建模,而是一种"以干预为条件的随机预测"。
这种自我批判的坦诚态度,其实在AI论文里并不常见,也是这篇工作让人觉得可信的一个重要原因。
Q&A
Q1:NOAH模型是什么?
A:NOAH是慕尼黑工业大学团队开发的一个多模态、时间感知的生成式AI模型,基于MIMIC数据集559万条临床事件训练而成,能理解病人从出生到死亡的完整生命历程,处理医学影像、心电图、化验单、病历文本等多种数据类型,并能预测未来临床事件、进行零样本分类和反事实治疗模拟。
Q2:NOAH模型的双向时间注意力机制解决了什么问题?
A:传统模型的时间编码没法区分"这件事对预测明天有多重要"和"对预测半年后有多重要"。NOAH让查询携带"距离下一事件多久"的信息,让键携带"距离上一事件多久"的信息,使模型能根据不同预测时间跨度调整对历史信息的关注方式。
Q3:NOAH在反事实治疗模拟中的表现如何?
A:在脓毒症患者补液选择的模拟中,NOAH估算出生理盐水比林格液的死亡率风险高8.86个百分点,方向与真实临床试验SMART的脓毒症亚组结果一致,但幅度约为真实试验的两倍,且存在整体性高估死亡率的偏差。
好文章,需要你的鼓励
本文介绍LT-OPD训练框架,通过让极限压缩的多模态大模型在自己生成的内容上接受满血版模型指导,并配合渐进式课程学习,在仅保留5%视觉token时把性能保留率从68.6%提升到82.3%,且不增加推理成本。
本文解读ALIGNOPSD方法,该方法针对AI智能体训练中"决策与时间戳错配"问题,通过先对齐功能相同的决策场景再打分,并按可变长度决策段分配信用,在ALFWorld、WebShop、Search-QA三大任务上相比GRPO提升5.5%至8.7%。
本文介绍自适应一致性图(ACG)方法,通过持久化执行记忆图与预算感知的上下文构建,帮助AI智能体在长任务中减少信息失联,在多项基准测试中相比ReAct等基线方法提升了任务成功率。
多智能体AI协作时重复计算KV缓存浪费严重。PReCache提出预计算低秩缓存和中性基础缓存重构两项设计,免训练实现最高3.1倍加速、2.3倍吞吐提升,且准确率仅比不共享方案低1.1个百分点。