만약 후보 단어 중 정답과의 Levenshtein distance가 동일한 단어가 두 개 이상있으면 Euclidean distance를 새로 구하여 정답을 예측하도록 하였다.
그러나 대소문자를 반영한다면 불필요한 연산을 제거할 수 있을 것이라 생각했다.
예시는 다음과 같다.
위 이미지에서 committe라는 단어는 좌측 상단에 'COMMITTEE', 편지 중간 문단에 'Committee'로 나타난다.
만약 질문이 '편지를 작성한 기관은 어디인가?'라면 ground truth는 좌측 상단의 'COMMITTEE'가 될 것이다.
OCR을 통해 획득된 단어 list 중에서 prediction1 : 'COMMITTEE', prediction2 : 'Committee'라고 하자.
이때 prediction1과 ground truth 사이의 Levenshtein distance는 0이 된다.
반면 prediction2와 ground truth 사이의 Levenshtein distance는 8이 된다.
따라서 prediction2는 정답 후보로 오르지 않게 되어 기존에 비해 연산량도 줄어들고 모델이 학습하는데 noise도 줄어들 것으로 예상된다.
즉, Levenshtein distance를 구할 때는 대소문자를 구분하는 것이 바람직할 것이라는 뜻이다.
이후 확인해보니 위 전처리 코드에 입력되는 문자열은 tokenizing 이후의 문자열이었다.
모델에 사용되는 tokenizer는 소문자만 처리하는 것이라서 NLD 함수에 입력으로 주어지는 모든 문자열은 이미 소문자가 된 상태라는 뜻이다.
따라서 s1.lower(), s2.lower()에 붙은 lower 함수는 있으나 없으나 상관이 없는 상태였던 것으로 확인했다.
우리가 가진 단어 list에 포함된 단어가 실제 정답과 얼마나 유사한지 혹은 그렇지 않은지는 Levenshtein distance를 통해 구한다. 이때 이 값을 계산하는 코드는 아래와 같다.
만약 후보 단어 중 정답과의 Levenshtein distance가 동일한 단어가 두 개 이상있으면 Euclidean distance를 새로 구하여 정답을 예측하도록 하였다. 그러나 대소문자를 반영한다면 불필요한 연산을 제거할 수 있을 것이라 생각했다.
예시는 다음과 같다.
따라서 prediction2는 정답 후보로 오르지 않게 되어 기존에 비해 연산량도 줄어들고 모델이 학습하는데 noise도 줄어들 것으로 예상된다. 즉, Levenshtein distance를 구할 때는 대소문자를 구분하는 것이 바람직할 것이라는 뜻이다.
이후 확인해보니 위 전처리 코드에 입력되는 문자열은 tokenizing 이후의 문자열이었다. 모델에 사용되는 tokenizer는 소문자만 처리하는 것이라서 NLD 함수에 입력으로 주어지는 모든 문자열은 이미 소문자가 된 상태라는 뜻이다. 따라서 s1.lower(), s2.lower()에 붙은 lower 함수는 있으나 없으나 상관이 없는 상태였던 것으로 확인했다.