메트릭을 타겟 언어에 맞게 적용하기

메트릭을 타겟 언어에 맞게 적용하기

영어가 아닌 다른 언어로 LLM 애플리케이션을 평가할 때는 메트릭을 그 타겟 언어에 맞게 조정해 줘야 해요. Ragas는 프롬프트 안의 few-shot 예시를 번역하는 데 LLM을 사용해요. 이 방법을 알면 다국어 평가도 자연스럽게 할 수 있어요.

출처: 문서

본문

설정

from openai import AsyncOpenAI
from ragas.llms import llm_factory
from ragas.metrics.collections import Faithfulness

client = AsyncOpenAI()
llm = llm_factory("gpt-4o-mini", client=client)

metric = Faithfulness(llm=llm)

프롬프트를 타겟 언어로 적용하기

컬렉션 메트릭은 프롬프트를 직접 속성으로 갖고 있어요. adapt() 메서드를 사용하면 few-shot 예시를 번역할 수 있어요.

# Check original language
print(metric.statement_generator_prompt.language)
# english

# Adapt prompts to Hindi
metric.statement_generator_prompt = await metric.statement_generator_prompt.adapt(
    target_language="hindi", llm=llm
)
metric.nli_statement_prompt = await metric.nli_statement_prompt.adapt(
    target_language="hindi", llm=llm
)

# Verify adaptation
print(metric.statement_generator_prompt.language)
# hindi

# See translated example
print(metric.statement_generator_prompt.examples[0][0].question)
# अल्बर्ट आइंस्टीन कौन थे और वे किस चीज़ के लिए सबसे अधिक जाने जाते हैं?

Note

기본적으로는 few-shot 예시만 번역돼요. 지시문(instructions)은 영어로 남아 있어요. 지시문도 함께 번역하려면 adapt_instruction=True 를 설정하면 돼요.

적용한 메트릭으로 평가하기

result = await metric.ascore(
    user_input="भारत की राजधानी क्या है?",
    response="भारत की राजधानी नई दिल्ली है।",
    retrieved_contexts=["भारत की राजधानी नई दिल्ली है, जो देश का सबसे बड़ा शहर भी है।"],
)

print(f"Faithfulness: {result.value}")
# Faithfulness: 1.0

다른 메트릭 적용하기

같은 패턴은 프롬프트를 가진 모든 컬렉션 메트릭에 동일하게 적용돼요.

from ragas.metrics.collections import AnswerRelevancy
from ragas.embeddings.base import embedding_factory

embeddings = embedding_factory("openai", client=client)
relevancy = AnswerRelevancy(llm=llm, embeddings=embeddings)

# Adapt the prompt
relevancy.prompt = await relevancy.prompt.adapt(
    target_language="spanish", llm=llm
)

# See translated example
print(relevancy.prompt.examples[0][0].response)
# Albert Einstein nació en Alemania.

FactualCorrectness 적용하기

FactualCorrectness 는 두 개의 프롬프트를 갖고 있어서 둘 다 적용해 줘야 해요.

from ragas.metrics.collections import FactualCorrectness

metric = FactualCorrectness(llm=llm)

# Adapt both prompts to German
metric.prompt = await metric.prompt.adapt(
    target_language="german", llm=llm
)
metric.nli_prompt = await metric.nli_prompt.adapt(
    target_language="german", llm=llm
)

# Verify adaptation
print(metric.prompt.language)  # german
print(metric.nli_prompt.language)  # german

# Now use the adapted metric
result = await metric.ascore(
    response="Einstein wurde 1879 in Deutschland geboren.",
    reference="Albert Einstein wurde am 14. März 1879 in Ulm, Deutschland geboren."
)

print(f"Factual Correctness: {result.value}")

Tip

Faithfulness 처럼 FactualCorrectness 도 내부적으로 두 개의 프롬프트를 사용해요.

  • prompt - 텍스트를 claim(주장)으로 분해하는 ClaimDecompositionPrompt
  • nli_prompt - claim을 검증하는 NLIStatementPrompt

비영어 언어로 평가할 때는 두 프롬프트 모두 적용해야 해요.

더 알아보기 (Learn more)