AI大模型探索之路-应用篇11:AI大模型应用智能评估(Ragas)

2024-04-13 18:44

本文主要是介绍AI大模型探索之路-应用篇11:AI大模型应用智能评估(Ragas),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、为什么要做智能评估?

二、Ragas是什么?

三、Ragas使用场景

四、Ragas评估指标

五、Ragas代码实践

总结


前言

随着人工智能技术的飞速发展,AI大模型(LLM)已经成为了推动技术创新和应用的关键因素。这些大模型在语言理解、图像识别、自然语言生成等领域展现出了惊人的能力。然而,随着模型规模的增大,它们对计算资源的消耗、环境适应性、模型稳定性、安全性和可解释性等方面也提出了新的挑战。因此,对AI大模型进行智能评估变得至关重要,以确保它们在实际应用中的稳定性、可靠性和有效性。本文将详细介绍Ragas框架,一个专为AI大模型设计的智能评估工具。



一、为什么要做智能评估?

AI大模型的复杂性和规模使得传统的评估方法不再适用。这些模型通常包含数亿甚至数万亿个参数,这使得它们能够在各种复杂的任务中取得出色的表现。然而,这也带来了以下问题:
1. 计算资源消耗:大模型的训练和推理过程需要大量的计算资源,这可能导致昂贵的成本和环境影响。
2. 环境适应性:模型在不同环境和数据分布下的表现可能会有所不同,这可能影响其适用性。
3. 模型稳定性:面对异常输入或长时间运行,模型的稳定性成为关注的重点。
4. 安全性和隐私:模型可能会泄露训练数据中的敏感信息,或者生成不当内容。
5. 可解释性:由于模型的复杂性,解释模型的决策过程对于某些应用来说是难以接受的。

因此,对AI大模型进行全面的智能评估是确保其在实际应用中稳定性、可靠性和有效性的关键步骤。

二、Ragas是什么?

Ragas(Retrieval-Augmented Generation, RAG)框架是一个综合性的智能评估工具,它专为AI大模型设计,用于评估模型的性能、适用性、稳定性、安全性和可解释性等多个维度。Ragas的主要目标是为开发者、研究人员和决策者提供一个全面的评估工具,以帮助他们了解模型的优势和潜在的风险。


Ragas的功能特点包括:
1. 模块化设计:采用模块化设计,用户可根据具体的评估需求灵活地选择和组合不同的评估模块。
2. 自动化流程:提供自动化的评估流程,减少了人工干预的需求,提高了评估的效率和一致性。
3. 多维度评估:支持从多个维度对AI模型进行评估,包括性能、适用性、稳定性和可解释性等。
4. 用户界面:提供有直观的用户界面,使得用户设置评估参数、启动评估过程并查看评估结果。
5. 基准测试:Ragas可以与预定义的基准模型进行比较,评估AI模型的性能。
6. 适用性分析:Ragas能够分析模型在不同数据集上的适用性,识别模型的泛化能力。
7. 压力测试:Ragas可以模拟高负载情况下的模型表现,评估其稳定性。
8. 安全审计:Ragas检测模型是否存在潜在的安全风险,如数据泄露风险。
9. 可解释性分析:Ragas提供模型决策的解释,帮助用户理解模型的行为。

三、Ragas使用场景

Ragas适用于多种AI大模型的应用场景,包括但不限于:
1. 自然语言处理:Ragas可以用于评估文本分类、机器翻译、情感分析等任务的模型。
2. 图像识别:Ragas可以用于评估图像分类、目标检测、风格迁移等任务的模型。
3. 语音处理:Ragas可以用于评估语音识别、语音合成等任务的模型。

使用Ragas的场景通常是在模型开发和部署的关键环节,例如:
1. 模型选择:在选择合适的模型时,可以使用Ragas来评估不同模型的性能和适用性。
2. 模型优化:在模型开发过程中,可以使用Ragas来监控模型的表现,并根据评估结果进行优化。
3. 风险管理:在模型部署前,可以使用Ragas来评估模型的安全性和稳定性,以减少潜在的风险。

四、Ragas评估指标

Ragas提供了专门针对不同类型的embeddings的评估方法,例如对主流的OpenAI embeddings和BGE (Big Generative Models) embeddings等进行评估。此外,Ragas还提出了五种评估指标,包括忠实度、答案相关性、上下文精度、上下文召回率和上下文相关性,这些指标旨在量化评估检索增强生成(Retrieval-Augmented Generation, RAG)流程的性能。因此它特别适用于评估RAG应用。通过测量查询、检索到的上下文以及语言模型生成的回答之间的相关性来评估RAG的有效性。这种评估方法不需要访问人工注释的数据集或参考答案,使得评估过程更为简便和高效。
Ragas的五大评估指标
1)忠实度(Faithfulness):
数据范围:(0, 1)
判断标准:越高越好。
指标含义:忠实度衡量生成的答案与给定上下文的事实一致性。如果答案中的所有基本事实都可以从上下文中推断出来,则认为答案是忠实的。这意味着答案在内容上没有与上下文相矛盾的地方。
问题参考:Q: 请描述一种健康饮食的建议。
正面样例:A: 健康饮食建议包括多吃水果、蔬菜、全谷物,减少糖分和加工食品的摄入。
反面样例:A: 健康饮食建议包括吃快餐和糖果,完全避免蔬菜和水果。

2)答案相关性(Answer Relevancy):
数据范围:(0, 1)
判断标准:越高越好。
指标含义:答案相关性评估生成的答案与问题的相关性。一个高相关性的答案意味着它直接且准确地回答了问题。
问题参考:Q: 谁是《哈姆雷特》的作者?
正面样例:A: 威廉·莎士比亚是《哈姆雷特》的作者。
反面样例:A: 《哈姆雷特》是一部科幻小说。

3)上下文精度(Context Precision):
数据范围:(0, 1)
判断标准:越高越好。
指标含义:上下文精度评估检索到的上下文与问题和答案的相关程度。高上下文精度意味着检索到的上下文信息与问题紧密相关,对于生成答案有帮助。
问题参考:Q: 根据以下上下文,皮特下一步应该做什么?他正在厨房里准备晚餐,炉子上有一锅炖菜。
正面样例:A: 皮特下一步应该检查炖菜是否煮熟。
反面样例:A: 皮特下一步应该去洗车。

4)上下文召回率(Context Recall)
数据范围:(0, 1)
判断标准:越高越好
指标含义:上下文召回率评估在生成答案时使用的上下文信息是否全面。高上下文召回率表明RAG系统能够检索出与问题相关的大部分上下文信息。
问题参考:Q: 昨天你提到了哪些电影?
正面样例:A: 昨天我提到了《教父》、《泰坦尼克号》和《阿凡达》。
反面样例:A: 昨天我提到了《教父》。

5)上下文相关性(Context Relevance)
数据范围:(0, 1)
判断标准:越高越好。
指标含义:上下文相关性衡量输入查询、检索上下文和LLM生成的响应之间的相关性。这个指标有助于评估RAG系统的整体性能,即各个组件如何协同工作以产生准确的答案。
问题参考:Q: 你昨天提到的电影中,哪一部赢得了奥斯卡最佳影片奖?
正面样例:A: 《教父》赢得了奥斯卡最佳影片奖。
反面样例:A: 《阿凡达》赢得了奥斯卡最佳动画长片奖。

通过这些指标,Ragas框架能够为RAG系统提供一个全面的评估,帮助开发者和研究人员理解系统的表现,并指导他们进行进一步的优化和改进。这些指标的设计旨在不需要访问人工注释的数据集或参考答案,使得评估过程更为简便和高效。
注意:在某些特殊情况下,这些指标之间的权衡可能会导致不同的结论。例如,如果一个模型在提高上下文精确度(Context Precision)的同时可能就会降低了上下文召回率(Context Recall),因此实际应用中,需要根据具体情况来判断哪个指标更关键。

五、Ragas代码实践

1)安装依赖
pip install ragas==0.0.22
注意:安装0.0.22版本,不要安装最新的ragas,ragas的新版本和Langchain暂不兼容

2)导入依赖、定义模型

from langchain.vectorstores import FAISS
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
import  os
import openai
import  timeopenai.api_key = os.getenv("OPENAI_API_KEY")#定义模型
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

3)准备本地文档资料,用作测试样本

#准备本地文档资料,即测试样本
doc_list = """
1. 美国总统是谁?拜登
2. 印度人吃饭的工具是什么?右手
3. CBA是什么?CBA是指中国男子篮球职业联赛(China Basketball Association),这是中国最高等级的篮球联赛
4. 佛教起源哪里?古印度
5. 美国的职业篮球赛叫什么?NBA,全称为National Basketball Association,中文名为美国职业篮球联赛,是北美地区的最高等级职业篮球赛事
"""

4)将文档分割成小块,存储到向量数据库

#文档拆分分块
text_spliter = CharacterTextSplitter(separator="\n",chunk_size=500,chunk_overlap=50,length_function=len)
chunks = text_spliter.split_text(doc_list)

5)将文档的块数据embedding到向量数据库

#文档embedding到向量数据库
embedding_model = OpenAIEmbeddings()
vectorstore = FAISS.from_texts(texts=chunks,embedding=embedding_model)

6)构建chain链

qa_chain = RetrievalQA.from_chain_type(llm=llm,retriever=vectorstore.as_retriever(),return_source_documents=True,
)

7)测试样例准备

## 定义要测试的样本问题,可以定义多个,这里方便看测试效果,暂只定义1个
eval_questions = ["美国总统是谁?"
]eval_answers = ["拜登"
]examples = [{"query": q, "ground_truths": [eval_answers[i]]}for i, q in enumerate(eval_questions)
]
## 看一下从知识库里搜索出来的答案
result = qa_chain({"query": eval_questions[0]})
print(result)
{'query': '美国总统是谁?', 'result': '美国总统是拜登。', 'source_documents': [Document(page_content='1. 美国总统是谁?\n   拜登\n2. 印度人吃饭的工具是什么?\n   右手\n3. CBA是什么?\n   CBA是指中国男子篮球职业联赛(China Basketball Association),这是中国最高等级的篮球联赛\n4. 佛教起源哪里?\n   古印度\n5. 美国的职业篮球赛叫什么?\n   NBA,全称为National Basketball Association,中文名为美国职业篮球联赛,是北美地区的最高等级职业篮球赛事\n6. 什么是LangChain?\nLangChain是一个开源框架,允许从事人工智能的开发者将例如GPT-4的大语言模型与外部计算和数据来源结合起来。该框架目前以Python或JavaScript包的形式提供。\n7. 什么是大模型?\n大模型(Large Language Models)是一种人工智能模型,被训练成理解和生成人类语言。\n大模型通常是指具有数百万到数十亿参数的神经网络模型,需要大量的计算资源和存储空间来训练和存储,并且往往需要进行分布式计算和特殊的硬件加速技术。\n8. 什么是AIGC?'), Document(page_content='8. 什么是AIGC?\nAIGC,即AI-Generated Content,是一种利用人工智能技术自动生成的内容。它涵盖了多种内容形式,包括但不限于图片、视频、音乐和文字等。')]}

 8)创建评估测试链,评估结果对比

##评估测试
from ragas.metrics import (faithfulness,answer_relevancy,context_precision,context_recall,context_relevancy,
)# 1.创建"忠诚度"评估chains链
faithfulness_chain = RagasEvaluatorChain(metric=faithfulness)
# 2.创建“答案相关性”评估链
answer_rel_chain = RagasEvaluatorChain(metric=answer_relevancy)
# 3.创建“上下文精准度”评估链
context_pre_chain = RagasEvaluatorChain(metric=context_precision)
# 4.创建“上下文召回率”评估链
context_recall_chain = RagasEvaluatorChain(metric=context_recall)
# 5.创建“上下文相关性”评估链
context_relevancy_chain = RagasEvaluatorChain(metric=context_relevancy)##预测值
predict = qa_chain.batch(examples)
##预测值与真实值对比
result1 = faithfulness_chain.evaluate(examples,predict)
print(result1)
time.sleep(30)result2 = answer_rel_chain.evaluate(examples,predict)
print(result2)
time.sleep(30)result3 = context_pre_chain.evaluate(examples,predict)
print(result3)
time.sleep(30)result4 = context_recall_chain.evaluate(examples,predict)
print(result4)
time.sleep(30)result5 = context_relevancy_chain.evaluate(examples,predict)
print(result5)

总结

总之,AI大模型的智能评估是一个复杂而重要的任务。Ragas框架作为一个综合性的评估工具,为用户提供了从多个维度全面评估AI模型的能力。通过使用Ragas,用户可以更好地了解模型的优势和潜在风险,从而做出更明智的决策和优化方向。随着AI技术的不断发展,智能评估工具和方法也将不断进步,以满足不断增长的AI应用需求。

探索未知,分享所知;点击关注,码路同行,寻道人生!

这篇关于AI大模型探索之路-应用篇11:AI大模型应用智能评估(Ragas)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/900923

相关文章

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

Java应用如何防止恶意文件上传

《Java应用如何防止恶意文件上传》恶意文件上传可能导致服务器被入侵,数据泄露甚至服务瘫痪,因此我们必须采取全面且有效的防范措施来保护Java应用的安全,下面我们就来看看具体的实现方法吧... 目录恶意文件上传的潜在风险常见的恶意文件上传手段防范恶意文件上传的关键策略严格验证文件类型检查文件内容控制文件存储