大语言模型输出层与反分词:从概率分布到文本生成的关键技术

发布时间:2026/8/14 21:13:00

大语言模型输出层与反分词:从概率分布到文本生成的关键技术
1. 项目概述从“词”到“意”的最后一公里如果你玩过大语言模型肯定对“生成”这个动作不陌生。你输入一段话模型就开始一个字一个字地“吐”出回答。这个看似简单的“吐字”过程在模型内部其实是一场惊心动魄的“海选”和“解码”之旅。我们今天要聊的“输出层与反分词”就是这场旅程的终点站也是决定你最终看到什么内容的关键环节。它负责把模型内部那些抽象、高维的数学向量翻译成我们人类能理解的文字、代码或者符号。没有它模型就只是一个会做复杂数学题的“哑巴”。简单来说你可以把整个生成过程想象成一部电影的后期制作。模型的深层网络比如Transformer的各个层是拍摄和剪辑的原始素材充满了丰富的信息和可能性。而输出层Output Layer就是那位手握最终剪辑权的导演它要从成千上万个“候选镜头”即词表里的所有词中挑选出最合适的下一个“画面”词。紧接着反分词Detokenization则像是字幕组和成片输出部门负责把导演挑选出来的一个个独立“镜头”Token即分词后的最小单元按照语言的语法和习惯流畅地拼接成完整的句子和段落最终呈现给你。这个过程的核心矛盾在于模型内部是连续、高维的向量空间而人类语言是离散、符号化的序列。输出层和反分词就是架在这两者之间的唯一桥梁。理解它们你才能真正理解模型是如何“思考”并“表达”的而不是仅仅把它当作一个黑箱。这对于做模型优化、解决生成中的重复或胡言乱语问题、甚至是设计新的解码策略都至关重要。2. 核心组件深度解析2.1 输出层从隐状态到词表概率输出层在Transformer架构中通常被称为LM Head语言模型头。它的任务非常明确接收来自模型最后一个Transformer层的输出一个高维向量例如[batch_size, seq_len, hidden_dim]然后将其映射到整个词表Vocabulary上为词表中的每一个可能的token计算一个分数或概率。2.1.1 核心结构一个线性层 Softmax最常见的输出层结构简单得令人意外就是一个没有偏置项bias的线性变换Linear / Dense Layer加上一个Softmax函数。线性层Linear Projection这一步的目的是进行降维和语义对齐。假设你的模型隐藏层维度是d_model768词表大小是V50257。线性层就是一个形状为[768, 50257]的权重矩阵W。它将最后一个隐藏状态h_t形状[768]进行矩阵乘法logits h_t · W。得到的logits形状[50257]是一个未归一化的分数向量你可以理解为每个候选词的“原始得分”。这个权重矩阵W通常与模型输入端的词嵌入矩阵Embedding Matrix共享参数这是一种被称为“权重绑定Weight Tying”的经典技巧能显著减少参数量并提升训练稳定性。Softmax 函数将分数转化为概率logits值可能非常大正或负且彼此之间没有可比性。Softmax 的作用就是进行“概率归一化”。它的公式对于每个词i是P(i) exp(logits_i) / sum(exp(logits_j)) for j in all V这个操作将所有logits通过指数函数拉大到正数域然后除以所有值的和确保输出是一个概率分布所有值在0到1之间且和为1。于是我们得到了一个形状为[50257]的概率向量其中每个位置的值代表了模型认为下一个词是该位置对应词的概率。注意Softmax函数对输入数值非常敏感。如果logits中存在一个远大于其他值的“尖峰”经过Softmax后其对应的概率会无限接近1而其他词的概率则接近0这会导致模型输出非常“尖锐”和确定。反之如果logits分布平缓输出概率分布则更“平坦”模型的选择更多样。温度参数Temperature就是用来调节这个“尖锐”程度的我们后面会详细讲。2.1.2 为什么是线性层更深层的网络不行吗这是一个很好的问题。理论上你当然可以在最后加一个多层感知机MLP。但在实践中一个简单的线性层被证明是高效且足够的。原因有三第一Transformer的深层已经具备了极强的非线性表征能力最后一个隐藏状态h_t已经富含了决定下一个词所需的全部上下文信息一个线性变换足以将其映射到词表空间。第二加入更多非线性层会显著增加参数量和计算成本尤其是在超大词表的情况下收益却不明显。第三与输入嵌入层共享权重的线性层在数学上具有很好的对称性便于优化。2.2 反分词从Token序列到自然文本当输出层选出了概率最高的token比如对应中文的“喜”字后我们得到的仍然是一个ID例如数字12345。反分词的任务就是把这个ID序列还原成人类可读的文本。2.2.1 分词的“后遗症”现代大语言模型LLM基本都采用子词分词Subword Tokenization如Byte-Pair Encoding (BPE) 或 WordPiece。这种方法的优点是能很好地处理未登录词OOV和平衡词表大小。但它也带来了反分词时必须处理的“后遗症”子词拼接一个完整的单词可能被分成多个子词token。例如“playing”可能被分成“play”和“ing”。反分词时需要将它们无缝拼接回“playing”。特殊标记处理分词器会引入一些特殊token如表示句子开始的s结束的/s填充的pad以及未知词unk等。反分词时需要识别并过滤或转换这些标记。空格还原在BPE等分词方案中空格通常被编码成一个特殊的符号如Ġ或者通过前缀字符如##表示前缀来体现单词边界。反分词算法必须精确地恢复原始文本中的空格和标点符号。2.2.2 反分词的工作流程一个标准的反分词流程可以概括为以下几步ID到Token的映射通过分词器的词汇表将模型输出的token ID序列转换回字符串形式的token序列。例如[12345, 23456, 34567]-[“, 喜, 欢]。Token合并这是最核心的一步。分词器如Hugging Face的tokenizer内部有一个decoder方法它会根据预设的规则合并子词token。它会识别那些表示“这是前一个词的一部分”的标记如##开头的token并将其与前一个token合并同时移除这些连接符号。特殊字符与空格处理处理那些代表空格的特殊符号如Ġ将其转换为普通的空格 。同时过滤掉用于序列控制的特殊token如s,/s,pad。编码还原对于多字节字符如中文、Emoji确保其UTF-8编码被正确还原避免出现乱码。2.2.3 常见的坑与实操心得坑1中英文混合空格英文分词器通常将空格作为一个独立token或前缀处理。在反分词中文时如果训练语料中英文混合处理不当可能会导致生成的中文文本中出现多余的空格。例如“我喜欢python编程”可能被错误地反分词为“我喜欢 python 编程”。这需要在分词器训练或后处理时特别注意。坑2标点符号粘连有些分词方案可能导致标点符号与单词粘连。例如“Hello,”可能被分成[“Hello”, “,”]反分词后能正确还原。但如果处理不当可能会变成“Hello,”逗号前无空格或“Hello ,”逗号前有多余空格。好的分词器会内置规则处理这些边缘情况。实操心得永远不要自己写复杂的反分词逻辑。直接使用模型对应的、成熟的分词器库如transformers库的AutoTokenizer提供的.decode()方法。它封装了所有复杂的合并规则和特殊字符处理是最可靠的选择。自己手动拼接字符串十有八九会出各种奇怪的bug。3. 生成策略如何从概率分布中“采样”下一个词拿到了输出层给出的概率分布P我们如何决定最终输出哪个词呢这并不是简单地永远选择概率最高的那个词贪婪搜索。不同的选择策略会极大影响生成文本的质量、多样性和创造性。3.1 贪婪搜索Greedy Search策略每一步都选择当前概率最高的那个token。优点计算简单速度快生成的文本通常语法正确、连贯。缺点容易陷入重复循环缺乏多样性可能错过全局更优的序列因为它是局部最优。例如生成“中国的首都是____”贪婪搜索可能因为“北京”在训练数据中概率极高而直接选中但有时我们可能需要“北平”这样的历史表述。3.2 集束搜索Beam Search策略保留多个beam width如4候选序列。在每一步对每个候选序列扩展下一个词从所有可能的扩展中选出总概率最高的k个新序列。如此反复直到序列结束。优点相比贪婪搜索更有可能找到全局概率更高的序列在机器翻译、文本摘要等需要确定性和准确性的任务上表现更好。缺点计算量和内存消耗随beam width增大而增加生成的文本可能过于保守、模板化缺乏惊喜在开放生成长文本时容易导致重复。3.3 采样Sampling策略根据概率分布P随机抽取下一个token。概率高的词被抽中的几率大但概率低的词也有机会。优点创造性高文本多样性强更像人类的写作。缺点完全随机可能导致语法错误、不连贯或胡言乱语。3.4 核心调参温度Temperature与核采样Top-p / Nucleus Sampling为了在“确定性”和“多样性”之间取得平衡我们引入了两个关键参数。3.4.1 温度Temperature温度T在Softmax之前作用于logitsscaled_logits logits / T。T 1标准Softmax不改变原始分布。T 1放大logits使概率分布变得更“平坦”。模型更倾向于探索低概率的词输出更随机、更有创意但也更可能出错。0 T 1缩小logits使概率分布变得更“尖锐”。模型更确信于高概率的词输出更确定、更保守但也更可能重复和乏味。T - 0趋近于贪婪搜索。T - ∞趋近于均匀随机采样。实操中的温度选择创意写作、对话生成通常使用T0.7~0.9在保持连贯性的基础上增加一些变化。代码生成、事实问答使用较低的T0.1~0.3以提高准确性和确定性。调试当模型输出胡言乱语时首先检查温度是否被意外设得过高如T1.5以上。3.4.2 核采样Top-p Sampling这是比Top-k采样更自适应的一种方法。它设定一个概率累积阈值p如0.9。然后将词表按概率从高到低排序依次累加概率直到累加和刚好超过p。最后仅从这个动态大小的候选集合中重新归一化概率并采样。优点能根据当前概率分布的形状动态调整候选词数量。当模型很确信时分布尖锐候选集小当模型不确定时分布平坦候选集大。这比固定的Top-k更灵活。参数设置p通常设置在0.8~0.95之间。p1.0即退化为原始采样p0.0则退化为贪婪搜索但实际不会用0。3.4.3 Top-k 采样设定一个固定值k如50每一步只从概率最高的k个候选词中采样。这过滤掉了那些极低概率的“长尾词”能在一定程度上保证生成质量。但缺点也是固定的k值可能不适应所有情况。当前最佳实践温度T 核采样Top-p的组合被广泛认为是开放域文本生成的最佳配置。例如设置T0.8, top_p0.9。温度负责控制整体的“锐利”程度Top-p负责在每一步进行动态的候选集筛选两者结合能产生既流畅又富有变化的文本。4. 高级话题与工程实践4.1 输出层参数与词表管理在大模型应用中词表管理本身就是一个工程挑战。词表外OOV问题即使采用BPE仍可能遇到未登录词。通常模型会有一个unk标签但生成unk对用户不友好。一种解决方案是使用回退策略例如用字符级模型来生成或者直接复制输入中的罕见词。多语言与特殊符号支持多语言的模型如mT5、BLOOM词表巨大可达25万以上包含了多种语言的子词。输出层矩阵W的尺寸hidden_dim * vocab_size会占用大量显存。在推理时可以通过“词表裁剪”或“动态加载”来优化。添加新词如果想给模型增加生成新词如网络流行语、专业术语的能力需要在输出层和输入嵌入层同时添加新的行并进行微调fine-tuning。直接修改词表而不调整模型权重是无效的。4.2 生成过程中的重复与退化问题这是文本生成的老大难问题与输出层和采样策略紧密相关。重复n-gram惩罚一种常见技巧是在采样时对最近已生成的n个词n-gram在后续步骤中的logits进行惩罚减去一个常数。这能有效抑制短距离内的词语重复。Hugging Face的transformers库中generate函数的no_repeat_ngram_size参数就是干这个的。长度惩罚为了鼓励或抑制生成长文本可以给长序列的总分添加一个与长度相关的惩罚项。length_penalty参数就是用于此大于1鼓励生成长句小于1鼓励生成短句。“神经退化”现象在生成长文本时模型可能陷入重复循环或开始输出无意义的乱码。除了上述惩罚更根本的解决方案可能在于模型架构如引入更长程的记忆或训练目标如使用对比学习目标。4.3 输出层与模型头部的变体我们讨论的LM Head是最常见的形式但在不同任务中输出层会有变化序列分类任务输出层通常是一个线性层将[CLS]token的表示映射到类别数量的维度然后接Softmax。Token分类任务如NER对序列中每个token的隐藏状态都通过一个相同的线性分类头输出每个token的类别标签。条件生成任务如图像描述生成输出层仍然是LM Head但模型的输入同时包含了图像编码和文本前缀。 理解这些变体有助于你根据任务定制或修改模型的输出部分。5. 实战代码示例与问题排查让我们通过一个简单的代码示例将上述所有概念串联起来。这里以Hugging Facetransformers库为例。from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 1. 加载模型和分词器 model_name gpt2 # 以GPT-2为例 tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained(model_name) # 设置模型为评估模式 model.eval() # 2. 准备输入 prompt 人工智能的未来是 inputs tokenizer(prompt, return_tensorspt) # 返回PyTorch张量 # 3. 生成配置融合了输出层后的采样策略 generation_config { max_new_tokens: 50, # 最多生成50个新token do_sample: True, # 启用采样 temperature: 0.8, # 温度参数 top_p: 0.9, # 核采样参数 no_repeat_ngram_size: 2, # 避免2-gram重复 pad_token_id: tokenizer.eos_token_id, # 用EOS token作为填充 } # 4. 执行生成 with torch.no_grad(): # 禁用梯度计算节省内存 output_ids model.generate( **inputs, **generation_config ) # 5. 反分词得到最终文本 # 注意跳过输入部分只解码新生成的token generated_text tokenizer.decode(output_ids[0][inputs[input_ids].shape[1]:], skip_special_tokensTrue) print(f输入: {prompt}) print(f生成: {generated_text})常见问题排查清单问题现象可能原因排查步骤与解决方案生成结果完全随机/胡言乱语温度(temperature)设置过高如1.5do_sampleTrue但未设置top_p或top_k导致从整个词表随机采样。1. 检查并降低temperature至0.5-1.0区间。2. 启用并设置top_p如0.9或top_k如50以限制采样池。生成内容不断重复缺乏重复惩罚温度过低模型在训练数据上过拟合了某些模式。1. 启用no_repeat_ngram_size通常设为2或3。2. 适当提高temperature如从0.2调到0.7。3. 尝试增加repetition_penalty参数1.0。生成突然中断或截断达到了max_length或max_new_tokens限制生成了eos_token_id。1. 增加max_new_tokens的值。2. 检查生成文本中是否自然出现了句号等结束符号这是正常现象。生成速度极慢使用了集束搜索(num_beams 1)且beam width较大生成的序列很长。1. 对于开放生成优先使用采样而非集束搜索。2. 如果必须用集束搜索尝试减小num_beams如从5减到3。3. 考虑使用更高效的解码算法如对比搜索(contrastive search)。反分词后出现特殊字符或空格错误使用了错误的分词器后处理逻辑有误。1.确保使用与模型完全匹配的分词器同from_pretrained加载。2. 使用分词器自带的.decode()方法并设置skip_special_tokensTrue避免手动处理。显存溢出(OOM)词表过大序列过长使用了大的num_beams。1. 减少batch_size。2. 减少生成长度(max_new_tokens)。3. 对于大词表模型查询是否有支持动态加载输出层权重的实现。理解输出层与反分词就像是拿到了驱动大语言模型“说话”的遥控器。你不再只是被动地接受模型的输出而是可以通过调整温度、Top-p这些旋钮以及设计不同的解码策略来主动塑造生成文本的风格和质量。无论是想让AI写出更严谨的报告还是更活泼的故事抑或是解决那些恼人的重复问题关键都藏在这“最后一公里”的细节里。下次当你调用model.generate()时不妨花点时间想想背后的这些步骤或许就能调教出更合你心意的结果。

相关新闻

【CAPL】调用外部程序发送钉钉消息:从C#封装到CAPL集成实战

【CAPL】调用外部程序发送钉钉消息:从C#封装到CAPL集成实战

2026/8/14 21:13:00

CAPL调用外部程序发送钉钉消息:从C#封装到CAPL集成实战 文章目录 CAPL调用外部程序发送钉钉消息:从C#封装到CAPL集成实战 📌 概述 🧩 一、为什么选择C# + CAPL的组合? 🛠️ 二、C#端:通用钉钉消息发送器 2.1 功能设计 2.2 字段定义 2.3 完整C#代码 2.4 命令行调用示例…

角色扮演ASMR:从声音模仿到情境构建的心理按摩艺术

角色扮演ASMR:从声音模仿到情境构建的心理按摩艺术

2026/8/14 21:13:00

你点开一个标题写着“学霸”的ASMR视频,期待的是图书馆的翻书声、笔尖划过纸张的沙沙声,或者深夜自习室里那种专注的宁静。但耳机里传来的,却是一个略带紧张、试图模仿学霸语气的声音,在磕磕绊绊地讲解一道其实并不复杂的数学题。…

从零构建MCP服务器:实现AI与外部工具的安全可控连接

从零构建MCP服务器:实现AI与外部工具的安全可控连接

2026/8/14 21:13:00

最近在尝试将AI助手深度集成到开发工作流中时,很多开发者都遇到了一个共同的瓶颈:如何让AI模型安全、可控地访问和操作本地或远程的工具、数据库和API?传统的提示词工程和函数调用(Function Calling)虽然有效&#xff…

【电商核心业务实战】(8) 使用RocketMQ优化订单超时取消流程

【电商核心业务实战】(8) 使用RocketMQ优化订单超时取消流程

2026/8/14 22:23:03

📚 电商核心业务实战 系列文章目录 (1) 电商项目核心订单系统设计与实现 (2) 电商促销流程设计与实现 (3) 分布式唯一ID 实战 (4) 订单系统读写分离方案设计与实现 (5) 订单系统分库分表方案设计与实现 (6) 订单系统历史数据归档方案设计与实现 (7) 电商项目订单支…

Spark NEO Core:统一配置、监控与依赖管理的Spark应用开发框架

Spark NEO Core:统一配置、监控与依赖管理的Spark应用开发框架

2026/8/14 22:23:03

如果你正在开发一个基于 Apache Spark 的数据处理应用,并且正在为如何高效、统一地管理应用配置、监控指标和任务依赖而头疼,那么这篇文章就是为你准备的。在传统的 Spark 开发流程中,我们常常面临一个割裂的局面:应用的业务逻辑代…

【电商核心业务实战】(6) 订单系统历史数据归档方案设计与实现

【电商核心业务实战】(6) 订单系统历史数据归档方案设计与实现

2026/8/14 22:23:03

📚 电商核心业务实战 系列文章目录 (1) 电商项目核心订单系统设计与实现 (2) 电商促销流程设计与实现 (3) 分布式唯一ID 实战 (4) 订单系统读写分离方案设计与实现 (5) 订单系统分库分表方案设计与实现 (6) 订单系统历史数据归档方案设计与实现 (7) 电商项目订单支…

【电商核心业务实战】(5) 订单系统分库分表⽅案设计与实现

【电商核心业务实战】(5) 订单系统分库分表⽅案设计与实现

2026/8/14 22:23:03

📚 电商核心业务实战 系列文章目录 (1) 电商项目核心订单系统设计与实现 (2) 电商促销流程设计与实现 (3) 分布式唯一ID 实战 (4) 订单系统读写分离方案设计与实现 (5) 订单系统分库分表方案设计与实现 (6) 订单系统历史数据归档方案设计与实现 (7) 电商项目订单支…

从Spark API使用者到性能调优专家:原理、实战与避坑指南

从Spark API使用者到性能调优专家:原理、实战与避坑指南

2026/8/14 22:23:03

如果你正在学习大数据处理,或者工作中需要处理海量数据,那么“Spark”这个名字你一定不陌生。但很多初学者,甚至一些有经验的开发者,在面对Spark时,常常陷入一个误区:以为只要会写几行 spark.read.csv() …

C语言学习之数据结构 :基本概念

C语言学习之数据结构 :基本概念

2026/8/14 22:13:03

数据结构 一 .基本概念 1.数据结构 数据结构:存储具有一种或或多种特定关系的数据的集合(如何组织和存储数据) 程序设计 数据结构 算法 2.数据与数据之间的关系 逻辑结构:数据元素与元素之间的关系 集合 :数据元素与…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/13 11:01:28

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/14 10:48:24

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/13 17:17:06

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

2026/8/14 0:01:53

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

2026/8/14 0:01:54

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

2026/8/14 0:01:54

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/14 19:35:14

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…