2023. 10. 30. 22:36ㆍ인공지능
안녕하세요. 쿠루가이입니다.
국립국어원 인공지능 AI 말평( 모두의 말뭉치)이라는 사이트가 있습니다. 이곳에서는 로컬 LLM을 가지고 혐오 발언 탐지라던가 감성분석을 한다거나 하는 테스트 해볼 수 있는 여러 과제들을 제공하고 있습니다. 저는 이것들 중에서 '혐오발언탐지' 부분을 해보고 있는데요.

예를 들면 이런겁니다. input 문자열에 '멍청한 소리 하지 마라'라는 문장을 입력했을 때 LLM이 이것을 보고 혐오 문장인지 아닌지 판단해주는것입니다. 혐오발언인 경우 0, 혐오발언이 아닌경우 1로 리턴해주게 해주면 되는 과제입니다.

평가는 F1점수로 한다고 하는데 저는 이런것을 첨들어 보았기때문에 조금 찾아보았습니다.
- 정확도 (Accuracy): 모든 예측 중 올바른 예측의 비율을 나타냅니다. 정확도는 모델이 전체 데이터셋에서 얼마나 정확한 예측을 하는지를 측정합니다. 그러나 클래스 불균형이 존재하는 경우, 정확도만으로는 모델의 성능을 올바르게 평가하기 어려울 수 있습니다.
- 정밀도 (Precision): 모델이 긍정으로 예측한 것 중 실제로 긍정인 비율을 나타냅니다. 정밀도는 거짓 긍정을 최소화하려는 경우 중요한 지표입니다.
- 재현율 (Recall): 모델이 실제로 긍정인 것 중에 얼마나 많이 찾아냈는지를 나타냅니다. 재현율은 거짓 음성을 최소화하려는 경우 중요한 지표입니다.
- F1 점수 (F1 Score): 정밀도와 재현율의 조화 평균으로, 모델의 정확성과 클래스 불균형을 고려한 평가 지표입니다. F1 점수는 정밀도와 재현율 사이의 균형을 제공합니다.
이중에서 F1 점수값이 높으면 성능이 높다고 할 수 있습니다. 정확도, 정밀도, 재현율은 하나의 값만 높다고 해서 성능이 좋다는것이 아니라는겁니다. 전적으로 모델의 맥락에 달려있다고 할 수 있습니다. ML을 활용하여 해결하려는 문제가 무엇인지 정확하게 파악하여 필요한 평가지표를 적절하게 활용하는 것이 무엇보다 중요합니다.
모델의 결과값을 jsonl로 제출하면 아래와 같이 f1 점수값을 표시해줍니다. 이 값을 기준으로 순위를 매겨줍니다.

하지만 하루에 평가할 수 있는게 정해져 있어서(하루 10번) 그리고 결과값을 제출후 바로 보여지는게 아니고 20분 정도 후에 결과가 나오기 때문에 저같이 성질이 급한분들은 좀 짜증날 수 있는데요.
그래서 chatGPT와 상담(?)한 끝에 f1점수를 미리 확인해 볼 수 있는 파이썬 소스를 만들었습니다!!
from sklearn.metrics import accuracy_score, recall_score, precision_score, f1_score
import json
# 정답 리스트 만들기
def extract_labels_from_jsonl(file_name):
labels = []
with open(file_name, 'r') as file:
for line in file:
data = json.loads(line)
labels.append(data["output"])
return labels
labels = extract_labels_from_jsonl("input.jsonl")
# 예측된 결과 리스트 만들기
def extract_guesses_from_jsonl(file_name):
guesses = []
with open(file_name, 'r') as file:
for line in file:
data = json.loads(line)
labels.append(data["output"])
return guesses
guesses = extract_labels_from_jsonl("output.jsonl")
print(f1_score(labels, guesses))
labels에 정답 리스트를 만들고, 정답값(output 필드값)을 넣어줍니다. guesses에 예측된 결과 리스트 만들고, 예측값을 넣어줍니다.
그리고 프로그램을 실행하면 f1 점수값이 표시됩니다.

실제 사이트에 올린것과 비슷하게 표시되는것을 확인할 수 있습니다. 사이트에서는 전체 데이터 중 70% 정도 랜덤하게 뽑아서 F1 점수를 낸다고 합니다. 저는 풀로 했는데 비슷하네요!
'인공지능' 카테고리의 다른 글
axolotl 훈련 중 정보 해석하기 (0) | 2024.03.02 |
---|---|
speculative decoding에대해서 (0) | 2024.02.26 |
우바부가가 OPENAI 형식으로 통신이 가능하네요. (1) | 2024.02.06 |
RTX 8000를 사용해 LLM을 찍먹해보았습니다. (2) | 2024.01.27 |
Deepl API를 이용하여 영어를 한국어로 변환하기 (1) | 2023.09.20 |
github의 llama_cpp.server에 lora 기능을 추가해달라고 요청했다! (0) | 2023.09.19 |
WSL에 우바부가 설치하기 (1) | 2023.08.27 |
딥러닝 기초 용어 정리( Epoch, Loss, Accuracy) (0) | 2023.08.26 |