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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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