|
|
中文语义理解里,成语是最容易“滑倒”的地方。它们常被当作固定搭配、语义稳定,但现实是:很多成语在不同场景下会呈现截然不同的含义,甚至带情绪色彩的反转。比如“差强人意”,字面看像“不太令人满意”,但在多数语境里其实是“勉强还能让人满意”;“万人空巷”,有时并非“街上没人”,而是“万人都出门围观”。如果一个模型把成语当作单一标签去匹配,就会在细粒度情境里误判情绪、立场和强度。真正的难点在于:成语不仅多义,还往往附带文化“用法史”,需要从上下文和说话者的姿态中复原其当下的语义指向。
多轮对话把这个难度再翻一倍。第一轮里,用户可能用成语做铺垫,第二轮换个角度暗示反讽,第三轮又丢出一个话题跳转的照应,如果系统只做句内理解,很容易“接不上梗”。比如用户先说“这项目进度可谓按部就班”,接着又补一句“只是甲方每天都在催”,这时“按部就班”很可能是带贬义的“过于保守、缺乏弹性”。到下一轮用户说“领导希望我们壮士断腕”,上下文已经从“流程稳妥”转向“激烈取舍”,模型若不跟踪话语意图的迁移,就会给出流程优化的中庸建议,完全违背对话的情绪走势。
解决思路我更倾向“三层拼接”:词项层、语篇层、对话态层。词项层处理成语的词义分布:为每个成语建立多义向量而非单义标签,并记录常见搭配和反讽触发词(如“可谓”“倒也”“只不过”)。语篇层关心句际线索和信息结构:转折标记、对比关系、焦点位置,这决定成语在当前段落里的功能,是评价、叙述,还是铺垫。对话态层则跟踪说话者目标、立场与情绪的时间序列,比如从“求稳”到“求变”的相位切换,以及礼貌策略与讽刺的显隐切换。只有把三层拼在一起,模型才可能在第三轮还能“记得”第一轮成语的语义伏笔,并在新证据出现时修正先验。
一个常见误区是过度依赖知识库的“标准释义”。标准释义适合识别基础语义,却难以覆盖网络语境和地域化用法。拿“破防”为例,从“心理防线被击破”延伸到日常调侃,再到带有对抗意味的群体互嘲,其语气强度在不同社群里差别很大。多轮对话中,如果检测到同一参与者多次使用夸张副词(“直接”“完全”“一点不夸张”)叠加“破防”,我们应当上调情绪强度估计,反之若出现自嘲和表情包引用,则需要下调攻击性评估。
另一个容易被忽视的细节是指代消解与省略恢复。中文口语里主语经常省略,成语又常用作评语谓词,导致评价对象漂移。用户说“预算砍了三成,时间还要提前,真是捉襟见肘”,下一轮只说“要不就那样吧”,这里“那样”究竟指保守交付还是核心收缩?如果没有把前面“捉襟见肘”绑定到“资源不足”的态势,系统很可能推荐加班冲刺这类违背现实约束的方案。我的实践体会是:在多轮场景里,必须显式维护“约束集”和“目标集”,并让成语触发对约束强度的更新,而不是只当作情绪标签。
最后谈评测。单轮分类的F1再高,也无法说明多轮理解的鲁棒性。更有价值的评测方式是构造“语义岔路”:同一成语在第二轮前后给出相反线索,看模型是否能纠错;或者在第四轮注入指代歧义,考察其对核心约束的保持度。与此同时,应当记录模型的自我修正轨迹:何时基于新线索下调自信、何时上调。这类可解释的中间状态,比一个静态分数更能反映中文语义理解的真实水位。
综上,成语的歧义与多轮上下文不是两道独立的题,而是同一个难题的两面:语义在运动中被确定。只有把词义分布、语篇关系与对话态交织建模,系统才有可能在真实对话里既听懂话,也听懂话外之音。 |
|