KLUE-benchmark/KLUE-baseline

[MRC 평가] 평가 스크립트 내 정규 표현식

silencio94 opened this issue · 0 comments

Abstract(요약) 🔥

MRC 평가에서 텍스트 내의 구두점들을 제거하기 위해서 쓰여진 정규 표현식이 적절치 않습니다.

아래 코드에서 정규표현식 r"['"《》<>〈〉]()\‘\’"는 의미상
'"《》<>〈〉 중 하나로 시작하고 ()\‘\’ 로 끝나는 텍스트
인데 정답 텍스트 중에는 이런 텍스트가 없어서 정규표현식이 아무 역할을 하지 않고 있습니다.
결과적으로 line 22 는 lowercasing 만 수행하고 있습니다.

한편 이 정규표현식이 커버해 줄 수 있는 케이스가 적진 않아서 적절한 평가를 위해 수정하면 좋을 듯 합니다.

결론적으로, 코드 맥락 상 정규표현식이 r"['"《》<>〈〉()‘’]" 이렇게 바뀌는게 맞는 것 같습니다.

NORMALIZE_CHAR_PATTERN = re.compile(r"[\'\"《》<>〈〉]\(\)\‘\’")
PUNCTUATION_SET = set(string.punctuation)
KLUE_MRC_NUM_QUESTION_TYPE = 3
def normalize_answer_for_klue_mrc(answer: str) -> str:
"""Excludes useless characters in answer string.
Args:
answer: The raw text of answer.
Returns:
The normalized answer.
"""
answer = NORMALIZE_CHAR_PATTERN.sub(" ", answer.lower())
answer = "".join(c for c in answer if c not in PUNCTUATION_SET)
answer = " ".join(answer.split())
return answer

How to Reproduce(재현 방법) 🤔

import re
    
NORMALIZE_CHAR_PATTERN = re.compile(r"[\'\"《》<>〈〉]\(\)\‘\’")

text = "\'\"《》<>〈〉‘’()"
print(f"before:\n{text}")

text = NORMALIZE_CHAR_PATTERN.sub(" ", text) # .lower()
print(f"after:\n{text}")

실행결과:

before:
'"《》<>〈〉‘’()
after:
'"《》<>〈〉‘’()

How to solve (어떻게 해결할 수 있을까요) 🙋‍♀

😭

line 8: NORMALIZE_CHAR_PATTERN = re.compile(r"[\'\"《》<>〈〉]\(\)\‘\’")

🥰

line 8: NORMALIZE_CHAR_PATTERN = re.compile(r"[\'\"《》<>〈〉()‘’]")