LLM查询重写--解决近义词、用户输入不规范问题
在实际业务中,用户输入往往非常不规范,以大宗商品领域为例。例如,用户可能会说:
- “螺纹最近怎么样”
- “钢筋价格咋样”
- “rebar行情”
- “建筑钢材走势如何”
但系统真正希望理解的是一个标准化实体,例如:
螺纹钢(Rebar)
这类问题的本质,其实是将各种非标准表达统一到一个“标准概念”上,也就是常说的归一化(Normalization)。
一、问题本质:表达多样 vs 概念统一
人类表达是高度灵活的,同一个概念可以有多种说法:
- 行业术语:螺纹钢
- 口语表达:钢筋
- 英文表达:rebar
- 描述性表达:建筑用钢材
系统如果只依赖“字面匹配”,很容易漏掉大量信息。因此,这个问题本质上不是“查词”,而是:
在不同表达中识别同一个语义概念
二、常见做法及其局限
最直接的方法是建立一个映射表,例如把“钢筋”“rebar”都映射到“螺纹钢”。这种方式实现简单、性能极高,在很多系统中都是第一层基础能力。但问题也很明显,一旦表达方式稍微复杂一点,比如“建筑用的那种钢材”,这种方法就会失效,并且可能伴随长尾问题不能完全覆盖。
进一步的做法是引入知识图谱,把这些关系结构化存储。例如可以定义“钢筋”和“rebar”是“螺纹钢”的别名。这种方式比简单词典更清晰,也更易扩展,但本质上仍然是“已知词的映射”,无法处理没有被收录的表达。
还有一种思路是利用向量(embedding)做相似度匹配。比如“钢筋”和“螺纹钢”在语义空间中距离较近,可以被识别为相似。但这种方法容易引入误判,例如“铁矿石”和“螺纹钢”在某些语境下也可能相似,但它们并不是同一个概念。因此它更适合作为“候选召回”,而不是最终判断。
三、为什么需要“理解能力”
真正困难的情况往往不是“词”,而是“描述”。
例如:
“最近建筑用的那种钢材价格涨了吗”
这里没有出现“螺纹钢”或“钢筋”这样的标准词,但人可以很自然地理解其指向。这种能力依赖的不是匹配,而是语义推理。
这也是为什么需要引入大语言模型(LLM)。LLM可以基于上下文,将描述归纳为标准概念:
建筑用钢材 → 螺纹钢
这一步,本质上已经超出了传统NLP的“匹配”范畴,而进入“理解”。
四、NER在其中的作用
既然有知识图谱,为什么还需要实体识别(NER)?
关键在于:知识图谱只能回答“是什么”,但不会告诉你“句子里哪一部分是问题”。
例如一句话:
“我想看看螺纹最近的走势”
系统需要先知道“螺纹”是一个商品实体,而不是普通词。这一步就是NER的作用,它负责在文本中定位“需要处理的对象”。
可以理解为:
NER负责找目标,知识图谱负责给答案
五、一个更合理的整体方案
在实际系统中,通常不会只用一种方法,而是分层处理。
首先用词典或规则做快速匹配,这一步可以覆盖大量高频表达,成本极低。如果命中,就可以直接完成归一化。
对于没有命中的情况,再引入更强的理解能力,例如通过LLM判断用户描述对应的商品。与此同时,可以结合知识图谱进行约束,例如将候选结果限制在已有商品集合中,从而提高准确性。
整个过程可以理解为:先用规则兜底效率,再用模型补充理解能力。
六、方法对比(简要)
| 方法 | 解决问题 | 适用场景 |
|---|---|---|
| 词典/映射 | 已知表达匹配 | 高频、标准表达 |
| 知识图谱 | 结构化同义关系 | 可维护的知识体系 |
| Embedding | 相似表达召回 | 候选生成 |
| NER | 实体定位 | 句子理解前置 |
| LLM | 语义归纳 | 描述性、长尾表达 |
七、总结
在自然语言理解场景中,输入不规范几乎是常态。单纯依赖词典或知识图谱,很难覆盖所有表达;而完全依赖模型,又会带来成本和稳定性问题。
更合理的做法是将两类能力结合:
- 用规则和知识图谱解决“已知问题”
- 用LLM解决“未知表达”
最终目标不是让系统“匹配更多词”,而是让它能够在不同表达中稳定识别同一个概念。
本质上,这是从“字符串处理”走向“语义理解”的过程。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)