在实际业务中,用户输入往往非常不规范,以大宗商品领域为例。例如,用户可能会说:

  • “螺纹最近怎么样”
  • “钢筋价格咋样”
  • “rebar行情”
  • “建筑钢材走势如何”

但系统真正希望理解的是一个标准化实体,例如:

螺纹钢(Rebar)

这类问题的本质,其实是将各种非标准表达统一到一个“标准概念”上,也就是常说的归一化(Normalization)。


一、问题本质:表达多样 vs 概念统一

人类表达是高度灵活的,同一个概念可以有多种说法:

  • 行业术语:螺纹钢
  • 口语表达:钢筋
  • 英文表达:rebar
  • 描述性表达:建筑用钢材

系统如果只依赖“字面匹配”,很容易漏掉大量信息。因此,这个问题本质上不是“查词”,而是:

在不同表达中识别同一个语义概念


二、常见做法及其局限

最直接的方法是建立一个映射表,例如把“钢筋”“rebar”都映射到“螺纹钢”。这种方式实现简单、性能极高,在很多系统中都是第一层基础能力。但问题也很明显,一旦表达方式稍微复杂一点,比如“建筑用的那种钢材”,这种方法就会失效,并且可能伴随长尾问题不能完全覆盖。

进一步的做法是引入知识图谱,把这些关系结构化存储。例如可以定义“钢筋”和“rebar”是“螺纹钢”的别名。这种方式比简单词典更清晰,也更易扩展,但本质上仍然是“已知词的映射”,无法处理没有被收录的表达。

还有一种思路是利用向量(embedding)做相似度匹配。比如“钢筋”和“螺纹钢”在语义空间中距离较近,可以被识别为相似。但这种方法容易引入误判,例如“铁矿石”和“螺纹钢”在某些语境下也可能相似,但它们并不是同一个概念。因此它更适合作为“候选召回”,而不是最终判断。


三、为什么需要“理解能力”

真正困难的情况往往不是“词”,而是“描述”。

例如:

“最近建筑用的那种钢材价格涨了吗”

这里没有出现“螺纹钢”或“钢筋”这样的标准词,但人可以很自然地理解其指向。这种能力依赖的不是匹配,而是语义推理。

这也是为什么需要引入大语言模型(LLM)。LLM可以基于上下文,将描述归纳为标准概念:

建筑用钢材 → 螺纹钢

这一步,本质上已经超出了传统NLP的“匹配”范畴,而进入“理解”。


四、NER在其中的作用

既然有知识图谱,为什么还需要实体识别(NER)?

关键在于:知识图谱只能回答“是什么”,但不会告诉你“句子里哪一部分是问题”。

例如一句话:

“我想看看螺纹最近的走势”

系统需要先知道“螺纹”是一个商品实体,而不是普通词。这一步就是NER的作用,它负责在文本中定位“需要处理的对象”。

可以理解为:

NER负责找目标,知识图谱负责给答案


五、一个更合理的整体方案

在实际系统中,通常不会只用一种方法,而是分层处理。

首先用词典或规则做快速匹配,这一步可以覆盖大量高频表达,成本极低。如果命中,就可以直接完成归一化。

对于没有命中的情况,再引入更强的理解能力,例如通过LLM判断用户描述对应的商品。与此同时,可以结合知识图谱进行约束,例如将候选结果限制在已有商品集合中,从而提高准确性。

整个过程可以理解为:先用规则兜底效率,再用模型补充理解能力。


六、方法对比(简要)

方法 解决问题 适用场景
词典/映射 已知表达匹配 高频、标准表达
知识图谱 结构化同义关系 可维护的知识体系
Embedding 相似表达召回 候选生成
NER 实体定位 句子理解前置
LLM 语义归纳 描述性、长尾表达

七、总结

在自然语言理解场景中,输入不规范几乎是常态。单纯依赖词典或知识图谱,很难覆盖所有表达;而完全依赖模型,又会带来成本和稳定性问题。

更合理的做法是将两类能力结合:

  • 用规则和知识图谱解决“已知问题”
  • 用LLM解决“未知表达”

最终目标不是让系统“匹配更多词”,而是让它能够在不同表达中稳定识别同一个概念。

本质上,这是从“字符串处理”走向“语义理解”的过程。
在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐