随着生成性人工智能(GenAI)应用在人类生活各个领域的迅速发展,大型语言模型(LLMs)作为其核心,扮演着越来越重要的角色。LLMs是深度神经网络(DNNs),设计用来处理输入并生成类似人类的响应。这些模型包含多个隐藏层,每层都有数千个神经元,位于输入和输出层之间。它们在包含数十亿参数的庞大数据集上进行训练。作为随机模型,LLMs在上下文理解、连贯流畅的文本生成、智能问答和语言翻译等方面表现出色。它们的发展彻底改变了自然语言处理(NLP)及其广泛的应用。
然而,尽管LLMs在技术上取得了巨大进步,但在实际应用中,它们的性能往往未能达到预期,投资回报率(ROI)也未能满足炒作。许多GenAI应用和产品难以从概念验证过渡到全面生产。这种对比的观点造成了企业在日常业务操作中采用GenAI技术的不确定性。本文将探讨LLMs在实际应用中的挑战,并介绍一种基于语义熵的方法来评估和增强对LLMs的信任。
信任LLMs的挑战
LLMs在问答(QA)、推理、语言翻译等方面展现出令人印象深刻的能力。然而,它们也存在固有的弱点:它们可以生成听起来合理但完全捏造的虚假输出。这种现象被称为“虚构”,当模型自信地产生错误信息时就会发生。LLMs对不相关因素(如随机种子值)也很敏感,这使得它们不可靠。这在医学、金融、法律和空间科学等关键领域尤其削弱了信任。
语义熵:衡量模型不确定性的强有力方法
为了增强对基于变换器的模型的信任,可以通过测量它们的输出不确定性来实现。一种方法是使用基于信息的方法,将熵作为不确定性的关键度量。这种技术通过量化虚构来评估模型的问答能力。
熵是信息论中的一个基本概念,它量化了一个随机过程输出的不确定性,在现代机器学习模型中,包括深度神经网络(DNNs),起着至关重要的作用。熵测量模型对给定输入的预测概率分布的分散程度。更高的熵表示模型输出的不确定性更大。香农定理提供了熵的核心方程,即:
[ H(x) = -\sum(p \cdot \log(p)) ]
其中,( H ) 是条件熵,( x ) 是输入序列,( p ) 是模型的预测概率。
基本的熵估计方法对于短输入(如单词或句子)效果很好。然而,很明显,测量更长序列的不确定性更为复杂。为了解决这个问题,Kadvath等人(2022年)引入了预测熵(PE)的概念。预测熵的定义如下:
[ \text{预测熵} = \text{熵} ]
更高的熵表示更大的不确定性,反之亦然。在这里,意义比产生输出的标记使用更为重要。语义熵(SE)允许自由形式的生成,克服了更适合封闭词汇表或多项选择任务的简单方法的局限性。该方法作为随机种子变化的语义一致性检查。然而,它并不区分由于数据分布引起的偶然不确定性(aleatoric uncertainty)和由有限信息引起的认识不确定性(epistemic uncertainty)。
语义熵与简单熵的区别
让我们通过一个例子来清楚地区分语义熵、简单熵和虚构。
考虑第三个问题:“印度的第一次月球任务是什么时候?”是什么导致模型在这种情况下虚构?
语义熵
在用相同的问题查询三次后,生成的内容指向了类似的事件,但精确度不同。
- 生成1:具体日期 → 最接近参考答案。
- 生成2:月份 → 泛化意义。
- 生成3:大致时间框架 → 进一步泛化。
在语义聚类中,这些生成可能不属于同一个聚类:生成1不太可能与生成2和3聚类。这导致了多个语义聚类,表明对输出意义的不确定性。由于生成分布在几个聚类中,语义熵很高,反映了模型对正确答案精确意义的不确定性。
简单熵
简单熵测量词汇变化:
- 使用的单词没有太大的不同(例如,都提到了Chandrayaan-1和2008年)。
- 因此,简单熵很低,因为输出在词汇上看起来相似,尽管它们的意义发生了分歧。这破坏了对模型的信任。
计算语义熵
计算语义熵的方法是无监督的,直观地通过采样每个问题的多个潜在答案,然后将它们分组到语义等价的聚类中。相似性是通过答案是否在聚类中相互蕴含来确定的。具体来说,如果句子x蕴含句子y,反之亦然,它们被分类在同一个聚类中。这种方法有效地识别了虚构,而不需要事先的领域知识。
计算基于生成的标记序列概率(简单熵)的预测熵混淆了模型对意义的不确定性和对使用的具体单词的不确定性。在检测虚构时,对意义的不确定性比对单词序列的不确定性更重要。
计算语义熵以检测和测量LLM的虚构的三个步骤如下:
- 生成一组答案:给定一些上下文,x作为输入,采样M序列。它们应该根据分布p(s|x)进行采样。
- 输入上下文:将上下文x作为输入提供给LLM。
- 采样多个序列。生成M个序列{s(1),…,s(m)}并记录它们的标记概率{P(s(1)|x),…,P(s(m)|x)}。
- 单模型使用。对所有生成使用单个LLM,只在采样期间更改随机种子。
- 采样技术。使用温度1.0与核心采样(P=0.9)和top-K采样(K=50)。
- 最佳生成。在低温(0.1)下生成一个序列,以近似模型对上下文的“最佳”响应。使用低温增加了选择最可能的标记的可能性,这有助于评估模型的准确性。
- 按语义等价聚类:通过将模型生成的输出聚类成表达相同意义的组来估计语义熵。这种分组基于语义等价的概念。
- 标记空间:让T是语言中所有标记(单词、符号等)的空间。
- 序列空间:所有可能的标记序列集合,长度为N,是Tⁿ。
- 等价关系属性:E(ᐧ,ᐧ)必须是:
- 自反性:E(s,s)(一个句子等同于它自己)。
- 对称性:如果E(s,s’),则E(s’,s)。
- 传递性:如果E(s,s’)和E(s’,s”),则E(s,s”)。
- 使用这个关系,我们可以将句子分组为语义等价类。
- 对于每个类C,所有句子s∈C表达相同的意义,E(s,s’)对任何s,s’∈C都成立。
- 为了构建这些等价类,我们:
- 将新句子与现有聚类进行比较。
- 如果一个句子与聚类中的任何句子共享意义,我们将其添加到该聚类中。
- 否则,该句子形成自己的新聚类。
- 一个句子s在语义上等同于另一个句子s’,如果:
- s蕴含s’,并且
- s’蕴含s。
- 对于一个新句子,检查它是否双向蕴含任何现有聚类中的句子。
- 如果是,将其添加到该聚类中。
- 如果不是,为该句子创建一个新聚类。
- 通过只检查每个聚类中的一个句子(例如,第一句话),传递性确保正确的聚类。
- 估计熵:一旦我们将生成的序列分组为语义等价类(具有相同意义的句子聚类),我们可以通过汇总该类中所有标记序列的概率来估计序列属于特定类的可能性。
- 聚类序列:根据语义等价将生成的序列分组。
- 估计概率:对于完整的SE,使用标记概率计算P(Ci|x)。
- 对于离散SE,使用每个聚类中的序列比例。
- 计算SE:使用熵公式计算意义分布中的不确定性。
- 蒙特卡洛采样:增加样本数量M以获得更准确的估计。
语义熵在问答应用中的结果
我们使用六个问题评估了模型,每个问题问了10次,并记录了模型的响应。创建的最大聚类数量为三个。然而,聚类的数量取决于语义蕴含:如果LLM认为两个句子是蕴含的,它们被放置在同一个聚类中。我们将虚构警告标志设置为7,认为任何SE超过7都被视为给定输入的虚构。结果如下表所示。
问题:
- 如果所有的天鹅都是白色的,但这只天鹅是黑色的,它还是天鹅吗?
- 如果今天是星期一,在另一个时区明天是什么时候?
- 光是射线还是粒子?
- 重力是波还是时空的曲率?
- 死后有生命吗?
- 印度的首都是哪里?
虚构,LLM问答应用中的一种幻觉形式,很难用传统评估方法解决。结果表明,简单熵往往未能识别虚构,而语义熵有效地过滤掉了虚假声明。这种方法专注于评估意义而不是单词序列,使其适用于不需要事先知识的跨数据集和任务。它很好地泛化到未见过的任务,帮助用户识别可能导致虚构的提示,并在需要时鼓励谨慎。基于香农的信息理论和统计学,语义熵是检测LLM中虚构的可靠方法,促进了利益相关者在使用基于LLM的应用进行关键客户项目时的信任。