今天是2023年10月20日,星期五,北京,天气晴。
我们再来关注一些有趣的工作,一个是新的向量化模型ANGLE,另一个是AgentTuning:面向Aent应用的数据生成。
前者指出了一个余弦函数饱和区问题,后者提供了一个agnet数据的生成路线,很有意思,供大家一起参考。
一、新的向量化模型ANGLE
早期的研究证明了用n-gram嵌入增强word2vec的功效,在文本嵌入方面取得了很好的效果。
最近,BERT-flow引入了一种基于流的方法,将BERT嵌入映射到标准高斯潜空间。另一方面,BERT-whitening(将该操作应用于BERT嵌入,以增强文本嵌入。
有监督的文本嵌入通常比无监督的文本嵌入表现更好。各种研究都有效地利用了监督数据集来提高文本嵌入的学习效果,例如,引入一种利用监督自然语言推理(NLI)任务的方法。
USE以transformer为骨干,结合SNLI数据集来增强非监督训练,从而提高了性能。此外,SBERT通过将BERT与连体架构相结合,增强了文本嵌入。也有使用提示工程来改进文本嵌入。然而,大多数现有模型都优化了余弦相似度,却忽视了余弦函数饱和区的负面影响。
针对这一问题,《ANGLE-OPTIMIZED TEXT EMBEDDINGS》地址:https://arxiv.org/pdf/2309.12871.pdf提出了一种新颖的角度优化文本嵌入模型,以提高文本嵌入的质量。AnglE的核心思想是在复杂空间中引入角度优化。
模型效果:
模型安装及调用
python -m pip install -U angle-emb
模型调用
from angle_emb import AnglE
angle = AnglE.from_pretrained(‘NousResearch/Llama-2-7b-hf’, pretrained_lora_path=‘SeanLee97/angle-llama-7b-nli-v2’)
angle.set_prompt()
print(‘prompt:’, angle.prompt)
vec = angle.encode({‘text’: ‘hello world’}, to_numpy=True)
print(vec)
vecs = angle.encode([{‘text’: ‘hello world1’}, {‘text’: ‘hello world2’}], to_numpy=True)
print(vecs)
地址: github.com/SeanLee97/AnglE
二、AgentTuning:面向Aent应用的数据生成
开放式大型语言模型(LLM)在各种任务中表现出色,极大地推动了LLM的发展。
然而,在作为代理处理现实世界中的复杂任务时,它们远不如ChatGPT和GPT-4等商业模型。这些代理任务采用LLM作为中央控制器,负责规划、记忆和工具使用,因此需要细粒度的提示方法和稳健的LLM来实现令人满意的性能。
虽然已经提出了许多提示方法来完成特定的代理任务,但缺乏在不影响LLMs一般能力的前提下提高其代理能力的研究。
《AgentTuning: Enabling Generalized Agent Abilities for LLMs》,地址https://arxiv.org/abs/2310.12823这一工作提出了一种简单而通用的方法–AgentTuning,用于提高LLM的代理能力,同时保持其一般LLM能力。
整体思路如下:
值得注意的是,构建了包含高质量交互过程的轻量级指令调整数据集AgentInstruct,数据样例如下
我们重点来看看微调数据如何构建:构建AgentInstruct包括三个主要阶段:指令构建、过程交互(Task Derivation)和过程过滤。
这一过程完全使用GPT-3.5(gpt-3.5-turbo-0613)和GPT-4(gpt-4-0613)自动完成,因此该方法可以轻松扩展到新的代理任务。
首先,指令构建,为六项代理任务构建了AgentInstruct,包括AlfWorld、Web-Shop、Mind2Web、知识图谱、操作系统和数据库,代表了现实世界中相对容易收集指令的各种场景。
如表1所示,如果某个任务(如ALFWorld、WebShop、Mind2Web和知识图谱)有训练集,直接将训练分割用于后续阶段,进行过程交互和过滤。对于没有训练集的操作系统和数据库任务,利用”任务衍生和self-insutruct”来构建相应的指令。
Task Derivation,对于与广泛研究过的场景相关的代理任务,直接从类似的数据集中构建指令。为了构建数据库(DB)任务的指令,从只支持SELECT的数据库基准BIRD中推导出指令,共进行了两种任务推导。
首先,使用每个BIRD子任务中的问题和参考SQL语句构建一个行程。然后使用参考SQL语句查询数据库,以获得数据库的输出,并将其作为代理提交的答案。
最后,要求GPT-4根据上述信息填写代理的thought部分。
self-instruct,对于操作系统(OS)任务,首先提示GPT-4提出一些与操作系统相关的任务,并附上任务说明、参考解决方案和评估脚本。
然后向另一个GPT-4实例(求解器)提示任务并收集其过程。任务完成后,运行参考解决方案,并使用评估脚本将其结果与求解器GPT-4的结果进行比较。
对于数据库任务,由于BIRD只包含SELECT数据,可以构建其他类型的数据库操作(INSERT、UPDATE和DELETE)。
其次,过程交互。 在构建了初始指令后,使用GPT-4(gpt-4-0613)作为过程交互的agent。交互过程交互过程有两个主要部分。首先,给模型一个任务说明和一个成功的zeroshot示例。然后,开始实际交互。向模型提供当前指令和必要信息。
根据这些信息和之前的反馈,模型形成想法并采取行动。然后,环境提供反馈,包括可能的变化或新信息。如此循环往复,直到模型实现其目标或达到其token极限。
如果模型连续三次重复相同的输出,认为它是重复失败。
如果模型的输出格式是错误的,会使用BLEU指标将其与所有可能的行动选择进行比较,并挑选最接近的匹配作为模型在该步骤中的行动。
鉴于CoT推理思维链(CoT)方法通过一步步的推理过程大大增强了LLM的推理能力,采用ReAct作为推理框架,在产生最终行动之前输出CoT解释(称为思维)。
因此,收集到的交互过程中的每个动作都附有详细的解释过程,从而使模型能够学习到导致该动作的推理过程。对于使用任务推导生成的不带想法的过程,我们使用GPT-4对其进行想法补充,以便与ReAct提示保持一致。
最后是,过程过滤。 为确保数据质量,对其交互过程进行了严格筛选。每个交互过程都会获得奖励r,可以根据奖励自动选择高质量的过程。除Mind2Web外,根据最终奖励r=1(表示完全正确)过滤所有任务的过程。
由于Mind2Web任务难度较大,使用了r≥32的阈值,以确保获得足够数量的过程。
在表2中通过对7B尺度的过滤过程和未过滤过程进行微调,证明了过滤策略的有效性。与根据过滤过程训练的模型相比,根据未过滤过程训练的模型在”保持”和”退出”任务中的表现都要差得多,这凸显了数据质量比数据数量对特工任务的重要性。
通过将AgentInstruct与来自通用领域的开源指令相结合,采用了混合指令调整策略。
AgentTuning被用于对Llama2系列进行指令调整,最终产生了AgentLM。
该工作引入了6个”保持”任务和6个”退出”任务进行综合评估,涵盖了现实世界的各种场景。Weight-1表示计算总分时任务的权重(参见第3.1节)。”#Inst.”表示任务的查询样本数。”SR”代表成功率。
该工作评估结果表明,AgentTuning可以在不影响一般能力的情况下实现LLM的代理能力。
地址:https://github.com/THUDM/AgentTuning开放了AgentInstruct和AgentLM-7B、13B和70B模型的源代码。
总结
本文主要介绍了两个工作,一个是新的向量化模型ANGLE,另一个是AgentTuning:面向Aent应用的数据生成。
感兴趣的可以多关注数据构成的部分,供大家一起参考。
参考文献
1、github.com/SeanLee97/AnglE
2、https://github.com/THUDM/AgentTuning
3、https://arxiv.org/pdf/2309.12871.pdf
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。