초록자동 띄어쓰기는 띄어쓰기가 무시된 한글 문서의 자동색인이나 문자인식 시스템에서 줄바꿈 문자에 대한 공백 삽입 문제 등을 해결하는데 필요하다. 이러한 문서에서 공백이 삽입될 위치를 자동으로 찾아주는 자동 띄어쓰기 알고리즘으로 문장 분할 기법과 양방향 최장일치법을 이용한 어절 인식 방법을 제안한다. 문장 분할은 한글의 음절 특성을 이용하여 어절 경계가 비교적 명확한 어절 블록을 추출하는 것이며, 형태소 분석기를 이용한 양방향 최장일치법에 의해 어절 블록에 나타난 각 어절들을 인식한다. 4,500여 어절로 구성된 두 가지 유형의 문장 집합에 대하여 제안한 방법의 띄어쓰기 정확도를 평가한 결과 ‘공백 재현율’이 97.3%, ‘어절 재현율’이 93.2%로 나타났다. Automatic word spacing is needed to solve the automatic indexing problem of the non-spaced documents and the space-insertion problem of the character recognition system at the end of a line. We propose a word spacing algorithm that automatically finds out word spacing positions. It is based on the recognition of Eojeol components by using the sentence partition and bidirectional longest-match algorithm. The sentence partition utilizes an extraction of Eojeol-block where the Eojeol boundary is relatively clear, and a Korean morphological analyzer is applied bidirectionally to the recognition of Eojeol components. We tested the algorithm on two sentence groups of about 4,500 Eojeols. The space-level recall ratio was 97.3% and the Eojeol-level recall ratio was 93.2%. 목차
참고문헌 조회 가능한 데이터가 없습니다. 석사 과정을 진행할 때 한국어 띄어쓰기 교정 시스템을 관련해서 연구를 진행했었는데, 이걸 다시 python 패키지로 만드록 싶다는 욕심이 생겨서 진행 중인 개인 프로젝트이다. 이번 포스팅에서는 그 당시에 개발했었던 방식을 간단하게 정리하고자 한다. 📽 video👆🏻 이미지를 클릭하면 영상을 볼 수 있어요!(시연 영상은 2년 전에 C++로 개발했을 당시의 영상입니다.) 📃 논문
그 당시 작성했던 논문의 제목은 '사용자의 입력 의도를 반영한 음절 N-gram 기반 한국어 띄어쓰기 및 붙여쓰기 시스템'이다. 그 때의 논문을 참고로 알고리즘을 간단하게 리뷰를 해보았다. (더 자세한 이론과 실험 내용은 아래 제 논문에서 확인할 수 있습니다🥳) 1. 서론
2. 사용자의 입력 의도를 반영한 띄어쓰기 오류 교정2-1. 음절 N-gram 통계일반 한국어 문장으로 구성된 말뭉치로부터 음절 N-gram 통계 데이터를 추출했다. 추출한 N-gram은 1음절/2음절/3음절 단위(unigram, bigram, trigram)로 한정하여 사용했다.
2-2. 공백 삽입 및 제거 확률 계산식
P(xi)=wbiPbi(xi)+w triPtri(xi)Pbi(xi)=wb1Pbi (xi−1xi:)+wb2Pbi(xi:xi+1)+wb 3P(:xi+1xi+2)Ptri(xi)=wt1P tri(xi−2xi−1xi:)+wt2Ptri(xi−1 xi:xi+1)+wt3Ptri(xi:xi+1xi+2 )+wt4Ptri(:xi+1xi+2xi+3)P(x_i) = w_{bi}P_{bi}(x_i) + w_{tri}P_{tri}(x_i)\\P_{bi}(x_i) = w_{b1}P_{bi}(x_{i-1}x_i:) +w_{b2}P_{bi}(x_i:x_{i+1})+w_{b3}P(:x_{i+1}x_{i+2})\\P_{tri}(x_i) = w_{t1}P_{tri}(x_{i-2}x_{i-1}x_i:)+w_{t2}P_{tri}(x_{i-1}x_i:x_{i+1})\\+w_{t3}P_{tri}(x_i:x_{i+1}x_{i+2})+w_{t4}P_{tri}(:x_{i+1}x_{i+2}x_{i+3})
error=∣y−y^∣wi+1=wi−0.001∗(erro r−0.5)error = |y -\hat{y}|\\w_{i+1} = w_i-0.001*(error-0.5)
P(XY)000=P(X)00 ∗freq(Y)00freq(Y)00+freq(Y)01P(XY)_{000} = P(X)_{00} * \frac{freq(Y)_{00}}{freq(Y)_{00}+freq(Y){01}} 2-3. 띄어쓰기 및 붙여쓰기 임계치 결정
2-4. 띄어쓰기 및 붙여쓰기 교정 알고리즘
💻 의사코드(pseudocode)
3. 실험
3-1. 한국어 자동 띄어쓰기 성능 평가 결과
3-2. 네이버 영화 리뷰 말뭉치에 대한 오류 교정 성능네이버 영화 리뷰 말뭉치(NSMC : Naver Sentiment Movie Corpus)의 평가 셋 중 임의로 선정한 5,000문장에 대한 정답 셋을 생성하여 성능을 측정한 결과입니다. 정답 셋을 생성할 때, 맞춤법 오류는 교정하지 않은 띄어쓰기 오류만을 교정하였습니다.
|