在自然语言处理(NLP-Natural Language Processing)领域中,语义解析是将文本转换为机器可理解的结构化数据的过程,所谓机器可理解指的是机器拿到这个数据结果后知道去干什么,也就是说文本经过语义理解环节后变成了一条条机器可以执行的指令。
基于规则的语义解析方法是最早期的实现方式之一,也是目前(2024年)特定领域语义识别最有效手段之一。特定领域语义识别只服务于某一些场景,和通用语义识别不同(比如目前的大语言模型gpt就是一种通用语义理解方案,你不管如何对话,它总能理解对答,虽然可能犯错),它面对的是有限的对话的场景,超出这些场景它就不响应(拒识),它一般针对固定的模式和语法结构实现语义解析和理解。
基于规则的语义解析依赖于一系列预定义的规则、模式、模板,将自然语言转换为特定的结构化数据。相比于依赖大量数据的机器学习方法,基于规则的方法不需要大规模的训练数据,相反,它使用“模板”或“正则表达式”等规则来识别和提取句子中的意图,它特别适合语法和语言结构相对简单的应用场景,例如简单的车空场景只有打开空调,打开天窗,把温度调到25℃等简单指令。
本文就来简单介绍下基于规则的语义解析的整体流程。
关键步骤解释
一 、分词
分词,是指将连续的自然语言文本切分成一系列有意义的词汇单元的过程
二、去停用词
去掉对语义分析没有帮助的词,如“的”、“了”等。
三、词性标注
为每个词添加词性信息,如动词、名词等,以便后续进行语法规则匹配
四、句法分析
句法分析(SyntacticParsing或者 Parsing)是识别句子包含的句法成分要素(主谓宾定状补)以及成 分之间的内在关系,一般以句法树来表示句法分析的结果。
五、语义角色标注
语义角色标注是对句中各成分进行角色划分,角色是每个语义识别系统自定义的,但一般都会有一些通用的角色,常见的语义角色有:施事(Agent)、受事(Patient)、工具(Instrument)、时间(Time)等。在基于规则的系统中,语义角色标注依赖于预定义的规则,根据句式结构确定每个词或短语的角色。例如:我要订明天北京的机票
- 施事(Agent):“我”,表示动作的发出者
- 动作(Action):“订”,表示订票行为
- 时间(Time):“明天”,表示订票的时间
- 地点(Location):“北京”,表示预订的目的地
- 目标(Theme/Goal):“机票”,即用户要订购的物品
通过语义角色标注,系统能够对句子有更深层次的理解,从而为后续的意图识别和动作执行做准备。
六、意图匹配和词槽填充
基于角色标注的结果,系统可以去意图库匹配到用户的意图。对于“我要订明天北京的机票”这样的句子,有一个意图库是类似这样的:
{
"意图": "订票",
"触发条件": {
"动词": ["订", "预订", "买"],
"目标": ["机票", "票", "航班"]
},
"槽位结构": {
"施事": "必需", // 表示请求者,例如"我"
"动作": "必需", // 通常为"订"或类似动词
"目标": "必需", // 预订的物品,这里为"机票"
"时间": "可选", // 预订的时间,如"明天"
"地点": "可选" // 目的地或出发地,如"北京"
}
}
通过简单的模板匹配便可以得到意图,然后再逐个进行槽位填充,最后形成指令json下发
{
"意图": "订票",
"槽位": {
"施事": "我",
"动作": "订",
"时间": "明天",
"地点": "北京",
"目标": "机票"
}
}
接收端就可以根据意图分发到不同业务,并且可以根据槽位的补充信息完成下一步指令。
小结
基于规则的语义解析系统的优势在于简单性和可解释性。通过精确的规则和条件,可以保证解析过程透明且可控,适用于一些结构相对固定、语义明确的特定领域任务,然而这种方法也有不少局限性,主要包括:
- 难以扩展:定义规则和模板需要大量手工工作,随着需求的复杂性增加,规则库维护成本变高。
- 对不确定性处理较差:规则往往只适合简单、规范化的输入,对于句法复杂、表达多样的句子,规则可能失效。
- 泛化性差:规则系统通常难以应对用户在不同场景和领域中的多样化表达。
为解决上述不足,语义解析领域正在向规则和深度学习,大模型相结合的方向发展,需要针对使用场景在精确度、通用性、成本和可控性之间找到平衡。