AI/NLP

[Python] Distinct metric 측정 방법 (by paddlenlp)

체봄 2023. 4. 28. 20:00

 

Distinct는 생성된 응답의 다양성을 평가하기 위한 것으로, A Diversity-Promoting Objective Function for Neural Conversation Models paper에서 제안된 metric이다.

보통 input에 대해 output이 특정하게 정해져 있지 않고 다양한 output이 올 수 있는 오픈도메인 대화 task에서 평가 metric으로 자주 사용된다.

 

paddlenlp 라이브러리를 사용해 Distinct를 측정하기 위해서 다음을 설치한다.

$ pip install --upgrade paddlenlp>=2.0.0rc -i https://pypi.org/simple
$ pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

설치 과정에 에러가 생겼다면 이 포스팅이 도움될 수도 있다.

 

그리고 다음 코드로 Distinct를 측정한다.

from paddlenlp.metrics import Distinct
from transformers import AutoTokenizer

# load tokenizer
tokenizer = AutoTokenizer.from_pretrained('사용할 모델명')

# load generated file to do evaluation
with open('파일명', 'r', encoding='utf8') as f:
	lines = f.readlines()

n = 2	# Distinct-n
distinct = Distinct(n)

for line in lines:
	line = line.replace('\n', '')
	tokens = tokenizer.tokenize(text)
	distinct.add_inst(tokens)

print(f'distinct-{n}:', round(distinct.score(), 3))

n은 보통 2 또는 3으로 많이 사용하며, 값이 커질수록 distinct 값도 커진다.

모델이 생성한 텍스트 파일을 불러온 다음, tokenizer로 토크나이징하여 토큰들을 Distinct 객체에 집어 넣고, 최종적으로 distinct.score()를 호출하면 distinct 값이 계산된다.

 

반응형