来来来,继续读文章了,今天这个是meta的研究员们做的一个关于如何减少LLM得出幻觉信息的工作,23年底发表。文章链接:https://arxiv.org/abs/2309.11495
首先,这个工作所面向的LLM的问答任务,是list-based questions或者a longform generation of multiple freeform sentences,可以简单看成所得答案应该是一个列表答案来组成,看这种情境下的问答,咱们该怎么去减少幻觉的情况。
作者是这么说的:
The benchmarks we use range from list-based questions where the required answer is a set of entities, to where the answer is a longform generation of multiple freeform sentences.
文章使用的实验数据有:WikiData,Wiki-Category List,MULTISPANQA和LONGFORM GENERATION OF BIOGRAPHIES。
WikiData,作者的问题是这么设计的:Who are some [Profession]s who were born in [City]? 比如,Who are some politicians who were born in Boston?这些问题的答案是一列实体能够通过wikidata获取得到。
Wiki-Category List,用的是2023年一篇paper给出的QUEST dataset(Chaitanya Malaviya, Peter Shaw, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. Quest: A retrieval dataset of entity-seeking queries with implicit set operations. arXiv preprint arXiv:2305.11694, 2023.),这个数据集里包含了一些维基百科的类目列表,因此,作者将这些类目名字转化为对应的问题,即Name some XXXXX,比如Name some Mexican animated horror films or Name some Endemic orchids of Vietnam。
MULTISPANQA,用的是2022年一篇paper给出的MultiSpanQA dataset(Chaitanya Malaviya, Peter Shaw, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. Quest: A retrieval dataset of entity-seeking queries with implicit set operations. arXiv preprint arXiv:2305.11694, 2023.),一个问题里包括多个独立答案,比如Q:Who invented the first printing press and in what year?, A: Johannes Gutenberg, 1450.
LONGFORM GENERATION OF BIOGRAPHIES,即利用LLM给出一个人的简介,prompt本身很简单: Tell me a bio of <entity>.
这篇文章的算法机制示例图非常给力,因此我们可以直接看图:
首先,举个🌰,作者让LLM回答:请列举几个出生在纽约的政治家。LLM确实像模像样得给出一个答案列表:希拉里克林顿、川普等等等。然后论文作者根据给出的答案,生成一批需要再次确认的问题,即希拉里克林顿在哪里出生?川普在哪里出生?等等。这个时候LLM就会给出更加正确以及贴近事实的答案了。通过这些确认问题,相当于把LLM最初的答案列表确认了一遍,以返回最终答案。
作者把Chain of Verification的主要步骤分成了四步:
首先,就是利用LLM根据所给query生成答案。
然后,确认咱的verification plan,根据这个问题答案,需要生成一些需要确认的问题(which could help to self-analyze)。
接着,执行确认问题,然后看确认问题得到的答案和最开始的答案是否连贯或者有不一样的地方。
最后,根据确认问题的答案和初始答案之间的关系,给出最终的response。
其中,1、2、4步都是可以通过single prompt实现的,第3步则是需要两步,先execute verification,然后再判断两次的答案之间的关系,prompt格式如下(文章的prompt示例都给出来了哈,在附录部分,大家可以去看看,拿来用用) :
最后的最后,相比于直接让LLM给出多个选项,感觉这个工作就相当于是,让LLM给出多个选项+让LLM单独确认每个选项,最后得到答案的准确率确实能够更高哈。