人类阅读与大语言模型如何应对概念中断和指称中断?

发布时间:2026/10/10 3:09:13
人类阅读与大语言模型如何应对概念中断和指称中断? 这次我们来看一个研究性项目Distinct dynamics of conceptual and referential disruptions in human reading and large language model processing翻译过来是“人类阅读与大语言模型处理中概念与指称中断的不同动态”。它不是一个可以一键部署的模型或工具而是认知科学与大语言模型交叉的一个研究主题。核心问题很直接当文本里出现“概念层面”的异常和“指称层面”的异常时人类读者和 LLM 各自的处理动态是否不同、哪里不同、为什么不同。概念中断指的是语义搭配被破坏比如“喝三明治”指称中断指的是代词或名词无法正确回指比如“小明丢了钥匙它喝了水”中“它”没有明确指代。这两种中断在人类阅读理解里属于不同的加工阶段在 LLM 里则可能表现为不同深度层的表征偏差。这篇文章不讨论部署和接口而是带你拆解研究思路、理解背景知识并跑一个简化版的可复现代码用来量化 LLM 对这两类中断的敏感性。适合对 NLP、认知科学、心理语言学交叉方向感兴趣的算法工程师和研究者也适合想做文本连贯性自动评估的工程师。1. 研究核心速览能力项说明研究对象人类阅读行为 vs 大语言模型文本处理核心概念概念中断conceptual disruption、指称中断referential disruption研究目标比较两种中断在不同处理系统中的动态差异经典实验范式ERP 脑电、眼动追踪、阅读时间、surprisal、注意力分析常用人类指标N400 波幅、P600 波幅、首次注视时间、总阅读时间常用模型指标困惑度、surprisal、注意力权重、层间表征距离环境依赖Python Transformers PyTorch statsmodels硬件要求普通 CPU 可跑小模型大模型建议 GPU是否属于部署工具否属于科研方向和实验复现是否支持批量处理可以批量读取句子语料并计算指标适合读者NLP 工程师、认知科学研究者、文本连贯性评估开发者从这张表可以看出这个主题的价值不在“能不能跑”而在“怎么设计实验、怎么解释指标、怎么把人类行为数据与模型内部信号放在同一个分析框架里”。2. 适用场景与使用边界2.1 适合什么场景这个研究方向适合三类人。第一类是做认知科学或心理语言学的研究者。他们会采集人类被试的脑电或眼动数据再把这些数据与 LLM 的 surprisal、激活值做相关分析。第二类是 NLP 算法工程师尤其是做文本生成质量评估、机器翻译评估、对话系统一致性检测的人。理解了概念中断和指称中断在 LLM 中的表现就能设计更细粒度的自动评估指标。第三类是对 LLM 可解释性感兴趣的人。通过对比人类与模型在两类异常上的反应可以观察模型是在哪一层、哪个注意力头开始“感知”到异常。2.2 不适合什么场景不要把这个方向当成“拿来即用的产品功能”。它不会给你一个开箱即用的评测 API也没有一键启动的 WebUI。它的产出是实验方法、分析流程和实验结论而不是一个可以直接封装上线的小工具。如果你只想快速判断一段文本是否连贯用现成的困惑度或语法检查器会更直接。2.3 使用边界与合规提醒做这类实验时文本语料可能涉及版权和隐私。建议使用公开的无版权语料或自己构造的实验材料不要直接抓取受版权保护的新闻、小说或用户私人对话。如果后续要采集人类被试数据还需要遵循所在机构的伦理审查要求确保被试知情同意。涉及敏感文本或不适合公开的语料时要在实验前做过滤和脱敏处理。3. 前置知识与环境准备3.1 背景知识人类的阅读加工阶段人类阅读理解不是一个单次过程而是分多个加工阶段。概念中断通常发生在语义整合阶段。比如看到“喝三明治”时大脑在词汇语义与动词搭配关系上发生冲突这种冲突会反映在事件相关电位 N400 上。N400 通常出现在刺激呈现后 300 到 500 毫秒波幅越大说明语义整合越困难。概念中断越明显N400 波幅通常越大。指称中断发生在更晚的语篇整合阶段。比如读到“它喝了水”时需要回头找到“它”指代的是什么。如果前面的语境中根本没有合适的先行词大脑就会进行一次重新分析这种再分析过程通常反映在 P600 成分上时间窗口更靠后。所以对人类读者来说概念中断和指称中断是两种时间动态不同的中断。3.2 背景知识LLM 的内部“动态”LLM 用的是 Transformer 结构输入的所有 token 在每一层同时做注意力计算。严格来说LLM 没有人类那种逐词推进的时间动态但模型内部存在“层间深度动态”低层更关注局部词法和短语信息高层更关注全局语义与篇章信息。概念中断一般可以在比较早的层被捕获因为它更多是局部语义搭配问题。指称中断需要整合更长的上下文可能要在更深的层或者特定的注意力头上才表现出明显差异。也就是说标题里的“distinct dynamics”很大程度上对应的就是人类的时间动态N400 vs P600和模型的深度动态早期层 vs 晚期层。3.3 Python 环境准备如果你想自己跑一个简化版的分析实验推荐这样准备环境。依赖项推荐版本范围说明Python3.9 及以上兼容常见深度学习库PyTorch2.0 及以上LLM 推理Transformers4.30 及以上加载模型和分词器NumPy1.24 及以上数据处理Matplotlib3.7 及以上可视化statsmodels0.14 及以上回归分析安装命令示例pip install torch transformers numpy matplotlib statsmodels如果你的机器有 NVIDIA GPU并且想跑更大的模型可以确保 CUDA 驱动和 PyTorch 版本匹配。没有 GPU 也能运行只需要把模型换成distilgpt2、google-bert/bert-base-uncased这类小模型。从实验复现的角度看小模型已经足够演示指标计算流程。4. 实验设计思路如何构造概念中断和指称中断4.1 语料构造原则要比较两类中断实验语料必须严格控制变量。最基本的方法是构造三组句子正常条件语义连贯、指称清晰。概念中断条件局部语义搭配错误。指称中断条件局部语义正确但指代无法回指。例如正常小明放下钥匙后他拿起了杯子。 概念中断小明喝了一口三明治然后开始看书。 指称中断小明放下钥匙之后它拿起了杯子。在这个例子里概念中断表现在“喝三明治”这个动宾搭配错误上指称中断表现在代词“它”没有合理先行词。两组异常尽量只在关键位置上不同名词词频、句子长度、句法结构要保持接近。4.2 为什么需要匹配词频和句法结构N400 波幅对词频很敏感。如果概念中断条件的动词或名词用更罕见的词那么观察到的差异可能来自词频而不是语义异常。同样P600 对句法结构也很敏感。如果指称中断条件的句子结构更复杂结果也不干净。所以实验设计时的第一原则就是控制混淆变量只允许异常类型变化。4.3 需要多少句子一般实验材料数量取决于统计功效。如果你只是做演示可以用 30 到 50 组句子。如果要做正式研究建议先做小样本预实验估计效应量再用功效分析确定最终样本量。无论哪种情况都要避免把同一个句子反复用于多个条件以免产生学习效应。5. 功能测试用 LLM 量化两类中断的 surprisal5.1 测试目标我们不采集被试先让 LLM 计算每个 token 的 surprisal。Surprisal 是一个信息论指标定义为-log(probability)。概率越低surprisal 越高说明这个 token 在当前上下文中的可预测性越差。如果 LLM 能够区分正常句和中断句那么中断位置的 surprisal 应该明显更高。预期概念中断和指称中断都会表现为 surprisal 上升但上升幅度和位置可能不同。5.2 用 Transformers 计算 surprisal下面是简化版代码使用 GPT-2 风格的因果语言模型。import torch from transformers import AutoTokenizer, AutoModelForCausalLM model_name distilgpt2 tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained(model_name) model.eval() sentences [ Xiaoming put down the key, then he picked up the cup., Xiaoming drank a sandwich, then he started reading., Xiaoming put down the key, then it picked up the cup. ] def compute_token_surprisal(sentence): inputs tokenizer(sentence, return_tensorspt) with torch.no_grad(): outputs model(**inputs, labelsinputs[input_ids]) logits outputs.logits shift_logits logits[:, :-1, :].contiguous() shift_labels inputs[input_ids][:, 1:].contiguous() log_probs torch.log_softmax(shift_logits, dim-1) token_log_probs torch.gather(log_probs, 2, shift_labels.unsqueeze(-1)).squeeze(-1) return token_log_probs[0].tolist(), tokenizer.convert_ids_to_tokens(shift_labels[0]) for sent in sentences: log_probs, tokens compute_token_surprisal(sent) surprisals [-lp for lp in log_probs] print(句子:, sent) for tok, sp in zip(tokens, surprisals): print(f {tok}: surprisal{sp:.3f}) print()这段代码有几个地方需要注意。labelsinputs[input_ids]不是网络必需的但用它可以让 Transformers 顺便返回交叉熵损失。不过我们手动算 token 级 surprisal 时不用这个损失实际它只用于验证。torch.log_softmax在shift_logits的最后一个维度上做得到每个位置下一个 token 的概率分布再与真实 token 对齐。最后用-log_prob得到 surprisal。第一次运行会从 Hugging Face Hub 下载模型。如果网络受限可以设置local_files_onlyTrue或者提前下载模型到本地目录。5.3 预期的模型行为对于概念中断句“drank a sandwich”模型通常会在这几个 token 上给出较高 surprisal因为“a sandwich”作为“drank”的宾语搭配概率很低。对于指称中断句“then it picked up the cup”代词“it”本身是合法词局部语言模型不一定能识别出指称问题因为仅看局部上下文“it”出现的概率可能并不低。这正是两类中断在模型指标上可能表现出差异的地方概念异常会在局部位置直接拉高 surprisal指称异常需要更长的上下文和更深层的语义整合所以简单计算局部 surprisal 可能不够还要看注意力层间表征。5.4 计算层间表征差异如果你想观察模型在哪一层开始区分两类中断可以提取隐状态做层间对比。from transformers import AutoModelForCausalLM model AutoModelForCausalLM.from_pretrained(model_name, output_hidden_statesTrue) def get_layer_hidden(sentence, layer-1): inputs tokenizer(sentence, return_tensorspt) with torch.no_grad(): outputs model(**inputs) return outputs.hidden_states[layer] normal get_layer_hidden(sentences[0]) conceptual get_layer_hidden(sentences[1]) referential get_layer_hidden(sentences[2]) # 比较最后一个 token 的顶层表征距离 import torch.nn.functional as F def cosine_diff(a, b, token_index-1): vec_a a[0, token_index, :] vec_b b[0, token_index, :] return 1 - F.cosine_similarity(vec_a.unsqueeze(0), vec_b.unsqueeze(0)) print(概念中断与正常句的表征距离:, cosine_diff(normal, conceptual).item()) print(指称中断与正常句的表征距离:, cosine_diff(normal, referential).item())这里的核心假设是概念中断可能在模型的早期层就产生较大表征差异指称中断则随着层数增加逐渐变大。你可以写一个循环输出每一层的距离最后画一条曲线来观察“深度动态”。6. 数据分析人类行为数据与 LLM 指标的对比6.1 从 surprisal 到阅读时间/脑电人类阅读中经常使用阅读时间作为行为指标。如果某个词的阅读时间更长说明处理更困难。理论上LLM 的 surprisal 与阅读时间存在正相关。类似地N400 波幅也与语义可预测性有关。你可以收集一组人类被试的阅读时间或脑电数据然后做回归模型因变量是逐词的阅读时间或 N400 波幅自变量包括 surprisal、词频、词长、句子位置、是否为中断位置等。这样可以检验 LLM 指标能不能解释人类数据。6.2 线性混合模型示例由于同一个句子可能包含多个 token数据不是完全独立的。推荐使用线性混合模型把句子和被试作为随机效应。用 R 语言公式常见写法是lmer(reading_time ~ surprisal word_frequency word_length condition (1 | subject) (1 | sentence), data reading_data)如果你想用 Python可以参考statsmodels的混合线性模型功能import statsmodels.api as sm from statsmodels.formula.api import mixedlm model mixedlm( reading_time ~ surprisal word_frequency word_length condition, datareading_data, groupsreading_data[subject] ) result model.fit() print(result.summary())需要注意statsmodels的混合模型功能没有 R 那么丰富复杂随机结构可能要用 R 或lme4包完成。在正式分析前先检查变量分布必要时对阅读时间做对数变换对 surprisal 做标准化。6.3 如何比较“动态”如果要比较两种中断的“动态差异”可以从两个层面看。人类层面通常用时间窗口区分N400 窗口内概念中断的效应更强P600 窗口内指称中断的效应更强。模型层面则要按层数做曲线。横轴是 Transformer 层数纵轴是表征距离或 surprisal 效应量。如果概念中断的效应在中间层就达到峰值而指称中断的效应在更深的层才达到峰值那就说明模型在深度维度上也表现出了“不同动态”。这种跨系统比较有解释力但也容易过度解读。LLM 的层不是时间步不能简单把第 6 层映射到人类的 400 毫秒。更稳妥的说法是两类中断在模型内部的表征变化轨迹不同这种不同在某种形式上与人类的加工阶段分离具有相似性。7. 资源占用与性能观察7.1 模型推理资源distilgpt2这种参数量的模型在纯 CPU 上也能完成推理。一个 20 个 token 的句子推理时间基本是毫秒级。如果你换成 7B 甚至 70B 模型资源占用会明显上升。7B 模型在 float16 精度下显存占用通常会超过 14GB具体取决于批次大小和序列长度。70B 模型则需要多卡或量化。建议第一次跑通流程用小的因果模型确认指标计算无误后再换更大模型。7.2 如何观察显存和耗时在 PyTorch 里可以用torch.cuda.memory_allocated()查看当前显存占用用time模块统计推理耗时。批量处理时把句子打包成一个 batch 可以提升吞吐但显存占用也会增加。如果出现 OOM可以减小批次大小、缩短输入序列、开启半精度model model.half()或者使用量化版模型。7.3 批量任务建议如果你有几百个实验句子可以把这些句子写入 CSV 文件然后循环计算每个句子的 surprisal把结果保存回 CSV。这种批量运行逻辑可以直接复用。import pandas as pd from tqdm import tqdm df pd.read_csv(experiment_sentences.csv) results [] for idx, row in tqdm(df.iterrows(), totallen(df)): sentence row[sentence] condition row[condition] token_log_probs, tokens compute_token_surprisal(sentence) surprisals [-lp for lp in token_log_probs] for tok, sp in zip(tokens, surprisals): results.append({ sentence_id: idx, condition: condition, token: tok, surprisal: sp }) result_df pd.DataFrame(results) result_df.to_csv(surprisal_results.csv, indexFalse)注意跑数据前先做小规模验证确认代码输出与预期一致再跑全量。批量任务一旦跑起来建议加日志和断点继续机制避免中途崩溃后全部重跑。8. 常见问题与排查方法问题现象可能原因排查方式解决方案模型下载失败网络受限或 Hugging Face Hub 不可访问检查网络查看报错链接使用镜像源或离线下载模型到本地目录显存不足模型太大或 batch 太大查看显存占用降低 batch size使用小模型、半精度、量化或 CPU 推理surprisal 出现 NaN对数概率计算异常或输入为空检查句子是否为空检查模型输出过滤空句子添加数值稳定处理两类中断的 surprisal 没有差异语料构造不够干净或模型能力不足查看单个 token 的 surprisal对比正常句重新设计语料缩小模型或换更大模型统计模型不显著样本量太少或效应量太小增加句子数量检查数据分布做功效分析增加样本控制随机效应批量任务跑一半失败网络波动、显存波动或代码异常加日志输出记录已处理 ID设置重试机制保存中间结果最常被忽略的问题就是语料构造不干净。很多实验跑出来结果不对不是模型问题而是正常句与异常句在词频、句长、句法复杂度上差异太大。先检查语料再检查代码。关于显存不足很多人一上来就加载 7B 模型然后发现跑不动。更稳妥的流程是先加载distilgpt2这类 82M 参数的小模型确认整套分析流程正确再考虑是否换成更大模型。模型大小不是越好对于验证方法小模型足够。9. 最佳实践与使用建议9.1 先跑通最小可运行流程第一次实验不要急着堆大量语料。先构造 5 组句子跑通代码确认输出结果符合直觉。比如概念中断句在异常位置的 surprisal 高于正常句。然后扩大到 30 组句子再做统计检验。这样出了问题能快速定位。9.2 所有中间结果落盘不管是 surprisal、隐状态距离还是模型预测概率都建议保存成 CSV 或 JSON。没有落盘的话后续分析一旦要调整统计模型就要重新跑一遍推理。而且大模型推理耗时较长重跑成本很高。中间结果落盘后也可以对比不同模型版本的行为。9.3 用固定随机种子和模型版本LLM 推理结果在相同模型权重下是确定的但分词器版本、PyTorch 版本可能影响结果。正式实验前记录transformers.__version__、torch.__version__、模型名称和 commit hash。这样别人复现时不会因为版本差异产生偏差。9.4 谨慎解释相关关系LLM 指标与人类行为有相关不代表模型就是人类阅读的机制模型。LLM 是基于大规模语料统计学习到的预测模式人类阅读则涉及长时记忆、世界知识、语言经验和社会认知。用 LLM 作为认知模型时必须把“模型表现”和“人类机制”分开写避免过度拟人化。9.5 合规与伦理如果实验涉及真实人类被试数据务必遵守伦理规范。如果涉及从网络抓取语料必须确认语料版权必要时使用公开数据集或自己构造材料。如果后续把模型输出用于商用文本评估要做人工复核避免模型对少数群体产生偏差性判断。10. 总结与下一步这个研究主题最值得尝试的点是它把两个通常不放在一起比较的系统拉到了同一个分析框架里一边是人类的实时阅读加工一边是 Transformer 的层间前馈计算。概念中断和指称中断听起来很像但在人类脑电上属于不同时间窗口在 LLM 内部也大概率对应不同的深度模式。这个思路可以直接转化为文本连贯性评估的新指标也可以给可解释性研究提供新的分析视角。最容易踩的坑有两个。一是语料控制不到位导致实验结果被词频或句法复杂度污染。二是把 LLM 的层数直接类比为人类的时间窗口这是分析时的概念混淆。如果你想沿着这个方向继续做建议先跑通第五章的简化 demo再逐步扩展实验语料和统计模型。后续有很多可以深入的方向用更大的模型比较层间动态、加入多语言语料、把模型表征与真实 EEG/眼动数据做对齐分析或者把 surprisal 设计成文本生成质量评估的回归特征。建议先把最小流程跑通保存一份可复现的结果再决定要不要做更大的实验。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询