语用学与AI
文档概述
本文档系统探讨语用学的核心理论体系及其与人工智能的深度关联。语用学研究语言使用中的意义,包括言语行为、合作原则、关联理论等核心理论,以及这些理论在大语言模型中的实现与应用挑战。
语用学入门:为什么”你吃了没”不是在问吃饭?
你有没有想过,中国人见面常说”吃了吗”,其实根本不是在问吃饭这件事?这句话的真实含义可能是”你好啊”,也可能是”我想跟你聊聊天”,甚至只是一种习惯性的打招呼。这就是语用学要研究的东西——语言在实际使用中的那些”言外之意”。
语用学(Pragmatics)和语义学不太一样。语义学关注的是”这句话字面上是什么意思”,而语用学关心的是”说这句话的人到底想干嘛”。举个例子,“外面下雨了”这句话,语义学告诉你这是一条天气信息,但语用学要问的是:说话人为什么要告诉你这个?他是在提醒你带伞?还是在找借口让你留下来?或者就是随口一说?
人类交流之所以复杂,就是因为我们都习惯了”话里有话”。同样一句话,在不同场合、不同人嘴里说出来,意思可能完全不一样。AI要真正理解人类语言,就必须学会这些”潜规则”。
言语行为理论:说话就是做事
Austin的惊人发现
1950年代,有个叫约翰·奥斯汀的英国哲学家提出了一个颠覆性的观点:说话本身就是一种行为。他写了本书叫《如何以言行事》,意思是说,当我们说话的时候,我们不只是在描述什么,而是在”做”一些事情。
举几个例子你就明白了。当你说”我宣布会议开始”的时候,你说完这句话,会议就真的开始了——这就是一种”言语行为”。当你爸说”我禁止你晚上出门”,说完这话你还真就不敢出门了——这也是言语行为。甚至你说”对不起,我迟到了”,这句话本身就是你在道歉,不需要再额外做什么。
奥斯汀把这种说话时同时完成的行为叫做”话语施事行为”(illocutionary act)。这个概念后来成为了语用学的基石。
言语行为的五种类型
后来另一个哲学家塞尔把言语行为分成了五大类,这个分类至今还在用:
断言类就是陈述事实或表达观点,比如”北京是中国的首都”、“我认为这部电影不错”。说话人在声明他们相信为真的事情。
指令类是让对方做点什么,比如”请关门”、“帮我拿个快递”、“我建议你休息一下”。这类话的特点是说话人想让听者去做某件事,可能是请求、命令、建议,或者只是提问。
承诺类比较有意思,是说话人承诺自己将来会做什么。“我明天一定来”、“我保证准时交作业”都属于这类。
表达类是用来表达心理状态的,比如感谢、道歉、祝贺、抱怨。你说”太感谢了”,这就是在表达感谢;你说”我真的很难过”,是在表达悲伤。注意这类言语行为不会改变世界状态,它只是表达说话人的内心感受。
宣告类最神奇,是说完了世界就真的变了。“我宣布你们正式成为夫妻”、“我任命你为总经理”、“我现在把会议室命名为’创新厅’“——说完这些,相应的变化就发生了。当然这类话通常需要特定的身份或场合才能生效。
说”能把盐递给我吗”不是在问能力
言语行为理论有个特别有意思的应用,就是解释”间接言语行为”。
我们日常说话很少直来直去。比如你想让室友把盐递过来,你会怎么说?“把盐给我!“这样命令式的话,说出来其实挺不礼貌的。大多数人会说:“能把盐递给我吗?“这句话从语法上看是个疑问句,字面意思是在问”你有没有能力把盐递给我”——但谁都知道你室友肯定能把盐递给你,他又不是残疾人。
所以这句话的真正意图是”请求”,而不是”提问”。通过用疑问句的方式,我们把一个命令变成了一个委婉的请求。这就是间接言语行为——用一种言语行为的形式来实现另一种言语行为。
为什么我们不直接说”把盐递给我”?因为间接的表达给对方面子,让对方有选择权,显得更礼貌。这就是语用学的魔力——它解释了人类语言为什么这样设计,而不是那样设计。
Grice的合作原则:为什么聊天要遵守”规矩”
什么是合作原则
哲学家保罗·格赖斯在1975年提出了一个有趣的理论:人们聊天的时候,其实都默认遵守着一个”合作协议”。
这个协议大致是说:在你们交谈的每个阶段,你的话都应该符合当前交谈目的的合理期待。说人话就是:咱们聊天的时候,你说的应该是真话、实话、有用的信息,而且要说清楚,别绕弯子。
格赖斯把这个合作原则拆成了四个具体的”准则”:
量的准则要求你说话的信息量刚刚好——既不要太少了让人摸不着头脑,也不要太多了让人烦。比如人家问你今天吃了什么,你说”吃了”,这信息太少;但如果你从早餐的面包讲起,一路讲到晚餐的牛排,这就太多了。
质的准则要求你说真话——不要明知是假的还说出来,也不要说那些你根本没证据的话。这条听起来理所当然对吧?但实际聊天中我们经常违反这条,比如为了面子吹个牛,或者为了安慰朋友说些不一定真实的话。
关系准则要求你说的话要跟话题相关。别人聊足球,你突然开始讲今天吃的火锅,虽然也是一句话,但这违反了关系准则,会让对话变得很奇怪。
方式准则要求你说得清楚明白——别故意含糊其辞、制造歧义、有话不直说。这条准则关注的是”怎么说”而不是”说什么”。
会话含意:违反准则产生的言外之意
有趣的是,人们聊天的时候经常故意违反这些准则。而听话的人会从这种”违规”中推断出说话人的言外之意。这就是格赖斯说的”会话含意”。
举个例子。你问室友借500块钱,他说”我最近手头有点紧”。这话违反了量的准则——你没问原因,他主动给了信息但没直接回答你的问题。那他到底是什么意思?他暗示自己可能没法借。这个”没法借”的意思就是会话含意——通过违反准则”推导”出来的言外之意。
再比如,你跟朋友说”张三今天穿了件红色外套”,然后话题就转到别的地方去了。这违反了关系准则,因为你突然提起张三的穿着,明显是话里有话——要么你想暗示什么,要么你在转移话题。
会话含意有几个特点挺有意思。它可以被”取消”——加上一些话就能让它消失。比如我说”他有几个孩子”(暗示他有不止一个),如果我接着说”其实他还没有孩子”,那前面的暗示就被取消了。另外会话含意不能从逻辑上推导出来,必须结合语境才能理解。
预设:否定句也抹不掉的东西
你有没有发现,有些话说出来就已经”自带前提”了?
比如你说”他又迟到了”,这句话已经预设了你迟到过至少一次这个事实。即使我反驳说”他没有迟到”,这个预设”他之前迟到过”依然存在——我只是在否定你的断言,但否定不了你的预设。
这就是预设的神奇之处:它是在话语中已经假定为真的背景信息,即使话语被否定、质疑或疑问,预设依然成立。
预设触发语
语言中有很多”预设触发语”,就是那些一出现就会带出预设的词或结构:
“又”、“再”、“还”这些副词触发”之前发生过”的预设。“他又来了”预设他之前来过。
“知道”、“忘记”、“遗憾”这类”叙实动词”触发后面内容的预设。“我知道他来了”预设他确实来了。
“停止”、“开始”、“继续”这些状态变化动词触发”之前是另一种状态”的预设。“他停止吸烟”预设他之前吸烟。
“那个”、“这个”这类定冠词结构预设所指对象存在。“那个穿红衣服的人”预设存在一个穿红衣服的人。
分裂句(是…的结构)也触发预设。“是他打破了窗户”预设有人打破了窗户。
理解预设对AI很重要。如果AI无法识别预设,就可能曲解用户的意思。比如用户说”你不要再犯同样的错误了”——AI需要理解这句话预设了”你之前犯过错误”这个事实。
指示语:语言如何”锚定”到世界
人称指示语
我们说话的时候,会用”我”、“你”、“他”这样的词来指代不同的人。但是”我”在A嘴里说的是A自己,在B嘴里说的却是B自己。同样一个词,每次说的时候指的人都不同。
这就是人称指示语——词语的意义依赖于说话时的角色。“我”指的是说话人,“你”指的是听话人,“他/她/它”指的是第三方。这种依赖语境的指代方式,是语用学研究的重要内容。
时间指示语
“今天”、“明天”、“刚才”、“以后”——这些词的意思也完全依赖于说话的时间。2024年1月1日的”今天”和2024年12月31日的”今天”根本不是一回事。
时间指示语把我们说的话锚定到具体的时间轴上。AI处理这类词语时,需要知道”现在是什么时候”,才能正确理解用户的时间表达。
空间指示语
“这里”、“那里”、“这边”、“那边”、“过来”、“过去”——这些词指向的是空间位置,但它们参照的是说话人当时的位置。你在A地说的”这里”,和你到了B地说的”这里”,完全指向两个不同的地方。
还有个有趣的现象是”视线指示”。你在说话的时候,如果盯着某个东西说”这个不错”,听话的人会顺着你的视线看你指的是什么。但AI没有眼睛,它怎么知道你指的是什么?这就是空间指示语给AI带来的挑战。
礼貌原则:为什么求人办事要”麻烦您”
面子理论
人类社交有个有意思的”潜规则”:每个人都要维护自己的”面子”。社会学家布朗和列文森把这个概念发展成了一套完整的礼貌理论。
他们认为面子有两种:积极面子是你想被喜欢、被认可的欲望(“我是个好人的形象”);消极面子是你不想被强加什么的欲望(“我有自己做决定的自由”)。
当我们求人办事的时候,其实是在威胁对方的消极面子——你要我做这个那个,某种程度上是在限制我的自由。所以我们要用各种礼貌策略来减轻这种威胁。
礼貌策略
最常见的礼貌策略包括:
用疑问句代替命令句。“把门关上”是命令,但”能把门关上吗”是请求,后者给对方留了拒绝的余地。
使用模糊限制语。“也许”、“可能”、“大概”这些词可以降低话语的确定性,让它听起来不那么强硬。“你做错了”和”你可能做错了一点”听起来差别很大。
道歉再提要求。“不好意思打扰你”+“但是能不能帮我…”,先承认自己给对方带来了不便,然后才提出请求。
给对方面子。“像你这么聪明的人一定能搞定”——通过恭维满足对方的积极面子,让他更愿意帮忙。
用第一人称复数。“我们一起想办法”比”你想办法”听起来更平等、更协作。
大语言模型的语用理解:GPT能理解讽刺和隐喻吗?
LLM语用能力的现状
现在的GPT、Claude这些大语言模型,在语用理解方面其实已经挺厉害了。
间接言语理解:用户说”外面很冷”,AI能理解这可能是在暗示关窗或开暖气。它能识别出这不是一个普通的事实陈述,而是一个隐含的请求。
隐含意图识别:用户说”我的打印机好像有问题”,AI不会傻傻地回复”是的,打印机有时会有问题”,而是会问”需要我帮你看看打印机设置吗”。
礼貌请求处理:用户用”能不能”、“麻烦你”这样的礼貌表达,AI会用同样礼貌的语气回应。
现在的局限
但AI在某些方面还是差强人意:
讽刺和反语检测仍然是难题。“这计划真棒”——AI有时候会按字面意思理解成正面评价,而忽略了说话人的真实意图可能是讽刺。讽刺需要结合语境、语气、说话人的背景等多种信息才能判断,这些对AI来说都不容易。
隐含请求的识别也常常不够准确。“我有点累了”这句话,有人可能真的只是在陈述事实,有人可能是在暗示想休息,或者想让你换个话题,或者想得到一些安慰。AI容易做出过于简单化的解读。
文化差异也是一个挑战。同样是委婉拒绝,中国人可能说”我再看看”、“这个可能不太方便”,但美国人可能就直说”No”了。AI可能无法准确识别不同文化背景下的语用差异。
增强LLM语用能力的方法
研究者们正在探索各种方法来提升AI的语用理解能力:
提示工程方法是在提问的时候多给AI一些指导。比如告诉它”注意这句话可能包含讽刺”,或者”分析说话人可能的真实意图”。这种方法简单有效,不需要重新训练模型。
微调方法是用大量标注了语用信息的数据来专门训练模型,让它学会识别言语行为类型、隐含意图、礼貌等级等。
外部知识增强是给AI接上知识图谱或者规则库,让它在做语用推理的时候能参考更多的背景知识。
对话系统的语用挑战:如何让AI理解言外之意
语境建模
人类对话之所以流畅,是因为我们都能记住之前说了什么、现在在聊什么、对方的身份和跟我们的关系。但这对AI来说是个大挑战。
对话系统需要维护一个”语境模型”——记住对话历史、用户信息、当前话题、双方关系等。这些信息会直接影响如何理解用户当前说的话。
比如用户在问价格,如果是熟人间聊天,可能只是随口问问;如果是客服对话,可能是真的想购买。AI需要根据语境做出不同的理解和回应。
意图识别的复杂性
用户说”我想查一下天气”——这个意图很明确。但如果用户说”今天出门要不要带伞”?这看起来是提问,但真实意图可能是想要一个具体的建议。
更复杂的情况是,一个问题里可能同时包含多个意图。“这本书不错,哪里能买到”——这既是评论,也是隐含的请求(想买),可能还带着一些疑问(在哪里买)。AI需要能够识别这种多意图的情况。
情感感知与回应
语用不仅涉及字面意思的理解,还涉及说话人的情感状态。当用户说”又出问题了”——从字面上看是在描述问题,但从情感上可能是在表达烦躁、沮丧或者失望。
好的对话系统应该能感知到这些情感,并以适当的方式回应。如果用户明显情绪不好,AI可能需要先表达理解和安慰,而不是直接进入问题解决模式。
语用学与多模态AI:视觉语境如何影响语言理解
视觉语境的介入
我们说话的时候,经常不是孤立地使用语言,而是结合着手势、表情、周围环境一起表达意思。
想象一下,你指着桌上的一个苹果说”这个不错”——没有视觉语境,这句话的意思是完全模糊的。有了视觉语境,我们知道你在评价苹果。但AI现在还很难做到这种程度的”看图说话”。
多模态AI正在努力解决这个问题。但即使AI能看到图像,它还需要学会像人类一样把视觉信息和语言信息整合起来理解。
语气和语调的作用
同样一句话,语气不同,意思可能完全相反。“真的吗”用升调是疑问,用降调可能是不以为然。人类能轻松分辨这些差异,但AI处理起来就困难得多。
这就是为什么现在很多对话AI还无法完全理解语音消息——它们缺乏语调信息,只能靠文字猜测语气。
讽刺和反语:NLP中的难题
为什么讽刺这么难检测
讽刺本质上是一种”言不由衷”——说的和想的意思正好相反。更麻烦的是,讽刺经常还带着夸张的成分。
“今天天气真好啊,又下雨又刮风还打雷”——这明显是讽刺。但”这个手机真不错”呢?如果是朋友刚买了新手机,这是真诚的评价;如果是刚被坑了买了个劣质货,可能就是讽刺。判断取决于说话时的具体情境。
讽刺检测的方法
研究者们尝试了各种方法来让AI学会检测讽刺:
基于特征的方法是找出讽刺句子的语言特征——比如夸张的表达、反义词的同时出现、特定的口头禅等。
基于语境的方法是把讽刺检测看成是一个需要上下文的任务——只看当前句子很难判断,但结合对话历史就容易多了。
深度学习方法是用大量的讽刺数据训练神经网络,让它自己学习讽刺的模式。这几年这种方法取得了很大进展,但仍然无法达到人类的水平。
多模态方法尝试结合文字、语气、表情等多种信息来检测讽刺。比如有人说”太好了”的时候同时翻白眼——这明显是讽刺。但这种多模态信息不容易获取。
动手实验:用Python分析对话中的语用现象
下面我们来看几个实际的代码示例,演示如何用Python来分析对话中的语用现象。
言语行为分类器
def classify_speech_act(utterance):
"""
简单版言语行为分类器
基于关键词匹配识别话语的言语行为类型
"""
speech_acts = {
'请求': ['请', '帮我', '能不能', '可以...吗', '麻烦'],
'陈述': ['是', '在', '有', '会', '已经', '我觉得'],
'疑问': ['吗', '呢', '怎么', '什么', '为什么', '多少'],
'感叹': ['啊', '呀', '真', '太', '好'],
'感谢': ['谢谢', '感谢', '多谢'],
'道歉': ['对不起', '抱歉', '不好意思']
}
for act_type, keywords in speech_acts.items():
for keyword in keywords:
if keyword in utterance:
return act_type
return '其他'
# 测试
print(classify_speech_act("能把窗户关上吗?")) # 请求
print(classify_speech_act("外面在下雨。")) # 陈述
print(classify_speech_act("你吃饭了吗?")) # 疑问讽刺检测基础版
import re
def detect_irony_simple(text):
"""
简单的讽刺检测(基于规则)
实际应用中需要更复杂的模型
"""
# 讽刺的简单模式
irony_patterns = [
r'.*太好了.*', # 夸张的积极表达
r'.*真棒.*',
r'.*简直.*', # 夸张副词
]
# 检测夸张的积极词汇
positive_words = ['好', '棒', '优秀', '出色', '完美']
for pattern in irony_patterns:
if re.match(pattern, text):
# 检查是否有反转信号(如"但是"、"实际上")
if '但是' in text or '其实' in text or '不过' in text:
return True, "可能的讽刺"
return False, "非讽刺"
# 测试
print(detect_irony_simple("这服务简直太完美了,等了两个小时"))
# (True, "可能的讽刺")预设触发语检测
def extract_presuppositions(text):
"""
检测预设触发语并提取预设
这是一个简化版本,实际应用需要更复杂的NLP处理
"""
triggers = {
'又': ('迭代', '之前发生过'),
'再': ('迭代', '之前发生过'),
'停止': ('状态变化', '之前处于另一种状态'),
'开始': ('状态变化', '现在进入新状态'),
'知道': ('事实', '所知道的事情为真'),
'忘记': ('事实', '应该记住的事'),
'遗憾': ('情感预设', '某事发生了'),
}
found_presuppositions = []
for trigger, (presup_type, presup_content) in triggers.items():
if trigger in text:
found_presuppositions.append({
'trigger': trigger,
'type': presup_type,
'presupposition': presup_content,
'example': text
})
return found_presuppositions
# 测试
result = extract_presuppositions("他又迟到了")
for item in result:
print(f"触发语: {item['trigger']}")
print(f"预设类型: {item['type']}")
print(f"预设内容: {item['presupposition']}")礼貌等级分析
def analyze_politeness(text):
"""
分析话语的礼貌等级
基于礼貌标记词的存在进行简单判断
"""
politeness_markers = {
'very_high': ['请您', '麻烦您', '万死不辞', '斗胆'],
'high': ['请', '能否', '可不可以', '能不能', '拜托'],
'medium': ['帮我', '麻烦', '不好意思'],
'low': ['把', '给我', '你给我'],
'very_low': ['快', '赶紧', '马上'] # 命令式
}
for level, markers in politeness_markers.items():
for marker in markers:
if marker in text:
return level
return 'neutral'
# 测试
print(analyze_politeness("麻烦您帮我看一下这个")) # high
print(analyze_politeness("把门关上")) # low
print(analyze_politeness("请坐")) # high实用资源推荐
语用学语料库
如果你对语用学研究感兴趣,以下语料库值得了解:
MRDA是会议对话行为标注数据集,包含大量真实的会议录音和言语行为标注。**SWBD(Switchboard)**是经典的电话对话语料,被广泛用于对话行为研究。SemEval每年都有讽刺检测等语用相关任务,是评估模型的标准数据集。
学习建议
语用学是个很”接地气”的学科,最好的学习方式是把理论和生活联系起来。
下次听别人说话的时候,试着分析一下:他说这话的真正意图是什么?他用的是什么礼貌策略?这句话预设了什么?这样训练一段时间,你会发现对人类语言的理解会深刻很多。
对于想用AI处理语用问题的朋友,建议从具体的子任务入手,比如先做意图识别,再逐步扩展到讽刺检测、隐含意图推断等更难的任务。
总结
语用学揭示了人类语言运作的深层逻辑——我们说话从来不只是字面上什么意思,更重要的是想达到什么目的、完成什么行为、建立什么关系。
对于AI来说,语用理解是一个既基础又困难的挑战。说它基础,是因为任何自然对话都涉及语用;说它困难,是因为语用规则灵活多变,依赖于丰富的语境知识和社会经验。
现在的AI在基础语用任务上已经做得不错,但离真正”像人一样”理解语言还有距离。未来的发展方向可能包括:更好的多模态理解、文化感知的语用推理、更精准的讽刺和隐喻检测,以及长期对话中的动态语用更新。
理解语用学,不仅是AI研究者的必修课,也是每个想深入理解人类语言的人的宝贵知识。它让我们看清语言表面之下的冰山——那些说话人习以为常、但从未明说的潜规则。
关联文档
实践示例
- 使用spaCy进行意图识别:参考spaCy文档
- 使用HuggingFace进行讽刺检测:transformers库
- 语用标注工具: brat, GATE, ELAN
- 语料库资源: LDC, ELRA