Llama-2 7B-hf直接从输入提示中重复问题上下文,并以换行符截断

背景: 我正在尝试查询来自HuggingFace的Llama-2 7B(meta-llama/Llama-2-7b-hf)。我给它一个问题和上下文(我猜测大约200到1000个标记),并要求它根据上下文回答问题(上下文是从向量存储中通过相似性搜索检索的)。我遇到了两个问题:

  1. 答案结束后,直到达到max_new_tokens的剩余标记全部是换行符。或者它根本不生成任何文本,整个响应都是换行符。添加repetition_penalty为1.1或更高解决了无限换行符生成的问题,但无法得到完整的答案。
  2. 对于生成的答案,它们是从给定的上下文中逐字复制。这在repetition_penalty=1.1时仍然如此,而将重复惩罚设得太高会使答案变得毫无意义。

我只尝试过使用temperature=0.4temperature=0.8,但从我的尝试来看,调整温度和repetition_penalty都会导致上下文被复制或得到无意义的答案。

关于“上下文”的说明: 我使用存储在Chroma向量存储中的文档,相似性搜索在传递给Llama之前检索相关信息。

示例问题:我的查询是总结某个主题X。

query = "Summarize Topic X"

从向量存储中检索的上下文有3个来源,看起来像这样(我在向LLM查询时将来源格式化为用换行符分隔):

context = """When talking about Topic X, Scenario Y is always referred to. This is due to the relation ofTopic X is a broad topic which covers many aspects of life.No one knows when Topic X became a thing, its origin is unknown even to this day."""

然后,Llama-2的响应直接镜像了一段上下文,并且不包括其他部分的信息。此外,它在答案后产生了许多换行符。如果答案是100个标记,而max_new_tokens是150,我会有50个换行符。

response = "When talking about Topic X, Scenario Y is always referred to. This is due to the relation of \n\n\n\n"

我最大的问题之一是,除了复制一段上下文外,如果上下文在句子中间结束,LLM的响应也会在句子中间结束。

是否还有其他人遇到类似的问题(换行符问题或复制输入提示的一部分)?有人找到解决方案了吗?


回答:

这是像Llama这样的预训练基础模型常见的问题。

我的第一个想法是选择一个经过某种指令调整的模型,例如https://huggingface.co/meta-llama/Llama-2-7b-chat。指令调整影响模型可靠解决任务的能力,与基础模型不同,后者通常只是训练来预测下一个标记(这也是截断经常发生的原因)。

第二点,根据我的经验,使用与训练期间相同的提示格式也有帮助。你可以在源代码中看到Meta在训练和生成时使用的提示格式。这里有一个讨论线程关于这个话题。

最后,对于重复问题,在生成时使用Logits Processor有助于减少重复。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注