Natural Language Understanding (NLU)
自然语言理解 (NLU) 是 NLP 的一个分支,从文本中提取含义、意图和实体,应用于语音助手和搜索等场景。
自然语言理解(NLU)是自然语言处理(NLP)中负责理解文本含义的部分:作者想要什么、提到了哪些事物,以及当词语有多种解释时应该采用哪一种。NLU 系统会将“明天 7 点订一张两人桌”转换成结构化请求,其中包含类似 reserve_table 的意图,以及人数、时间和日期等槽位,供软件执行。虚拟助手、客户服务聊天机器人和搜索引擎都会先对每个请求执行 NLU,再决定采取什么行动或给出什么答复。
理解语言为何困难#
相同的词语在各个层面都可能有不同含义。“Bank”可以指银行,也可以指河岸;“我用望远镜看到了那个男人”没有说明是谁拿着望远镜;而在“奖杯放不进棕色手提箱,因为它太大了”中,“它”指奖杯,但把“太大”改成“太小”后,“它”就指手提箱。Hector Levesque 于 2011 年提出了这类 Winograd 模式,作为机器理解能力的测试,因为要解决这些问题,需要运用关于世界的知识,而不是词语统计。Terry Winograd 的 SHRDLU(1968-1970)等早期基于规则的系统,只能在规则完整描述的积木模拟世界中理解输入的命令。
NLU 核心任务#
- 意图分类: 将请求归入应用的一种目标,例如查询余额或冻结银行卡。
- 命名实体识别(NER): 找出请求中提到的人物、地点、产品、日期和金额,助手会用这些信息填充意图的槽位。
- 语义解析: 将句子映射为程序可以执行的形式化表示,例如数据库查询或 API 调用。
- 共指消解: 将代词和其他指称与它们所指的实体关联起来。
- 自然语言推理: 判断一个句子是否蕴含另一个句子、与之矛盾,或与之无关。
- 情感分析: 识别文本表达的观点。
助手通常使用经过微调的Transformer编码器对意图进行分类。句子编码器还可以通过单样本方式(每种意图仅使用一个示例)对意图分类:选择示例含义与请求最接近的意图:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
# One labeled example per intent, as an assistant's training data would provide
intents = {
"check_balance": "What is my account balance?",
"block_card": "Please freeze my debit card",
"transfer_money": "Send money to another account",
}
utterances = ["my card was stolen", "how much cash do I have left", "pay Alex back 20 dollars"]
# Assign each utterance the intent whose example is closest in meaning
scores = model.similarity(model.encode(utterances), model.encode(list(intents.values())))
for text, row in zip(utterances, scores):
best = int(row.argmax())
print(f"{text!r} -> {list(intents)[best]} ({row[best]:.2f})")三个请求都得到了正确的意图:block_card(0.42)、check_balance(0.49)和 transfer_money(0.28)。“我还剩多少钱”和“借给 Alex 的 20 美元还了”与各自的意图示例没有任何共同词语,因此匹配依据是嵌入,而非关键词。转账请求的得分为 0.28,高于其他意图的 0.17;Rasa 等框架会将最高分低于置信度阈值的请求交给后备流程,要求用户换一种说法。
基准测试与模型#
GLUE(2018)将九项句子和句对任务(包括情感分析、改述检测和自然语言推理)合并为一个分数;BERT于 2018 年将该分数提高到 80.5。其难度更高的后续基准 SuperGLUE(2019)加入了 Winograd 式共指任务;2021 年 1 月,Microsoft 的 DeBERTa 和 Google 的 T5 + Meena 得分都超过了 89.8 的人类基线。高分可能源自捷径学习:Suchin Gururangan 和同事于 2018 年证明,只读取每个推理句对中的第二个句子,分类器就能正确标注约 67% 的 SNLI 数据集,因为否定词等线索与“矛盾”标签相关。大型语言模型(LLM)现在可以根据提示执行大多数 NLU 任务;在延迟和每次请求成本很重要的场景中,小型编码器模型仍很常见。
搜索与视觉中的 NLU#
语义搜索将 NLU 应用于查询,根据查询的含义而非确切措辞进行匹配;向量搜索则能在数百万条目中快速完成这一操作。当文本和图像共享嵌入空间时,同样的思路也适用于跨模态场景,例如 CLIP。Ultralytics Platform Explore 页面的 Images 选项卡会接收“沙发上的猫”之类的场景描述,并根据图像内容从公共数据集中返回图像,而不依赖文件名或标签。
NLU 与相关术语#
- NLP: 使用计算机处理人类语言的整个领域。NLU 负责理解输入,自然语言生成(NLG)负责撰写输出。
- 语音识别: 将语音音频转换为文本,再由 NLU 理解转录内容。
- 光学字符识别(OCR): 从文本图像中提取字符,再由 NLU 理解其含义。
- 问答: 回答自然语言问题,这要求 NLU 理解问题和用于回答问题的文本。










