赞
踩
针对AI解题业务场景,靠着ToT、CoT等提示词规则去引导模型的输出答案,一定程度相比Zero-shot解答质量更高(正确率、格式)等。但是针对某些测试CASE,LLM仍然不能输出期望的正确结果,将AI解题应用生产仍有距离,因此需要另寻其他方案提高LLM在AI解题业务场景的可应用性。
提升LLM针对某业务应用能力常见的方案有:模型微调、提示词工程、检索增强生成**RAG(Retrieval-Augmented Generation)**即从外部数据库获取额外信息辅助模型生成内容,比如AI解题场景可以利用题库已经生产的试题答案、解析辅助LLM生成内容,特别是对知识密集型任务,可以一定程度提升LLM在某场景下能力。
GPT 模型的基本原则是通过语言建模将世界知识压缩到仅解码器 (decoder-only) 的 Transformer 模型中,这样它就可以恢复(或记忆)世界知识的语义,并充当通用任务求解器。
Transformer 是一种基于注意力机制(Attention Mechanism)的深度学习模型,它在自然语言处理(NLP)领域取得了革命性的进展。该模型最初由 Vaswani 等人在 2017 年的论文《Attention Is All You Need》中提出。与传统的循环神经网络(RNN)和卷积神经网络(CNN)不同,Transformer 完全依赖于注意力机制来处理序列数据,这使得它在处理长距离依赖问题上具有显著优势,并且能够进行高效的并行计算。
**Transformer 模型的核心思想是通过自注意力(Self-Attention)机制来捕捉序列内部不同位置之间的依赖关系。简单理解就是理解语意,**这种机制允许模型在计算当前位置的表示时,同时考虑序列中其他位置的信息,从而更好地理解序列的全局结构。
Transformer 模型主要由两大部分组成:编码器(Encoder)和解码器(Decoder)。
Transformer 模型的这些特性使其在机器翻译、文本摘要、问答系统等多个 NLP 任务中取得了优异的表现,并且催生了一系列基于 Transformer 的预训练模型,如 BERT、GPT等。
【论文解读】Transformer: Attention is all you need
from transformers import GPT2Tokenizer, GPT2LMHeadModel # 加载预训练模型和分词器 tokenizer = GPT2Tokenizer.from_pretrained('gpt2') model = GPT2LMHeadModel.from_pretrained('gpt2') # 编码输入文本 input_text = "The quick brown fox jumps over the lazy dog" input_ids = tokenizer.encode(input_text, return_tensors='pt') # 生成文本 output = model.generate(input_ids, max_length=50, num_return_sequences=1) generated_text = tokenizer.decode(output[0], skip_special_tokens=True) print(generated_text)
步骤 1: 安装必要的库,确保你已经安装了transformers和torch库。如果没有安装,可以通过以下命令安装:
pip install transformers torch
步骤 2: 准备聊天数据,为了微调模型,你需要准备聊天数据。这里我们假设你已经有了一个格式化的数据集,其中包含了输入文本和对应的回复。为了简化示例,我们将直接在代码中定义一小部分数据。
# 示例聊天数据
chat_data = [
{"input": "Hello, how are you?", "reply": "I am fine, thank you."},
{"input": "What is your name?", "reply": "I am a chatbot."},
# 添加更多数据...
]
步骤 3: 加载预训练模型和分词器,我们将使用GPT-2作为基础模型进行微调。
from transformers import GPT2Tokenizer, GPT2LMHeadModel, AdamW, get_linear_schedule_with_warmup
# 加载预训练的模型和分词器
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')
步骤 4: 数据预处理,将聊天数据转换为模型可以理解的格式。
# 编码聊天数据
inputs = [tokenizer.encode(f"input: {data['input']} reply:", add_special_tokens=True) for data in chat_data]
replies = [tokenizer.encode(data['reply'], add_special_tokens=True) for data in chat_data]
步骤 5: 微调模型,接下来,我们将在聊天数据上微调模型。这里只展示了一个非常简化的训练循环,实际应用中可能需要更复杂的数据处理和训练逻辑。
import torch # 简单的训练循环 optimizer = AdamW(model.parameters(), lr=5e-5) for epoch in range(1): # 假设只训练1个epoch model.train() for input_ids, reply_ids in zip(inputs, replies): optimizer.zero_grad() # 将输入和回复拼接起来作为模型的输入 input_ids = torch.tensor(input_ids).unsqueeze(0) reply_ids = torch.tensor(reply_ids).unsqueeze(0) inputs_and_reply = torch.cat((input_ids, reply_ids), dim=1) outputs = model(inputs_and_reply, labels=inputs_and_reply) loss = outputs.loss loss.backward() optimizer.step() print(f"Epoch {epoch}, Loss: {loss.item()}")
步骤 6: 使用微调后的模型,微调完成后,你可以使用微调后的模型进行聊天。
# 使用微调后的模型生成回复
input_text = "Hello, how are you?"
input_ids = tokenizer.encode(f"input: {input_text} reply:", return_tensors='pt')
output = model.generate(input_ids, max_length=50, num_return_sequences=1)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
Transformer架构核心就是自注意力机制,自注意力机制通过计算每个单词对句子中其他所有单词的注意力得分来工作。这些得分表示在处理当前单词时,其他单词的重要性程度。然后,这些得分被用来生成加权的单词表示,这些表示捕获了整个句子的上下文信息。
对于预训练模型Bert、ChatGPT等模型,采用自监督学习进行模型预训练,就是不需要额外的数据标注,通过借助辅助的训练任务,比如辅助任务(Pretext Task)来从数据本身学习有用的特征表示。自监督学习的关键在于设计这样的辅助任务,使得模型能够从未标注的数据中学习到有用的信息。
总的来说,自注意力机制为自监督学习提供了强大的工具,使得模型能够在无监督的条件下学习到有用的特征表示,这对于提高模型的泛化能力和解决标注数据稀缺的问题具有重要意义。
大型语言模型(LLM)相较于传统的语言模型具有更强大的能力,然而在某些情况下,它们仍可能无法提供准确的答案。为了解决大型语言模型在生成文本时面临的一系列挑战,提高模型的性能和输出质量,研究人员提出了一种新的模型架构:检索增强生成(RAG, Retrieval-Augmented Generation)。该架构巧妙地整合了从庞大知识库中检索到的相关信息,并以此为基础,指导大型语言模型生成更为精准的答案,从而显著提升了回答的准确性与深度。
而RAG是解决上述问题的一套有效方案。
在使用未进行微调的ChatGPT4 + 系列提示词规则优化后,对于英语学科的单选、翻译、阅读理解等解题质量(解答正确率、知识范围)不能满足直接投入AI解题生产(目前教研挑选的少量CASE测评正确率普遍在95%以上,具有片面、随机性)
目前提示词规则运用了系列规则,如易错题IoT、提示词思维树ToT等,准确率一定提升,仍面临的问题
另基本可以得出结论仅靠提示词规则已经无法再提高模型的应用能力。
出现解答试题错误的一种原因就是LLM预训练的知识(记忆)范围不能很好的涉及某些试题、知识点。
针对这种原因以及易错题IoT目前问题,可以考虑运用现有题库利用RAG框架进行检索增强生成,即搜索知识点 or已经正确生产的相似题 相关知识结合代解答的试题传给LLM让其解答,拓展LLM的知识(记忆)以及一些思维思考规则,提高模型能解题场景应用能力。
需要学习RAG相关知识,可行性研究,设计使用架构,实验测评等。
在RAG(Retrieval Augmented Generation,检索增强生成)方面词向量的优势主要有两点:-
论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (知识密集型 NLP 任务的检索增强生成)作者们探讨了如何通过结合预训练的语言模型和非参数记忆(即检索机制)来提高自然语言处理(NLP)任务的性能,特别是在需要大量知识密集型任务中。
预训练的神经语言模型已经显示出从数据中学习大量深入知识的能力,但这些模型无法轻松扩展或修改它们的记忆,也不能直接提供对其预测的洞察,有时还可能产生“幻觉”。混合模型结合了参数记忆和非参数(即基于检索的)记忆,可以解决一些问题,因为知识可以直接修改和扩展,访问的知识可以被检查和解释。
作者在多种知识密集型任务中进行了RAG实验,包括开放域问答、抽象问答生成、Jeopardy问题生成和事实验证。RAG在开放域问答任务上取得了新的最先进水平,并在生成任务中表现出更好的性能。
RAG框架,RAG在LLM应用场景中分为
优化高效和准确的检索,实现高效而准确的搜索设计两部分优化,文档块大小(Document Chunk Size)优化和向量模型(Embedding Models)优化,而考虑到RAG的使用者未必有能力/资源进行模型优化,所以可以着重关注文档大小优化部分。
文中阐述的内容大致如下:
较小的文档块可以提高信息检索的精确度,但可能丢失上下文;较大的块提供更多上下文,但可能包含不相关信息。使用者可以根据内容复杂度或查询性质,动态调整块的大小。并通过不同块大小的测试,找到最佳平衡点。
第4节还提到用**查询重写(Query Rewrite)和向量转换(Embedding Transformation)**来对齐用户查询和文档的语义空间,以及使用监督训练(Supervised Training)让检索器的输出与大型语言模型的偏好相对齐,想了解细节的可以阅读原文。
优化生成器,生成器决定了最终呈现给用户的答案,文中也给出一些优化的方案。检索得到相应信息后,在提交至生成器之前需要进行后检索处理(Post-retrieval Processing),指的是进一步处理、过滤或优化检索器从大型文档数据库中检索到的相关信息。然后再进行信息压缩(Information Compression)和结果重排(Result Rerank)。这一过程的主要目的是提高检索结果的质量,以更好地满足用户需求或后续任务。比如减轻上下文长度限制和对冗余信息的易感性。
论文 《A Guide on 12 Tuning Strategies for Production-Ready RAG Applications》towardsdatascience.com/a-guide-on-12-tuning-strategies-for-production-ready-rag-applications-7ca646833439 用于生产就绪RAG应用的12种调优策略指南,论文提供优化思路,主要分为构建RAG管道、查询搜索阶段。
在RAG管道的摄取阶段,主要关注的是数据的准备和处理,以及如何有效地存储和索引数据。
在查询搜索阶段,推理阶段涉及检索和生成过程,主要关注如何改进检索结果的相关性和生成响应的质量。
论文 《Improving Retrieval Performance in RAG Pipelines with Hybrid Search》 主要讨论了如何通过结合传统的基于关键词的搜索和当下流行的向量搜索来找到更相关的搜索结果,以提高RAG管道的性能。在RAG管道的开发中,达到初步的80%性能相对容易,但要实现剩余的20%以达到生产就绪状态则颇具挑战。作者强调,改进RAG管道的检索组件是一个常见的主题,其中**混合搜索(Hybrid Search)**是一个重要的策略。
混合搜索的概念
Hybrid search is a search technique that combines two or more search algorithms to improve the relevance of search results. Although it is not defined which algorithms are combined, hybrid search most commonly refers to the combination of traditional keyword-based search and modern vector search.
混合搜索是一种搜索技术,它结合了两种或多种搜索算法,以提高搜索结果的相关性。虽然没有定义组合哪些算法,但混合搜索通常是指传统的基于关键字的搜索和现代矢量搜索的组合。
Traditionally, keyword-based search was the obvious choice for search engines. But with the advent of Machine Learning (ML) algorithms, vector embeddings enabled a new search technique — called vector or semantic search — that allowed us to search across data semantically. However, both search techniques have essential tradeoffs to consider:
传统上,基于关键字的搜索是搜索引擎的首选。但是随着机器学习(ML)算法的出现,向量嵌入启用了一种新的搜索技术-称为向量或语义搜索-允许我们在语义上搜索数据。然而,这两种搜索技术都有必要考虑的权衡:
- Keyword-based search: While its exact keyword-matching capabilities are beneficial for specific terms, such as product names or industry jargon, it is sensitive to typos and synonyms, which lead it to miss important context.基于关键字的搜索:虽然其精确的关键词匹配功能对特定术语(如产品名称或行业术语)是有益的,但它对错别字和同义词很敏感,这导致它错过了重要的上下文。
- Vector or semantic search: While its semantic search capabilities allow multi-lingual and multi-modal search based on the data’s semantic meaning and make it robust to typos, it can miss essential keywords. Additionally, it depends on the quality of the generated vector embeddings and is sensitive to out-of-domain terms.基于矢量或语义搜索:虽然它的语义搜索功能允许基于数据的语义进行多语言和多模式搜索,并使其对拼写错误具有鲁棒性,但它可能会错过重要的关键字。此外,它取决于生成的向量嵌入的质量,并且对域外项敏感。
混合搜索的过程,混合搜索结合了基于关键字和矢量搜索技术,通过融合它们的搜索结果并重新排序。需要结合具体场景调整权重参数。
根据您的上下文类型和查询,您必须确定三种搜索技术中哪一种对您的RAG应用程序最有益。因此,控制基于关键字的搜索和语义搜索之间的权重的参数alpha可以被视为需要调整的超参数。
# 混合搜索得分
# alpha = 1: Pure vector search 向量搜索权重
# alpha = 0: Pure keyword search 关键词搜索权重
hybrid_score = (1 - alpha) * sparse_score + alpha * dense_score
对比关键词搜索和向量搜索的一个的在线demo:awesome-moviate
混合搜索适合什么场景
When Would You Use Hybrid Search (Hybrid Search Use Cases)
什么时候使用混合搜索(混合搜索用例)
Hybrid search is ideal for use cases where you want to enable semantic search capabilities for a more human-like search experience but also require exact phrase matching for specific terms, such as product names or serial numbers.
混合搜索是理想的用例,您希望启用语义搜索功能以获得更人性化的搜索体验,但也需要对特定术语(如产品名称或序列号)进行精确的短语匹配。
实践结合 LangChain 进行操作管理、OpenAI 语言模型和 Weaviate 向量数据库,来实现一个简易的 RAG 流程。参考:
检索增强生成(RAG):从理论到 LangChain 实践 [译]、
GitHub - langchain-ai/langchain:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。