본문 바로가기

Study

[논문] 사용자의 입력 의도를 반영한 음절 N-gram 기반 한국어 띄어쓰기 및 붙여쓰기 오류 교정 시스템

요약

본 논문에서 말뭉치에서 음절 uni-gram, bi-gram, tri-gram의 빈도수를 계산하고 이를 활용하여 확률식을 학습하여 띄어쓰기 및 붙여쓰기 오류 교정 시스템을 구축한다. 딥러닝 모델을 사용할 경우 문장에 있는 띄어쓰기를 모두 제거하고 띄어쓰기를 교정하는데 본 논문은 원래 문장의 띄어쓰기를 반영하여 잘못된 띄어쓰기를 제거하고 띄어쓰기가 되지 않은 곳에 띄어쓰기를 제거한다. 딥러닝 모델보다 훨씬 가볍고 성능도 우수하다.

개요

  • 한국어 자동 띄어쓰기란?
    • 문장 내에서 어절 간의 경계를 예측하는 문제
  • 띄어쓰기 오류의 문제점
    • 문장 해석 어려움이 증가함
    • 형태소 분석, 구문 분석, 개체명 인식과 같은 다음 단계의 자연어 처리의 오류를 발생시킴

관련 연구

제안 방안

  1. 음절 N-gram 통계 데이터 추출
    • 문장에서 uni-gram, bi-gram, tri-gram의 좌우 공백이 나타나는 빈도를 계산함
    • 이때 문장 시작과 끝은 띄어쓴다고 가정함
    • 1은 공백 있음, 0은 공백 있음을 의미함
    • n-gram별 띄어쓰기 유형 예시
      • uni-gram에서는 4가지, bi-gram에서는 8가지, tri-gram에서는 16가지의 경우의 수가 있음
      • '나', '나는', '나는학'이라는 uni-gram, bi-gram, tri-gram의 경우 각 n-gram의 띄어쓰기 유형은 위의 표에서 굵은 글씨에 해당함
  2. 공백 삽입 및 제거 확률 계산식 학습
    • 위의 수식을 통해 bi-gram와 tri-gram 정보를 활용하여 uni-gram의 공백 삽입 및 제거 확률을 계산함
    • 예시
      $$P(학) = 0.46 \times P_{bi}(학) + 0.54 \times P_{tri}(학)$$
      $$P_{bi}(학) = 0.3 \times P(는학○) + 0.375 \times P(학○교) + 0.325 \times P(○교에)$$
      $$P_{tri}(학) = 0.22 × P(나는학○) + 0.27 × P(는학○교) + 0.27 × P(학○교에) + 0.24 × P(○교에간)$$
    • bi-gram과 tri-gram의 확률을 구할 때 통계 정보를 활용하여 구할 수 있음
    • 통계 정보를 활용한 n-gram 확률 계산 예시
    • 하지만 모든 n-gram 확률을 추출한 통계 데이터로 계산할 수 없음
    • uni-gram을 활용하여 간접적으로 bi-gram과 tri-gram의 확률을 계산함
      • 연속된 음절 X, Y가 학습 데이터에서 한번도 등장하지 않은 경우
      • 연속된 음절 X, Y, Z가 학습 데이터에서 한번도 등장하지 않은 경우
    • 각각의 가중치는 초기에는 1로 설정하고 학습 과정에서 각 식의 가중치의 합이 1이 되도록 조정하였음
    • 가중치 조정 수식
      • $ P(x_i) $의 가중치 $ w_0 $, $ w_1 $ 업데이트 예시
        $$P(x_i) = w_0 \times P_{bi}(x_i) + w_1 \times P_{tri}(x_i)$$
        $$w_0 = w_0 / (w_0 + w_1)$$
        $$w_1 = w_1 / (w_0 + w_1)$$
  3. 띄어쓰기 및 붙여쓰기 임계치 결정
    • 확률 계산식 $P(x_i)$와 임계치(threshold)에 의해 공백 삽입 여부와 공백 제거 여부를 결정함
    • 띄어쓰기 임계치 2가지, 붙여쓰기 임계지 2가지로 총 4가지를 사용함
      • 기본 띄어쓰기 임계치: 한 어절이 5음절 미만일 때 사용됨
      • 완화된 띄어쓰기 임계치: 한 어절이 5음절 이상일 때 사용됨
      • 기본 붙여쓰기 임계치: 연속된 두 어절의 음절 수의 합이 3음절 초과일 때 사용됨
      • 완화된 붙여쓰기 임계치: 연속된 두 어절의 음절 수의 합이 3음절 이하일 때 사용됨
  4. 띄어쓰기 및 붙여쓰기 교정
    • 알고리즘
      1. 문장의 띄어쓰기 태그 추출
        • 나는 학교에 간다. → 101001001
      2. tri-gram과 bi-gram의 확률 계산
        • 학습된 확률 계산식과 간접적인 확률 계산식 사용
      3. 문장에서 잘못된 공백 제거
        • 처음에는 threshold = 기본 붙여쓰기 임계치
        • 이전 어절 길이 + 현재 어절 길이 <= 3 이면, threshold = 완환된 붙여쓰기 임계치
        • uni-gram의 확률 계산 후 threshold보다 크면 어절 뒤에 존재하는 공백 제거
      4. 잘못된 공백이 제거된 문장에 올바른 공백 추가
        • 처음에는 threshold = 기본 띄어쓰기 임계치
        • 어절의 음절 개수 >= 5 이면, threshold = 완화된 띄어쓰기 임계치
        • uni-gram의 확률 계산 후 threshold보다 크면 어절 뒤에 공백 추가

실험

  • 학습 및 평가 데이터: 세종 말뭉치
      문장 어절
    학습 775,234 8,976,303
    평가 86,138 998,182
  • N-gram 기반 자동 띄어쓰기 시스템을 이용한 실험 결과
    • 입력의 공백을 모두 제거한 후, 확률식이 임계칩다 크면 공백을 추가하는 방식과 비교한 결과
    • 비교 결과 음절 단위 정확률 2.19%, 공백 F1 값 3.64%, 어절 F1 값 7.00%의 성능 개선이 됨
  • 오류 문장 생성 예시
    • 입력 문장에 띄어쓰기 및 붙여쓰기 오류가 포함되어 있을 경우의 성능 평가를 위해 임의로 오류 문장을 생성함
  • 기존 한국어 자동 띄어쓰기 연구들과의 성능 비교
    • 기존 연구들도 세종 말뭉치를 사용하였음
    • 사용자의 입력 의도를 반영하지 않은 기존 연구들보다 더 높은 음절 정확률을 보임
  • 네이버 영화 리뷰 말뭉치를 이용한 성능 평가
    • 실제 사용자들의 영화평으로 성능 평가
    • 모델 1은 세종 말뭉치만을 한습한 경우, 모델 2는 자동 띄어쓰기가 적용된 네이버 영화 리뷰 말뭉치의 학습 셋을 추가로 학습한 경우
    • 공백 재현율은 81,07%지만, 공백 정밀도가 99.24%로 사용자가 띄어 써야 할 부분에서 띄어 쓰지 않는 경우가 많고, 실제로 띄어 쓴 부분은 충분히 신뢰할 수 있음
    • 따라서 이를 반영하여 교정하는 것이 올바른 문장을 틀리게 수정하는 문제를 해결할 수 있다고 볼 수 있음
  • [5]에서 초당 11.09 문장(316.89 음절)을 처리한 결과와 비교하면 제안방안은 초당 2691.69 문장(약 31,193,19 어절)을 처리하여 더 빠른 속도로 높은 성능을 낼 수 있음을 보여줌

'Study' 카테고리의 다른 글

분류 모델 성능 평가 지표(Accuracy, Precision, Recall, F1 score 등)  (2) 2022.01.02
BM25  (0) 2021.12.13
TF-IDF(Term Frequency - Inverse Document Frequency)  (0) 2021.12.13
DTM(Document-Term Matrix)  (0) 2021.12.13
GLUE Benchmark  (0) 2021.11.07