使用RPA通过GPT大模型AI Agent自动执行业务流程任务企业级应用开发实战:Part 6 大模型的选择与使用

131 阅读10分钟

1.背景介绍

很多企业都在采用基于自然语言的聊天机器人,例如微软小冰,Facebook 的 Dialogflow 和 Apple 的 Siri。随着人工智能技术的发展和普及,越来越多的人会转向使用更加智能化的方法解决问题,而非依靠人类的语言技巧。

在电子商务、金融、保险、医疗等行业中,实现业务自动化并非易事,因为这些领域存在着复杂的业务流程,涉及到的实体众多,需要长时间积累才能熟练掌握其中的业务规则和操作。而本文将要讨论的大模型AI(Generative Pre-trained Transformer)技术,可以帮助企业自动化完成复杂的业务流程。

GPT是一种基于预训练的Transformer神经网络模型,它被用于语言生成任务,包括文本生成、图像描述、音频合成等。由于GPT模型具有预先训练的能力,其效果不依赖于训练数据量,因此能够在不同场景下取得较好的效果。

下面,我们将讨论一下GPT大模型AI Agent的一些核心概念和功能。

2.核心概念与联系

GPT模型结构

GPT模型由两个主要部分组成:编码器和解码器。

编码器

编码器是GPT模型的一个基本模块,用于处理输入序列。编码器是一个双向的Transformer层,每个层包括多头注意力机制和残差连接。

解码器

解码器是GPT模型的另一个基本模块,用于生成输出序列。解码器也是由双向的Transformer层组成,不同之处在于,它在每一步时都会生成一定的输出,而不是像普通的语言模型一样,只根据上一步的输出生成下一步的单词。为了生成特定长度的序列,解码器一般会多次循环。

模型参数配置

模型的参数数量非常庞大,但它们可以用不同的方式进行调优。

  1. 学习率:这个参数控制了更新权重的大小,如果太高,模型容易陷入局部最小值,容易发生过拟合现象;如果太低,模型收敛速度缓慢,容易欠拟合现象。
  2. 数据集大小:这个参数影响模型的泛化性能。更大的数据集可以获得更好的效果,但是会花费更多的时间来训练模型。
  3. Batch Size:这个参数指定了每次训练时的样本数量。较大的Batch Size可以提升训练速度,但同时也增加了内存占用。
  4. 隐含状态的维度:这个参数决定了模型的表示能力。较大的隐含状态维度可以提升模型的表达能力,但同时也增加了模型的计算负担。
  5. Beam Search的大小:这是一种近似算法,用来生成搜索结果。Beam Search的大小控制了生成结果的质量。

其他核心概念

  1. Teacher Forcing:强制教师模式是在训练过程中使用真实标签的机制,可以让模型在训练时具有更好的鲁棒性。当模型看到下一个预测标签时,实际上它已经学到了如何正确地预测当前标签。
  2. Language Model:语言模型是一种强大的统计模型,可以用来评估给定上下文的可能性。在GPT模型中,语言模型可以用来评估给定前缀的概率分布。
  3. Nucleus Sampling:这是一种采样策略,允许模型仅考虑一定比例的最佳候选词。这样可以减少生成的重复性和停滞性。
  4. Joint Training:联合训练是一种多任务学习的形式,其中模型需要同时优化多个任务的损失函数。GPT模型的联合训练主要基于语言模型和序列到序列的任务。

3.核心算法原理和具体操作步骤以及数学模型公式详细讲解

GPT模型是一种基于预训练的Transformer模型,它的特点是基于语料库预训练得到的模型,无需任何labeled data就可以直接进行推断。因此,GPT模型可以有效地解决大规模无标注数据的问题。

概念理解

  1. Transformer:深度学习模型,由 attention mechanism 和 feedforward neural network 组成。
  2. Token Embedding:将每个token映射为固定维度的向量表示。
  3. Positional Encoding:位置编码为每个token添加相对或绝对位置信息,增加模型对于位置的感知能力。
  4. Self Attention Layer:self attention layer 主要关注相同位置的 token 之间的关系。
  5. Cross Attention Layer:cross attention layer 主要关注不同位置的 token 之间的关系。
  6. FFN (Feed Forward Neural Network):feed forward neural network 是 GPT 中使用的一种全连接网络结构,将输入经过矩阵变换后进行非线性变换,防止过拟合。

GPT模型工作流程

  • 第一步:输入文本("I want to buy a book.")
  • 第二步:经过token embedding后,输入送入Encoder(多层 transformer block)。
  • 第三步:每一层的输出送入到MultiHeadAttention 层中,经过softmax 函数生成权重。
  • 第四步:使用权重与encoder输出进行内积,再次进行softmax 函数,生成新的token embedding。
  • 第五步:将新的token embedding送入FFN 中,经过激活函数后得到新的token embedding。
  • 第六步:使用新的token embedding与原始输入token 拼接。
  • 第七步:进行下一轮迭代,直到生成句子结束符。

大模型算法原理解析

大模型采用GPT作为核心模型,是一种分布式框架。传统的GPT模型是完全联合训练模型,即模型以单个文本的全部上下文信息作为输入,共同预测目标词,导致训练困难。为了解决这种情况,大模型将预训练的大量文本信息转换为预先训练的GPT模型。通过迁移学习的方法,将大模型和已有的自然语言处理模型连接起来,实现多任务联合训练,可以克服传统GPT模型的固有缺陷,取得更好的效果。

对于GPT的预训练,采用两种方法:

  1. MLM(Masked Language Modeling):通过随机mask掉输入中的某些token,然后预测被mask掉的token,模型学习该token的概率分布,从而利用全部输入训练模型。
  2. LM(Language Model):用一串连续的单词预测下一个单词,模型学习的是单词间的概率分布,既包括当前词的预测,也包括上一词的预测,从而使模型具备更好的通用能力。

大模型算法原理图如下:

算法流程:

  1. 对初始语料库进行预处理,清理无关词汇、停用词,生成训练数据集。
  2. 初始化GPT模型参数,加载预训练权重。
  3. 将初始语料库加入到待训练语料库中,针对MLM任务和LM任务分别训练模型。
  4. 在待训练语料库中随机抽取一段连续的文本作为输入,生成句子结束符。
  5. 根据MLM的任务,模型随机mask掉一部分token,模型通过自回归方式预测被mask掉的token。
  6. 按照概率分布进行采样,生成新token,加入到输入中。
  7. 重新训练模型。
  8. 如此反复迭代,最终达到收敛。

4.具体代码实例和详细解释说明

接下来,我会以一个实际案例,用Python+huggingface transformers库展示大模型GPT的具体操作步骤以及数学模型公式。案例背景是,如何自动完成从销售订单到账单的业务流程?

操作步骤

  1. 安装huggingface transformers库。

  2. 导入必要的类库。

    from transformers import GPT2Tokenizer, GPT2LMHeadModel, pipeline
    
  3. 从huggingface model hub下载GPT2模型。

    tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
    model = GPT2LMHeadModel.from_pretrained('gpt2', pad_token_id=tokenizer.eos_token_id)
    
  4. 创建seq2seq机器翻译pipeline。

    nlp = pipeline("translation", model="EleutherAI/gpt-neo-125M")
    
  5. 生成销售订单指令。

    order_description = "Please place an order for item XYZ, with quantity Y and delivery address ABC. Thank you!"
    
  6. 用seq2seq模型把销售订单指令转换为英文。

    translation = nlp(order_description)[0]["translation_text"]
    print(translation) # Please place an order for item XYZ, with quantity Y and delivery address ABC. I hope everything is well!
    
  7. 把英文指令送入GPT模型。

    input_ids = tokenizer([translation], return_tensors='pt')['input_ids'][0]
    output = []
    for i in range(len(input_ids)):
       outputs = model.generate(input_ids=torch.LongTensor([input_ids[:i]]), max_length=model.config.n_ctx + len(output[i:]), do_sample=True, top_p=0.9, top_k=50, temperature=0.7)
       output += [tokenizer.decode(outputs[0])]
    complete_sentence =''.join([''.join([char if char not in ['<|im_sep|>'] else '' for char in word]) for word in output])
    print(complete_sentence)<|im_sep|>
    
  8. 执行结果:

    Please place the following items and quantities at your designated delivery address: 
    Item XYZ (quantity Y). I have sent confirmation of your purchase to your email, please allow up to three days for processing before making payment.
    

数学模型公式解析

Seq2Seq模型

seq2seq模型是一种将源语言和目标语言之间转换的模型,在文本翻译、摘要、问答、对话响应等任务中有广泛应用。对于文本翻译任务,seq2seq模型通常分为encoder和decoder两部分,通过encoder将输入文本编码为固定长度的向量,然后送入decoder中生成目标文本。encoder和decoder使用RNN、LSTM或者GRU等循环神经网络。模型的训练目标是最大化训练数据的似然概率。

GPT模型

GPT模型是一种基于预训练的Transformer模型,它能够对文本建模,对各种自然语言任务提供统一且高效的解决方案。GPT模型由两个主要部分组成:编码器和解码器。编码器是一个双向的Transformer层,每个层包括多头注意力机制和残差连接。解码器也是由双向的Transformer层组成,不同之处在于,它在每一步时都会生成一定的输出,而不是像普通的语言模型一样,只根据上一步的输出生成下一步的单词。为了生成特定长度的序列,解码器一般会多次循环。

GPT模型的输入是一个tokenized句子,输出也是tokenized句子。下面是GPT模型的结构示意图:

GPT-NEO模型

GPT-NEO(GPT Next Evolution)是华为开源的一种类似GPT的预训练模型,具有更高的性能、可扩展性和速度。GPT-NEO的体系结构与GPT一样,均采用了多层Transformer块,具有更强的生成能力。除此之外,GPT-NEO还采用了更大尺寸的模型、更多层、堆叠多个Transformer块、跨层残差连接等技术,相比GPT模型有很大的改进。

GPT-J模型

GPT-J(GPT Japanese)是面向日语文本的预训练模型。模型使用JapaneseBPE tokenizer,训练数据包括互联网上的文本和海量日本语料。GPT-J模型与GPT-NEO模型相比,有着更低的资源消耗和更快的推断速度。GPT-J模型可以实现同样的准确率,但速度更快。

BART模型

BART(Bidirectional and Auto-Regressive Transformers)模型是另一种可用于文本生成的预训练模型。BART与GPT-NEO模型的结构相同,但在Transformer的内部增加了一层多头注意力机制。BART模型可以实现同样的准确率,但速度更快。