AIGC:大語言模型LLM的幻覺問題

引言

在使用ChatGPT或者其他大模型時,我們經常會遇到模型答非所問、知識錯誤、甚至自相矛盾的問題。

雖然大語言模型(LLMs)在各種下游任務中展示出了卓越的能力,在多個領域有廣泛應用,但存在著幻覺的問題:即生成與用戶輸入不符、與先前生成的內容矛盾或與已知世界知識不符的內容。

這種現象對LLMs在現實世界場景中的可靠性構成了重大挑戰。在準確率要求非常高的場景下幻覺是不可接受的,比如醫療領域、金融領域等。

目前在LLM幻覺問題上已經有無數的研究,比如關于幻覺的檢測、幻覺的評估基準分類、緩解幻覺的方法等。

今天我會結合幾篇有關LLM幻覺問題的綜述論文,來理解LLM幻覺的分類、檢測方法、評估和基準、減輕方法等。

最近的一篇是來自哈爾濱工業大學和華為的研究團隊,長達49頁,對有關LLM幻覺問題的最新進展來了一個全面而深入的概述。

這篇綜述(下文簡稱:綜述1)從LLM幻覺的創新分類方法出發,深入探究了可能導致幻覺的因素,并對檢測幻覺的方法和基準進行了概述。

論文鏈接:https://arxiv.org/abs/2311.05232

另外還有一篇綜述(下文簡稱:綜述2),來自騰訊AI實驗室和一些國內大學的研究團隊,綜述提出了LLM幻覺現象的分類法和評估基準,分析旨在減輕LLM幻覺的現有方法,并確定未來研究的潛在方向。

論文鏈接:https://arxiv.org/pdf/2309.01219.pdf

還有一篇有關幻覺的論文(下文簡稱:論文1),對各種文本生成任務中的幻覺現象進行了新的分類,從而提供了理論分析、檢測方法和改進方法。

論文鏈接:https://arxiv.org/pdf/2309.06794v1.pdf

1 幻覺的分類

在綜述2中,將LLMs幻覺分為三種:輸入沖突幻覺上下文沖突幻覺事實沖突幻覺

  • 輸入沖突幻覺:是指生成的內容與用戶提供的輸入不符;

  • 上下文沖突幻覺:是指生成的內容與之前生成的信息相矛盾;

  • 事實沖突幻覺:是指生成的內容與已知的世界知識不符。

圖注:3種幻覺的定義

而在最新的綜述1中,將LLM幻覺分為兩種:事實型幻覺忠實度幻覺

如上圖所示,左邊是事實型幻覺:當LLM被問到誰是第一個在月球上漫步的人時,LLM編了個人物出來,甚至還說得有模有樣。右邊是忠實度幻覺:LLM在看到這段新聞后,直接把年份概括錯了。

下圖是一張更為詳細的LLM幻覺種類圖,包括更為細致的分類:事實型幻覺包括事實不一致、事實捏造;忠實度幻覺又包括:指令-答案的不一致、文本不一致,以及邏輯不一致。

圖注:LLM幻覺種類圖

總的來說,結合事實、上下文、輸入的不一致,幻覺的定義和分類上是相似的。

結合常見的下游任務,比如機器翻譯、問答系統、對話系統、文本摘要、LLM知識圖譜和視覺問答系統,論文1總結了典型的幻覺現象,如下表所示:

?2 幻覺的來源

綜述2認為產生幻覺的主要原因有預訓練數據收集、知識GAP和大模型優化過程三個方面。

最新的綜述1也深入探討LLM產生幻覺的根本原因,主要分為三個關鍵方面:數據、訓練和推理。

結合起來,我們具體來看下幻覺的來源:

2.1 幻覺來自數據

  • 預訓練數據:大模型的知識和能力主要來自與預訓練數據,如果預訓練數據使用了不完整或者過期的數據,那么就很可能導致知識的錯誤,從而引起幻覺現象。

  • 數據利用:LLMs 往往會捕捉到虛假的相關性,在回憶知識(尤其是長尾信息)和復雜推理場景中表現出困難,從而進一步加劇幻覺。

2.2 幻覺來自訓練

  • 預訓練階段:LLMs在這一階段學習通用表征并捕捉廣泛的知識,通常采用基于transformer的架構,在龐大的語料庫中進行因果語言建模。但是,固有的架構設計和研究人員所采用的特定訓練策略,可能會產生與幻覺相關的問題。

  • 對齊階段:一般涉及兩個主要過程,即監督微調和從人類反饋中強化學習(RLHF)。雖然對齊能顯著提高 LLM 響應的質量,但也會帶來產生幻覺的風險,主要分為兩方面:能力不對齊(Capability Misalignment)和信念不對齊(Belief Misalignment)。

2.3 幻覺來自生成/推理

經過預訓練和對齊后,解碼在體現 LLM 能力方面發揮著重要作用。然而,解碼策略的某些缺陷可能導致 LLM 出現幻覺。綜述1深入探討源于解碼過程的潛在原因,并強調兩個關鍵因素:

  • 解碼策略固有的隨機性(Inherent Sampling Randomness):比如采用采樣生成策略(如top-p和top-k)引入的隨機性也可能導致幻覺的產生。

  • 不完善的解碼表示(Imperfect Decoding Representation):在解碼階段,LLM 使用頂層表示法預測下一個標記。然而,頂層表示法也有其局限性,主要表現在兩個方面:上下文關注不足(Insufficient Context Attention)和Softmax瓶頸(Softmax Bottleneck)。

3 幻覺的檢測

檢測 LLM 中的幻覺對于確保生成內容的可靠性和可信度至關重要。傳統的衡量標準主要依賴于詞語重疊,無法區分可信內容和幻覺內容之間的細微差別。這樣的挑戰凸顯了為 LLM 幻覺量身定制更復雜的檢測方法的必要性。

鑒于這些幻覺的多樣性,檢測方法也相應地有所不同。

在綜述1中,全面介紹了針對事實性幻覺忠實性幻覺的主要幻覺檢測策略。

3.1 事實性幻覺的檢測

事實性幻覺的檢測方法:通常分為 "檢索外部事實"(Retrieve External Facts)和 "不確定性估計"(Uncertainty Estimation)。

檢索外部事實:為了有效地指出 LLM 輸出中的事實不準確之處,一種直觀的策略是將模型生成的內容與可靠的知識來源進行比較,如下圖 3 所示。

雖然許多幻覺檢測方法都依賴外部知識源進行事實檢查,但有幾種方法可以在零資源環境下解決這一問題,從而無需檢索。

這些策略背后的基本前提是,LLM 幻覺的起源本質上與模型的不確定性有關。

因此,通過對模型生成的事實內容的不確定性進行估計,就可以檢測出幻覺。

不確定性估計的方法大致可分為兩種:基于內部狀態和 LLM 行為,如圖 4 所示。前者的前提是可以訪問模型的內部狀態,而后者則適用于更受限制的環境,僅利用模型的可觀測行為來推斷其潛在的不確定性。

3.2?忠實性幻覺的檢測

忠實性幻覺的檢測方法:主要側重于確保生成的內容與給定上下文保持一致,從而避免無關或矛盾輸出的潛在隱患。如下圖5探討在 LLM 生成中檢測不忠實的方法。

  • 基于事實度量:通過檢測生成內容與源內容之間的事實重疊度來評估忠實度。

  • 基于分類器的度量:利用經過訓練的分類器來區分生成內容與源內容之間的關聯程度。

  • 基于QA的度量方法:利用問題解答系統來驗證源內容與生成內容之間的信息一致性。

  • 不確定性估計:通過測量模型對其生成輸出的置信度來評估忠實度。

  • 基于prompt的度量方法:讓LLM充當評估者,通過特定的prompt策略來評估生成內容的忠實度。

4 幻覺的評估

針對不同類型的幻覺,采用的評估方式不一樣。

現有針對幻覺的工作,提出了各種基準來評估LLM中的幻覺,如下表5所示:

現有的基準主要根據LLMs的兩種不同能力來評估幻覺:生成事實陳述或判別事實陳述與非事實陳述的能力。下表說明了這兩種評估形式的區別。

  • Generation 生成式基準:將幻覺看作一種生成特征,類似于流暢度和連貫性,并對LLM生成的文本進行評估。例如,TruthfulQA用于評估大型模型對問題的回答的真實性,而FactScore則用于評估大型模型生成的個人傳記的事實準確性。

  • Discrimination 判別式基準:考察大型模型區分真實陳述和幻覺陳述的能力。具體來說,HaluEval要求模型確定狀態信息是否包含幻覺信息,而FACTOR則研究LLM是否更可能生成事實陳述而非非事實陳述。

在這些基準中,TruthfulQA是一種特殊的基準,兼具生成式和判別式兩種基準,提供了一個多項選擇的替代方案,以測試模型區分真實陳述的能力。

5 幻覺的解決

論文1總結了五種解決幻覺的方法,具體如下圖所示:

不同下游任務解決幻覺的方法不同,具體如下圖所示:

在哈工大的綜述1中,全面回顧了當前減輕幻覺的方法,并根據幻覺成因對這些方法進行了系統分類。

具體來說,綜述1將重點放在解決與數據相關的幻覺、與訓練相關的幻覺和與推理相關的幻覺的方法上,每種方法都提供了量身定制的解決方案,以應對各自原因所固有的特定挑戰。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384378.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384378.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384378.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于C++子類父類成員函數的覆蓋和隱藏

轉載:http://blog.csdn.net/worldmakewayfordream/article/details/46827161 函數的覆蓋 覆蓋發生的條件: (1) 基類必須是虛函數(使用virtual 關鍵字來進行聲明) (2)發生覆蓋的兩個函…

數據結構(四)串的順序存儲

#include <stdio.h> #include <stdlib.h>#define MAXLEN 255 //定長順序存儲 typedef struct {char ch[MAXLEN]; //每個分量存儲一個字符int length; //串的實際長度 }SString;//串的初始化 bool StrAssign(SString& T, char* chars) {int i 0, len;char* …

數據結構(四)串的動態數組存儲

#include <stdio.h> #include <stdlib.h>#define MAXLEN 255 //定長順序存儲 typedef struct {char* ch; //每個分量存儲一個字符int length; //串的實際長度 }SString;//串的初始化 bool StrAssign(SString& T, char* chars) {int i 0, len;T.ch (char*)m…

C++名字隱藏

轉載&#xff1a;http://www.weixueyuan.net/view/6361.html 如果派生類中新增一個成員變量&#xff0c;該成員變量與基類中的成員變量同名&#xff0c;則新增的成員變量就會遮蔽從基類中繼承過來的成員變量。同理&#xff0c;如果派生類中新增的成員函數與基類中的成員函數同…

c語言深入淺出(一)strcpy和memcpy的區別

c語言深入淺出&#xff08;一&#xff09;strcpy和memcpy的區別strcpy和memcpy都是c語言的庫函數 strcpy:只用于字符串的復制&#xff0c;當碰到‘\0’就停止了 memcpy:用于這個內存的拷貝&#xff0c;適用于結構體、字符數組、類等 char * strcpy(char * dest, const char * s…

C++ dynamic_cast操作符

轉載&#xff1a;http://www.weixueyuan.net/view/6377.html 在C中&#xff0c;編譯期的類型轉換有可能會在運行時出現錯誤&#xff0c;特別是涉及到類對象的指針或引用操作時&#xff0c;更容易產生錯誤。Dynamic_cast操作符則可以在運行期對可能產生問題的類型轉換進行測試。…

數據結構(五)樹

數據結構&#xff08;五&#xff09;樹一、基本操作樹是n個節點的有限集&#xff0c;它是一種遞歸的數據結構 一、基本操作 #include <stdio.h> #include <stdlib.h> #include <iostream>#define Elemtype charusing namespace std; typedef struct BiTNod…

C++ typeid操作符

轉載&#xff1a;http://www.weixueyuan.net/view/6378.html typeid操作符用于判斷表達式的類型&#xff0c;注意它和sizeof一樣是一個操作符而不是函數。如果需要使用typeid操作符&#xff0c;最好加上typeinfo頭文件。 給出以下定義 int a;double b;char * c;long d; 下表列…

數據結構(五)層次遍歷

數據結構&#xff08;五&#xff09;層次遍歷// linear_listqueue.cpp : This file contains the main function. Program execution begins and ends there. //#include <iostream> #include <stdlib.h> #include <stdio.h> #define ElemType BiTree using …

C++成員函數指針的應用

轉載&#xff1a;http://www.cppblog.com/colys/archive/2009/08/18/25785.html C中&#xff0c;成員指針是最為復雜的語法結構。但在事件驅動和多線程應用中被廣泛用于調用回叫函數。在多線程應用中&#xff0c;每個線程都通過指向成員函數的指針來調用該函數。在這樣的應用中…

cv2.VideoCapture()無法打開視頻解決方法

cv2.VideoCapture無法打開視頻解決方法問題解決方法問題 cv2.VideoCapture打開mp4文件&#xff0c;直接報錯 解決方法 我們打開D:\opencv_3.4.2_Qt\opencv_3.4.2_Qt\x86\bin\&#xff08;opencv的dll動態庫中找到&#xff09; 找到opencv_ffmpeg342.dll文件&#xff0c;放入…

函數指針指向類的靜態成員函數

轉載&#xff1a;http://www.cnblogs.com/dongyanxia1000/p/4906592.html 1. 代碼 1 #include<iostream>2 #include<stdio.h>3 using namespace std;4 class Point5 {6 public:7 Point(int x0,int y0):x(x),y(y)8 { 9 count; 10 } 11 P…

Qt+OpenCV打開視頻文件并在窗口界面上顯示

QtOpenCV打開視頻文件并在窗口界面上顯示1、新建一個Qt Widgets Application&#xff0c;工程配置文件&#xff08;.pro文件&#xff09;內容如下&#xff1a;#------------------------------------------------- # # Project created by QtCreator 2021-03-19T09:06:07 # #--…

OpenCV Mat的數據類型

OpenCV Mat的數據類型Mattype類型內存拷貝簡單實現Mat Mat類(Matrix的縮寫)是OpenCV用于處理圖像而引入的-一個封裝類。他是一個自動內存管理工具。 Mat:本質上是由兩個數據部分組成的類:(包含信息有矩陣的大小&#xff0c;用于存儲的方法&#xff0c;矩陣存儲的地址等)矩陣頭…

C++指向成員函數的指針

轉載&#xff1a;http://www.cnblogs.com/tracylee/archive/2012/11/15/2772176.html C指向函數的指針定義方式為&#xff1a; 返回類型 &#xff08;*指針名&#xff09;&#xff08;函數參數列表&#xff09;&#xff0c;例如 void &#xff08;*p&#xff09;&#xff08;in…

OpenCV基礎知識 圖像

OpenCV基礎知識 圖像位圖模式灰度模式RGB模式位圖模式 位圖模式是是1位深度的圖像&#xff0c;只有黑和白兩種顏色。它可以由掃描或置入黑色的矢量線條圖像生成&#xff0c;也能由灰度模式轉換而成。其他圖像模式不能直接轉換為位圖模式。 灰度模式 灰度模式是8位的圖像&…

C++中引用與指針的區別(詳細介紹)

轉載&#xff1a;http://www.cnblogs.com/tracylee/archive/2012/12/04/2801519.html C&#xff0b;&#xff0b;中的引用與指針的區別指向不同類型的指針的區別在于指針類型可以知道編譯器解釋某個特定地址&#xff08;指針指向的地址&#xff09;中的內存內容及大小&#xff…

mysql遠程連接權限grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘123456‘ with grant option語句報錯

mysql遠程連接權限grant all privileges on *.* to ‘root‘‘%‘ identified by ‘123456‘ with grant option語句報錯記錄一下自己安裝mysql遇到的小坑grant all privileges on *.* to ‘root‘‘%‘ identified by ‘123456‘ with grant option只適用于mysql8.0之前的版本…

C++虛繼承的概念

轉載&#xff1a;http://blog.csdn.net/crystal_avast/article/details/7678704 C中虛擬繼承的概念 為了解決從不同途徑繼承來的同名的數據成員在內存中有不同的拷貝造成數據不一致問題&#xff0c;將共同基類設置為虛基類。這時從不同的路徑繼承過來的同名數據成員在內存中就只…

數組名和取數組名的區別

先來個簡單的小案例 #include <stdio.h> #include <iostream>using namespace std;int main() {int a[10] { 0 };printf("%d\n", a);printf("%d\n", &a);printf("%d\n", a1);printf("%d\n", &a1);printf("…