전통적 NLP 지표(Traditional NLP Metrics)
전통적 NLP 지표(Traditional NLP Metrics)
Ragas는 LLM 없이도 쓸 수 있는 전통적인 문자열 유사도·품질 지표들도 제공해요. Levenshtein·Hamming 같은 거리 척도부터 BLEU, ROUGE, CHRF, ExactMatch, StringPresence까지 다양하죠. LLM 호출 없이 결정적(deterministic)으로 계산되므로 가볍고 빠르게 쓸 수 있어요.
출처: 문서
본문
비-LLM 문자열 유사도(Non LLM String Similarity)
NonLLMStringSimilarity 지표는 Levenshtein, Hamming, Jaro 같은 전통적인 문자열 거리 척도를 사용해 reference와 response 사이의 유사도를 측정해요. 이 지표는 LLM에 의존하지 않고 response가 reference 텍스트와 얼마나 유사한지 평가할 때 유용해요. 0과 1 사이의 점수를 반환하며, 1은 response와 reference가 완벽히 일치한다는 뜻이에요. LLM 기반이 아닌 지표예요.
예시(Example)
from ragas.metrics.collections import NonLLMStringSimilarity, DistanceMeasure
# Create metric (no LLM/embeddings needed)
scorer = NonLLMStringSimilarity(distance_measure=DistanceMeasure.LEVENSHTEIN)
# Evaluate
result = await scorer.ascore(
reference="The Eiffel Tower is located in Paris.",
response="The Eiffel Tower is located in India."
)
print(f"NonLLM String Similarity Score: {result.value}")
출력(Output):
NonLLM String Similarity Score: 0.8918918918918919
동기 사용법(Synchronous Usage) 동기 코드를 선호한다면
.ascore()대신.score()메서드를 쓸 수 있어요:result = scorer.score( reference="The Eiffel Tower is located in Paris.", response="The Eiffel Tower is located in India." )
구성(Configuration)
DistanceMeasure에서 사용 가능한 문자열 거리 척도를 고를 수 있어요. Hamming 거리 사용 예시:
scorer = NonLLMStringSimilarity(distance_measure=DistanceMeasure.HAMMING)
사용 가능한 거리 척도:
DistanceMeasure.LEVENSHTEIN(기본값)DistanceMeasure.HAMMINGDistanceMeasure.JARODistanceMeasure.JARO_WINKLER
레거시 지표 API(Legacy Metrics API)
다음 예시는 레거시 지표 API 패턴을 사용해요. 새 프로젝트에는 위에서 보여준 컬렉션 기반 API를 권장해요.
폐지 일정(Deprecation Timeline) 이 API는 버전 0.4에서 폐지되고 버전 1.0에서 제거될 예정이에요. 위에 보여준 컬렉션 기반 API로 마이그레이션해주세요.
SingleTurnSample과 함께하는 예시(Example with SingleTurnSample)
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics._string import NonLLMStringSimilarity
sample = SingleTurnSample(
response="The Eiffel Tower is located in India.",
reference="The Eiffel Tower is located in Paris."
)
scorer = NonLLMStringSimilarity()
await scorer.single_turn_ascore(sample)
출력(Output):
0.8918918918918919
다른 거리 척도와 함께하는 예시(Example with Different Distance Measure)
from ragas.metrics._string import NonLLMStringSimilarity, DistanceMeasure
scorer = NonLLMStringSimilarity(distance_measure=DistanceMeasure.HAMMING)
BLEU 점수(BLEU Score)
BleuScore 지표는 response를 reference와 비교해 품질을 평가해요. n-gram 정밀도와 brevity penalty를 기반으로 response와 reference 사이의 유사도를 측정해요. BLEU 점수는 원래 기계 번역 시스템을 평가하기 위해 설계됐지만, 다른 자연어 처리 작업에서도 사용돼요. BLEU 점수는 0에서 1 사이이며, 1은 response와 reference가 완벽히 일치한다는 뜻이에요. 비-LLM 기반 지표예요.
예시(Example)
from ragas.metrics.collections import BleuScore
# Create metric
scorer = BleuScore()
# Evaluate
result = await scorer.ascore(
reference="The Eiffel Tower is located in Paris.",
response="The Eiffel Tower is located in India."
)
print(f"BLEU Score: {result.value}")
출력(Output):
BLEU Score: 0.7071067811865478
동기 사용법(Synchronous Usage) 동기 코드를 선호한다면
.ascore()대신.score()메서드를 쓸 수 있어요:result = scorer.score( reference="The Eiffel Tower is located in Paris.", response="The Eiffel Tower is located in India." )
구성(Configuration)
kwargs 파라미터로 기본 sacrebleu.corpus_bleu 함수에 추가 인자를 전달할 수 있어요:
scorer = BleuScore(kwargs={"smooth_method": "exp"})
레거시 지표 API(Legacy Metrics API)
다음 예시는 레거시 지표 API 패턴을 사용해요. 새 프로젝트에는 위에서 보여준 컬렉션 기반 API를 권장해요.
폐지 일정(Deprecation Timeline) 이 API는 버전 0.4에서 폐지되고 버전 1.0에서 제거될 예정이에요. 위에 보여준 컬렉션 기반 API로 마이그레이션해주세요.
SingleTurnSample과 함께하는 예시(Example with SingleTurnSample)
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import BleuScore
sample = SingleTurnSample(
response="The Eiffel Tower is located in India.",
reference="The Eiffel Tower is located in Paris."
)
scorer = BleuScore()
await scorer.single_turn_ascore(sample)
출력(Output):
0.7071067811865478
ROUGE 점수(ROUGE Score)
RougeScore는 자연어 생성의 품질을 평가하는 데 사용되는 지표 집합이에요. n-gram 재현율, 정밀도, F1 점수를 기반으로 생성된 response와 reference 텍스트 사이의 겹침을 측정해요. ROUGE 점수는 0에서 1 사이이며, 1은 response와 reference가 완벽히 일치한다는 뜻이에요. 비-LLM 기반 지표예요.
예시(Example)
from ragas.metrics.collections import RougeScore
# Create metric (no LLM/embeddings needed)
scorer = RougeScore(rouge_type="rougeL", mode="fmeasure")
# Evaluate
result = await scorer.ascore(
reference="The Eiffel Tower is located in Paris.",
response="The Eiffel Tower is located in India."
)
print(f"ROUGE Score: {result.value}")
출력(Output):
ROUGE Score: 0.8571428571428571
동기 사용법(Synchronous Usage) 동기 코드를 선호한다면
.ascore()대신.score()메서드를 쓸 수 있어요:result = scorer.score( reference="The Eiffel Tower is located in Paris.", response="The Eiffel Tower is located in India." )
구성(Configuration)
rouge_type을 rouge1 또는 rougeL로 바꿔 각각 유니그램(uni-gram) 또는 최장 공통 부분수열(LCS) 기준 ROUGE 점수를 계산할 수 있어요.
scorer = RougeScore(rouge_type="rouge1")
mode를 precision, recall, fmeasure로 바꿔 각각 정밀도, 재현율, F1 점수 기준 ROUGE 점수를 계산할 수 있어요.
scorer = RougeScore(mode="recall")
레거시 지표 API(Legacy Metrics API)
다음 예시는 레거시 지표 API 패턴을 사용해요. 새 프로젝트에는 위에서 보여준 컬렉션 기반 API를 권장해요.
폐지 일정(Deprecation Timeline) 이 API는 버전 0.4에서 폐지되고 버전 1.0에서 제거될 예정이에요. 위에 보여준 컬렉션 기반 API로 마이그레이션해주세요.
SingleTurnSample과 함께하는 예시(Example with SingleTurnSample)
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import RougeScore
sample = SingleTurnSample(
response="The Eiffel Tower is located in India.",
reference="The Eiffel Tower is located in Paris."
)
scorer = RougeScore()
await scorer.single_turn_ascore(sample)
출력(Output):
0.8571428571428571
정확 일치(Exact Match)
ExactMatch 지표는 response가 reference 텍스트와 정확히 같은지 확인해요. 생성된 응답이 기대 출력과 단어 하나까지 일치해야 하는 시나리오(예: 도구 호출의 인자 등)에 유용해요. response가 reference와 정확히 일치하면 1, 아니면 0을 반환해요.
예시(Example)
from ragas.metrics.collections import ExactMatch
# Create metric (no LLM/embeddings needed)
scorer = ExactMatch()
# Evaluate
result = await scorer.ascore(
reference="Paris",
response="India"
)
print(f"Exact Match Score: {result.value}")
출력(Output):
Exact Match Score: 0.0
동기 사용법(Synchronous Usage) 동기 코드를 선호한다면
.ascore()대신.score()메서드를 쓸 수 있어요:result = scorer.score( reference="Paris", response="India" )
레거시 지표 API(Legacy Metrics API)
다음 예시는 레거시 지표 API 패턴을 사용해요. 새 프로젝트에는 위에서 보여준 컬렉션 기반 API를 권장해요.
폐지 일정(Deprecation Timeline) 이 API는 버전 0.4에서 폐지되고 버전 1.0에서 제거될 예정이에요. 위에 보여준 컬렉션 기반 API로 마이그레이션해주세요.
SingleTurnSample과 함께하는 예시(Example with SingleTurnSample)
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import ExactMatch
sample = SingleTurnSample(
response="India",
reference="Paris"
)
scorer = ExactMatch()
await scorer.single_turn_ascore(sample)
출력(Output):
0.0
문자열 존재(String Presence)
StringPresence 지표는 response가 reference 텍스트를 포함하는지 확인해요. 생성된 응답이 특정 키워드나 구문을 포함해야 하는 시나리오에 유용해요. response가 reference를 포함하면 1, 아니면 0을 반환해요.
예시(Example)
from ragas.metrics.collections import StringPresence
# Create metric (no LLM/embeddings needed)
scorer = StringPresence()
# Evaluate
result = await scorer.ascore(
reference="Eiffel Tower",
response="The Eiffel Tower is located in India."
)
print(f"String Presence Score: {result.value}")
출력(Output):
String Presence Score: 1.0
동기 사용법(Synchronous Usage) 동기 코드를 선호한다면
.ascore()대신.score()메서드를 쓸 수 있어요:result = scorer.score( reference="Eiffel Tower", response="The Eiffel Tower is located in India." )
레거시 지표 API(Legacy Metrics API)
다음 예시는 레거시 지표 API 패턴을 사용해요. 새 프로젝트에는 위에서 보여준 컬렉션 기반 API를 권장해요.
폐지 일정(Deprecation Timeline) 이 API는 버전 0.4에서 폐지되고 버전 1.0에서 제거될 예정이에요. 위에 보여준 컬렉션 기반 API로 마이그레이션해주세요.
SingleTurnSample과 함께하는 예시(Example with SingleTurnSample)
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import StringPresence
sample = SingleTurnSample(
response="The Eiffel Tower is located in India.",
reference="Eiffel Tower"
)
scorer = StringPresence()
await scorer.single_turn_ascore(sample)
출력(Output):
1.0
CHRF 점수(CHRF Score)
CHRFScore 지표는 문자 n-gram F-점수를 사용해 response와 reference 사이의 유사도를 평가해요. 정밀도를 강조하는 BLEU와 달리 CHRF는 정밀도와 재현율을 모두 고려해 다음과 같은 경우에 더 적합해요:
- 형태론적으로 풍부한 언어
- 의역(paraphrasing)이나 유연한 단어 선택이 있는 응답
CHRF 점수는 0에서 1 사이이며, 1은 생성 응답과 reference가 완벽히 일치한다는 뜻이에요. 전적으로 결정적 비교에 의존하는 비-LLM 기반 지표예요.
예시(Example)
from ragas.metrics.collections import CHRFScore
# Create metric (no LLM/embeddings needed)
scorer = CHRFScore()
# Evaluate
result = await scorer.ascore(
reference="The Eiffel Tower is located in Paris.",
response="The Eiffel Tower is located in India."
)
print(f"CHRF Score: {result.value}")
출력(Output):
CHRF Score: 0.8048
동기 사용법(Synchronous Usage) 동기 코드를 선호한다면
.ascore()대신.score()메서드를 쓸 수 있어요:result = scorer.score( reference="The Eiffel Tower is located in Paris.", response="The Eiffel Tower is located in India." )
구성(Configuration)
kwargs 파라미터로 기본 sacrebleu.corpus_chrf 함수에 추가 인자를 전달할 수 있어요:
# Customize character and word order
scorer = CHRFScore(kwargs={"char_order": 4, "word_order": 2})
# Customize beta (recall weight)
scorer = CHRFScore(kwargs={"beta": 3})
레거시 지표 API(Legacy Metrics API)
다음 예시는 레거시 지표 API 패턴을 사용해요. 새 프로젝트에는 위에서 보여준 컬렉션 기반 API를 권장해요.
폐지 일정(Deprecation Timeline) 이 API는 버전 0.4에서 폐지되고 버전 1.0에서 제거될 예정이에요. 위에 보여준 컬렉션 기반 API로 마이그레이션해주세요.
SingleTurnSample과 함께하는 예시(Example with SingleTurnSample)
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import ChrfScore
sample = SingleTurnSample(
response="The Eiffel Tower is located in India.",
reference="The Eiffel Tower is located in Paris."
)
scorer = ChrfScore()
await scorer.single_turn_ascore(sample)
출력(Output):
0.8048