大语言模型微调关键问题探讨

释放双眼,带上耳机,听听看~!
本文探讨了使用强大模型进行微调的关键问题,包括利用强大模型的输出结果来微调较弱模型的有效性,选择低成本上下文学习还是对模型进行微调,以及处理超过模型上下文限制的长文本问题。

    编者按:随着大语言模型(LLM)的迅速发展,越来越多团队希望针对特定领域进行模型微调。但是实践运用中总是存在一些困难,直接应用并不总是能达到理想效果。

    本文着重探讨了三个关键问题:

  • 利用强大模型(如ChatGPT)的输出结果来微调较弱模型是否有效?
  • 如何选择是采用低成本的上下文学习还是对模型进行微调?
  • 如何处理超过模型上下文限制的长文本,让模型理解并回答关于长文本的复杂问题?

    此篇文章探讨了构建特定垂直领域语言模型时需要考虑的关键因素,能够帮助读者在微调大语言模型时做出明智的决策。我们衷心期望本次内容分享能帮助更多团队高效地获得所需的垂直领域大模型。

    以下是译文,enjoy!

作者 | Sean Smith

编译 | 岳扬

🚢🚢🚢欢迎小伙伴们加入python.langchain.com/docs/module…

def get_similarity(seq_a: str, seq_b: str) -> Union[float, int]:
 """ 
    Make a similarity heuristic,
    here we use Jaccard similarity or IOU
 
    seq_a: First sequence to compare
    seq_b: Second sequence to compare
 
    Returns:
    Similarity score (float or int)
    """
 # Tokenize
    set_a = set(seq_a.split(' '))
    set_b = set(seq_b.split(' ')) 
 
 # Calculate IOU/Jaccard similarity
 return len(set_a.intersection(set_b)) / len(set_a.union(set_b))

def example_selector(examples: List[str], input: str, examples2use: int) -> List[str]:
 """ 
    Pseudo code for an example selector
 
    examples: List of training corpus
    input: Target sequence to translate
    examples2use: Number of examples to use
 
    Returns:
    List of selected examples
    """
    scores = [get_similarity(example, input) for example in examples]
    sorted_idx = [i for i, _ in sorted(enumerate(scores), key=lambda x: x[1], reverse=True)]
 return examples[sorted_idx[:examples2use]]

ExampleSelectors是一种prompt操作器,该工具允许我们在推理时动态地改变使用的示例。有许多启发式算法可以使用。上面我给出了一些伪代码,是想要告诉大家 LangChain 的选择器本质上是如何工作的。我在输入序列和示例序列之间使用了 Jaccard 相似度。(译者注:Jaccard 相似度是衡量两个集合的相似度一种指标,本质上是集合的交集与集合的并集的比例)

采用该种方法有两个主要优点。首先,可以根据给定的输入,有选择性地选择最相关的示例,从而使LLM 更高效的利用数据。这有别于为所有可观测结果(observations)静态加载几个示例的做法。如果通过托管服务进行调整,另二个优点是可以节约成本。截至目前,使用经过微调的Davinci模型的成本为每 1000 个token 0.12 美元。相比之下,使用instruct Davinci的价格为 0.02 美元,前者价格为后者的 500%!还不包括模型训练费用。

需要注意的是,正如一篇现已删除的博文[5]所透露的那样,由于OpenAI尚未使用LoRa或Adapters,这些价格后续可能会发生变化。尽管如此,由于必须为每个用户维护自定义的权重,微调模型的价格可能仍然会更高。此外,这还没有考虑到上下文中示例的成本。您的团队需要从成本和准确性等角度,去评估是上下文学习(ICL)还是微调(fine-tuning)对完成目标任务更有意义。

Takeaway:使用动态示例加载的上下文学习在某些场景下可以达到与微调相同的效果,相对成本会更低。

03 在进行最终的推理步骤之前,执行目标任务是否需要一个或多个中间步骤?

比方说,要求模型尝试回答关于长文档的复杂问题。这种任务一般都要求大语言模型具备良好的语言掌握能力和理解能力。这样又会引出一个问题:如果我们帮助语言模型将推理过程分解为多个子任务执行,类似于人类分析文档并按顺序执行任务,会怎么样呢?

大语言模型微调关键问题探讨

图摘自 Sun 等人的文章[4]

这正是微软公司的研究人员想要实现的目标,他们解决这一问题的方案是PEARL[4]。PEARL 是 Planning and Executing Actions for Reasoning over Long documents 的缩写,意为 “长文档推理的规划和操作执行”。这个通用框架主要分为三个步骤:

  • 行为挖掘(Action Mining) :首先,通过prompt让语言模型阅读文档,并提取可用于回答特定领域问题的可行行为。为了提取这些行为,语言模型通常会给出一些示例的行为方式。后续我将给出关于“行为action”的示例。

  • 规划生成(Plan Generation) :在生成一组用于目标任务的操作方案之后,需要要求LLM根据问题和上下文生成一系列需要按顺序执行的操作流程。LLM会提供一些其他目标任务的规划样例,以帮助构建高质量的操作流程规划。更多技术细节可以在论文中找到。

  • 执行规划(Plan Execution) :模型有了操作流程规划之后,将用户输入提供给模型并执行操作流程规划。

大语言模型微调关键问题探讨

行为示例,摘自 Sun 等人的文章[4]

在上述各个阶段之间,还有一些中间步骤被用来确保目标任务的执行效果质量。作者们设置了一个自纠正步骤(self-correction step),确保计划符合所需的格式。还有一个自完善步骤(self-refinement),用于确定此操作流程规划是否可以作为后续用于【规划生成】流程的小样本示例使用。

大语言模型微调关键问题探讨

摘自 Sun 等人的文章[4]的表格

在进行评估时,发现PEARL相较于其他GPT模型拥有明显的性能改进。于是可以得出结论,在某些情况下,将目标任务的解决方案划分为多个步骤可以较明显地帮助模型提升性能。

还有另一个情况,当上下文中的文档数量超过语言模型所支持的数量时,设置一些中间步骤也被证明是有利的。 目前,OpenAI使用的注意力机制的计算复杂度为O(n²),暂时还没有解决这一问题的具体方案[5]。因此,大家都对如何将上下文减少到尽可能最小的形式十分感兴趣。

对于不同的目标任务,有不同的处理方法。例如,如果目标任务完全围绕实体展开,就有机会提取相关实体及其相关属性。(译者注:在处理文本时,可以识别出文本中的特定实体(如人名、地点、组织等),并提取这些实体的相关属性(如年龄、地址、职位等)。通过这种方式,可以将文本中的信息转化为结构化的形式,使得对实体和属性的理解更加明确和系统化。这样可以为后续的任务提供更准确和有用的信息。)可以将这种方法看作是一种有损压缩,这种方法允许用户将更多上下文输入到 LLM 中。这一中间步骤的另一个好处是,可以将非结构化数据转换为结构化格式,这使得用户可以在不使用LLM的情况下也能进行明智的决策。下面是Fei等人的论文中展示的一个示例任务图表[6]。

大语言模型微调关键问题探讨

图摘自 Fei 等人发表的论文[6]

Takeaway:将目标任务分解成较小的子任务,有助于将较复杂的问题简化为更易管理的部分,还可以利用这些较小的任务来解决与模型限制相关的性能瓶颈问题。

04 结束语

以上是研究人员在 LLM 性能和效率这一新领域探索的一些总体思路。这并非微调模型时需要考虑的所有事项,却是一个很好的起点,可以给我们提供一些参考。

如需进一步了解,Hugging Face 发表的这篇有关 LLM 训练的文章[7]非常有趣,对于在特定领域的问题上探索模仿模型来说是一个很好的开始。

再次概括本文要点:

  • 由于任务的复杂程度不一,尝试用一个性能较弱的模型去模仿 GPT 或其他高级模型的输出可能导致模型性能不佳。
  • 使用动态示例加载的上下文学习在某些场景下可以达到与微调相同的效果,且成本较低。
  • 将目标任务分解成较小的子任务,有助于将较复杂的问题简化为更易管理的部分,还可以利用这些较小的任务来解决与模型Token限制相关的性能瓶颈问题。

END

参考资料

[1] Arnav Gudibande, Eric Wallace, Charlie Snell, Xinyang Geng, Hao Liu, Pieter Abbeel, Sergey Levine, & Dawn Song. (2023). The False Promise of Imitating Proprietary LLMs.

[2] Mukherjee, S., Mitra, A., Jawahar, G., Agarwal, S., Palangi, H., & Awadallah, A. (2023). Orca: Progressive Learning from Complex Explanation Traces of GPT-4. arXiv: Computation and Language.

[3] Damai Dai, Yutao Sun, Li Dong, Yaru Hao, Shuming Ma, Zhifang Sui, & Furu Wei. (2023). Why Can GPT Learn In-Context? Language Models Implicitly Perform Gradient Descent as Meta-Optimizers.

[4]Simeng Sun, Yang Liu, Shuohang Wang, Chenguang Zhu, & Mohit Iyyer. (2023). PEARL: Prompting Large Language Models to Plan and Execute Actions Over Long Documents.

[5] Habib, R.. (2023). OpenAI’s plans according to Sam Altman.

[6] Hao Fei , Fei Li , Chenliang Li , Shengqiong Wu , Jingye Li and Donghong Ji, (2022). Inheriting the Wisdom of Predecessors: A Multiplex Cascade Framework for Unifed Aspect-based Sentiment Analysis

[7] Fine-tuning 20B LLMs with RLHF on a 24GB consumer GPU (huggingface.co)

本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。

原文链接

towardsdatascience.com/thinking-ab…

🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

推荐系统基础:近邻指标与相似度度量

2023-11-26 6:30:14

AI教程

PP-OCRv4全面解读:飞桨AI套件团队重磅推出的最新OCR模型

2023-11-26 8:00:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索