项目详情描述
在构建智能客服平台的过程中,需要智能客服具备回答与企业相关信息问题的能力,如 “公司的入职流程有哪些?”,由于要尽可能的保证智能客服接受与回答问题的泛化性,因此针对同一类问题,需要准备同义但多样的问题与答案去训练模型。在拟定了若干主要问题和答案后,使用 SimBERT 模型的 相似文本生成 能力,快速生成大量的同义多样问答对,极大地提高了训练语料数据集制作的效率,为智能客服系统提供了丰富的训练数据。
★ 问题分析
(1)智能客服系统需要处理用户提出的各种表达方式的相同问题,如针对 "公司入职流程" 问题,用户可能会问 "公司的入职流程有哪些?"、"怎样才能顺利入职?" 等不同表述的相似问句。
(2)传统的人工编写问答对方法效率低下,成本高昂,且难以覆盖用户可能提出的所有表达方式,导致智能客服系统的泛化能力不足。
(3)现有的通用问答数据集往往缺乏针对性,不能很好地贴合具体企业的实际情况和业务场景,需要定制化的数据集来提升智能客服的专业性和准确性。
(4)核心挑战在于如何高效地生成大量高质量的同义问答对,既要保证语义相似性,又要确保表达的多样性。
★ 解决方案
(1)采用 SimBERT 模型 作为核心技术方案:利用其强大的相似文本生成能力,基于少量种子问句自动生成大量同义表达。
(2)构建多领域训练语料库:通过 Python 爬虫技术 从百度知道等平台收集多个领域的问答数据,为模型训练提供丰富的语料基础。
(3)采用 BERT_base 预训练模型 进行 fine-tune,结合 随机采样生成策略 确保生成结果的多样性。
★ 实施过程
(1)数据收集阶段:制作了 22 个方向(旅游、游戏、科技、历史、生活等)、约 300 个关键语句,使用 Python 爬虫 技术爬取百度知道对于该关键语句检索出的推荐问答,经过简单筛选过滤后,最终获得 2.3w 个语句作为训练语料。
(2)模型配置阶段:使用 SimBERT 模型进行训练,模型层数设置为 12 层,隐藏层大小为 768,损失函数采用交叉熵损失,优化器选择 Adam 优化器。
(3)训练策略设置:解码器选用随机采样生成(random_sample)函数,每轮解码时从概率值 top(k) 里随机采样一个 token 用于生成,有效提升生成结果的多样性。
(4)模型训练执行:使用 BERT_base 进行 fine-tune,在 双卡 RTX3090 硬件环境下训练 100w 步,模型即具备了优秀的相似文本生成能力。
★ 优化过程
(1)数据质量优化:对爬取的原始数据进行多轮筛选和清洗,去除低质量问答对,确保训练语料的质量和相关性。
(2)生成策略优化:通过调整 top-k 采样参数和温度系数,在保证语义相似性的前提下最大化生成文本的多样性。
(3)模型性能调优:通过调整学习率、批次大小等超参数,以及采用学习率衰减策略,提升模型的收敛稳定性和生成质量。
★ 反思改进
(1)项目成功实现了相似文本的自动化生成,显著提升了智能客服训练数据的制作效率,为后续的客服系统优化奠定了坚实基础。
(2)在实际应用中发现,生成的文本质量与种子问句的质量密切相关,后续可考虑引入人工审核机制或质量评估模型来进一步提升生成文本的质量。
(3)未来改进方向:考虑引入更先进的预训练模型如 GPT 系列或 T5 模型;探索少样本学习技术减少对大量训练数据的依赖。
项目涉及技术
★ SimBERT 模型
SimBERT 模型基于 UniLM 模型 完成,自带文本生成能力。该模型巧妙地结合了 BERT 的双向编码能力 和 Seq2Seq 的文本生成能力,通过特殊的注意力机制设计,实现了在单一模型中同时完成文本理解和文本生成任务。
Seq2Seq 能力是指:用户输入一段文本,模型处理后,输出一段文本。该过程主要使用编码器和解码器来完成。编码器将输入的文本编码成固定大小的向量,解码器根据该向量通过自回归的方式来解码生成对应的文本。
核心创新点:SimBERT 通过构建前缀双向可见的注意力机制,赋予 BERT 模型 Seq2Seq 的能力,使其既能进行自然语言理解(NLU)任务,又能完成自然语言生成(NLG)任务。
★ UniLM 统一语言模型
(1)模型背景:UniLM 是微软在 2019.05 提出的融合 NLU(自然语言理解)和 NLG(自然语言生成)能力的 Transformer 模型,突破了传统模型只能处理单一任务的局限性。
(2)核心思想:通过构建前缀双向可见的注意力机制,赋予 BERT 模型 Seq2Seq 的能力,由此将 BERT 模型改造成可以处理 NLG(自然语言生成)任务的模型。
(3)技术实现:传统的 BERT 模型使用双向可见的注意力机制,对每个词来说,所有词都是可见的,主要用于 NLU 任务。UniLM 通过特殊的 Attention Mask 设计,使得输入部分采用双向注意力,输出部分采用单向注意力。
★ UniLM 注意力机制
(1)输入格式设计:
# 如输入语句是:“你想吃啥”,目标语句是:“白切鸡”。UniLM 模型将这两个语句拼接成一个:
[CLS] 你 想 吃 啥 [SEP] 白 切 鸡 [SEP]
# 然后接上如下的 Attention Mask:
(2)注意力机制分配:
[CLS] 你 想 吃 啥 [SEP]
# 这几个 token 之间是双向 Attention
白 切 鸡 [SEP]
# 这几个 token 是单向 Attention
# 因此可以递归地预测 白 切 鸡 [SEP] 这几个 token ,因此具备文本生成能力
(3)编码向量特性:
# 又由于 UniLM 的特殊 Attention Mask ,导致 [CLS] 你 想 吃 啥 [SEP] 这 6 个 token 只在它们之间相互做 Attention ,而跟 白 切 鸡 [SEP] 完全没关系。
# 这就意味着尽管后面拼接了 白 切 鸡 [SEP] ,但并不会影响到前 6 个编码向量。
# 即前 6 个编码向量等价于只有 [CLS] 你 想 吃 啥 [SEP] 时的编码结果,如果 [CLS] 的向量代表着句向量,那么它就是 你 想 吃 啥 的句向量,而不是加上 白 切 鸡 后的句向量。
(4)多任务学习能力:
# 由于这个特性,UniLM 在输入时随机加入一些 [MASK] ,使得:
# 输入部分可以做 BERT 的 MLM(Masked Language Modeling, 文本重建) 任务
# 输出部分可以做 Seq2Seq 任务
# MLM 任务增强了模型的 NLU(自然语言理解) 能力,Seq2Seq 任务增强了模型的 NLG(自然语言生成)能力。
★ SimBERT 训练数据
(1)数据格式设计:SimBERT 模型使用的训练语料数据是自行收集到的相似语句对,每条训练数据包括一条主语句和对应的若干相似语句列表:
# 语料结构格式如下(由 主语句"text" + 若干相似句"synonyms" 构成)
{
"text": "公积金是福利还是累赘",
"synonyms": ["公积金贷款,是福利还是鸡肋",
"住房公积金是工资,还是福利",
"公积金是社会保险还是福利?",
"住房公积金到底是福利还是什么?"]
}
(2)数据预处理策略:对收集到的原始数据进行去重、过滤、标准化等预处理操作,确保训练数据的质量和一致性。
★ SimBERT 损失函数设计
(1)复合损失函数:SimBERT 模型的损失函数分为两个主要部分:
Seq2Seq 任务损失:通过输入文本去预测对应相似文本的交叉熵损失
语义相似度任务损失:根据文本对应的 [CLS] 向量来计算相似度的分类损失
(2)损失函数公式:\text{SimBERT\_Loss} = \text{Seq2Seq\_Loss} + \lambda \cdot \text{相似句分类\_Loss},其中 λ 是平衡两个任务重要性的超参数。
(3)Seq2Seq 损失计算:\text{Seq2Seq\_Loss} = -\sum_{t=1}^{T} \log P(y_t | y_{<t}, x),其中 x 为输入序列,y 为目标序列,T 为目标序列长度。
(4)相似度分类损失:\text{相似句分类\_Loss} = -\sum_{i=1}^{N} \log \frac{\exp(\text{sim}(h_i, h_{pos})}{\sum_{j=1}^{N} \exp(\text{sim}(h_i, h_j))},其中h_i为第 i 个样本的 [CLS] 向量,h_{pos}为其对应的正样本向量。
★ BERT 预训练模型
(1)Transformer 架构:BERT 基于 Transformer 的 Encoder 结构,采用多头自注意力机制和前馈神经网络。
(2)双向编码机制:与传统的单向语言模型不同,BERT 通过 Masked Language Model(MLM)任务实现真正的双向编码。
(3)预训练任务:
MLM 任务:随机遮蔽输入中的部分 token,让模型预测被遮蔽的内容
NSP 任务:判断两个句子是否为连续的句子对
(4)Fine-tuning 策略:在预训练模型基础上,针对特定任务进行微调,通过较小的学习率和适当的训练轮数避免灾难性遗忘。
★ 文本生成解码
(1)贪心解码:每步选择概率最大的 token,速度快但可能陷入局部最优。
(2)束搜索(Beam Search) :维护 k 个候选序列,在每步扩展时保留概率最大的 k 个候选。
(3)随机采样生成:P(w_t) = \frac{\exp(z_t / \tau)}{\sum_{i} \exp(z_i / \tau)},其中 τ 为温度参数,控制生成的随机性。
(4)Top-k 采样:从概率最高的 k 个候选 token 中随机采样,平衡生成质量和多样性。
(5)Top-p(Nucleus)采样:动态选择累积概率达到 p 的最小候选集合进行采样。
★ 自然语言处理
(1)词嵌入技术:将离散的词汇映射到连续的向量空间,常用方法包括 Word2Vec、GloVe、FastText 等。
(2)序列建模:使用 RNN、LSTM、GRU 等循环神经网络或 Transformer 等注意力机制模型处理序列数据。
(3)注意力机制:\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V,其中 Q、K、V 分别为查询、键、值矩阵。
(4)位置编码:为 Transformer 模型添加位置信息,常用正弦余弦位置编码:
PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)
PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)
★ 模型评估与优化技术
(1)文本生成质量评估:
BLEU 分数:基于 n-gram 精确度的自动评估指标
ROUGE 分数:基于召回率的评估指标,常用于摘要任务
语义相似度:使用预训练模型计算生成文本与参考文本的语义相似度
(2)模型优化技术:
梯度裁剪:防止梯度爆炸,稳定训练过程
学习率调度:采用余弦退火、线性衰减等策略动态调整学习率
正则化技术:Dropout、权重衰减等防止过拟合
(3)分布式训练:
数据并行:将批次数据分布到多个 GPU 上并行计算
模型并行:将大模型的不同部分分布到不同设备上
梯度累积:在内存受限情况下模拟大批次训练效果
评论区