Context Relevance上下文相关性
原理:
Context Relevance 指标用于评估一个回答的句子是否受到提供的上下文支持,以及上下文是否受到回答的支持。其核心思想是:
- 拆分回答:将回答分解为独立的句子。
- 判定支持度:对于每个句子,判断它是否可以在上下文中找到支持。
- 计算支持度精度:通过统计支持的句子占比,衡量回答对上下文的依赖性。
目的:
- 确保模型的回答是基于给定的上下文,而非凭空生成。
- 评估回答对上下文的利用率,提高答案的可靠性。
- 检测回答中的不可信或无依据的内容。
query = "美国最高法院关于堕胎的裁决对全球有什么影响?"
answer = "美国最高法院关于堕胎的裁决具有重要的全球影响。该裁决导致在堕胎访问受到限制的州,三分之一的生育年龄女性和女孩无法获得堕胎服务。那些州的母婴健康支持也较弱,母亲死亡率较高,儿童贫困率也较高。此外,裁决的影响超出了国界,由于美国在全球的地缘政治和文化影响力,这一裁决也产生了跨国影响。全球的组织和活动家担心这一裁决可能会激励其他国家出台反堕胎的立法和政策。裁决还妨碍了某些非洲国家的进步法律改革和堕胎指南的实施。此外,该裁决在国际政策领域造成了寒蝉效应,使得反堕胎的力量能够削弱人权保护。"
docs = [
"- 2022年,美国最高法院作出裁决,推翻了50年的判例法,取消了宪法堕胎权。\n- 这一裁决产生了巨大影响:三分之一的生育年龄女性和女孩现在生活在堕胎服务几乎完全无法获得的州。\n- 这些堕胎法律最为严格的州,母婴健康支持最为薄弱,母亲死亡率较高,儿童贫困率较高。\n- 美国最高法院的裁决还通过美国在全球的地缘政治和文化影响力,超越国界产生了影响。\n- 全球的SRR组织和活动家对这一裁决可能为其他国家的反堕胎立法和政策攻击铺路表示担忧。\n- 观察者还注意到该裁决对某些非洲国家的进步法律改革产生了影响,导致堕胎指导方针的 adoption 和执行停滞不前。\n- 该裁决在国际政策领域产生了寒蝉效应,助长了反堕胎的国家和非国家行为体破坏人权保护的势头。",
"美国最高法院的堕胎裁决不仅在国内引发了激烈的辩论和讨论,也在全球范围内引发了广泛关注。许多国家将美国视为法律和社会问题的领导者,因此这一裁决可能会影响其他国家对堕胎的政策和态度。",
"这一裁决还可能对国际组织和非政府组织(NGO)产生影响,尤其是那些致力于生育权和妇女健康问题的团体。根据裁决的结果,可能会出现资金、倡导工作和与美国同行的合作发生变化,进而在全球范围内引发生育正义斗争的连锁反应。"
]
代码实现
实现流程:
- 输入: 回答
answer,以及文档document_list。 - 支持度判定: 使用
Sentence_Support_Verdication模型逐句分析回答的句子是否在上下文中得到支持。 - 计算精度: 计算被支持的句子占比,以
answer_supported_precision和context_supported_precision进行衡量。
从文本A中抽取句子,再在文本B中验证
import asyncio
import numpy as np
from typing import List
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field
'''
输出格式形如:
{
"sentence_and_statements":
}
'''
class Sentence_Support_Verdication(BaseModel):
sentence: str = Field(description="回答的某个句子的原始内容。")
sentence_supported_reasoning: str = Field(description='分析该句子是否能得到上下文中任意一句话的支持。')
sentence_supported_verdication: int = Field(description='如果该句子能得到事实陈述中任意一句话的支持,为1,否则为0。')
class Sentence_Support_Verdication_List(BaseModel):
verdications: List[Sentence_Support_Verdication] = Field(description="一组句子和对应的是否被上下文支持的判断")
verdication_parser = PydanticOutputParser(pydantic_object=Sentence_Support_Verdication_List)
llm = ChatOpenAI(
base_url='http://localhost:5551/v1',
api_key='EMPTY',
model_name='Qwen2.5-14B-Instruct',
temperature=0.5,
)
anwer_supported_verdict_prompt = (
"给定一段上下文和一个回答,分析回答的每个语句,并判断该语句是否得到上下文的支持,若得到支持则判断为1,若没有得到支持则判断为0。\n"

最低0.47元/天 解锁文章
3088

被折叠的 条评论
为什么被折叠?



