UTagger 4
유태거4는 기존의 토크나이저들이 그렇듯이 고속으로 작동될 수 있도록 설계되었으며, 따라서 딥러닝 기술을 전혀 사용하지 않았습니다. 그럼에도 3과 달리 다소 떨어진 어절들을 문맥으로 사용할 수 있고, 미학습 문장 패턴에서도 어느정도 정답을 구분하는 기능을 가지고 있습니다.
예를 들어 “차를 받았는데 아직은 마실만해. 차를 받았는데 아직은 작동하네.” 에서 '차'와 핵심 단서 어절이 떨어져있더라도 '차'의 의미를 추정하는데 사용됩니다. 이 거리는 마치 어텐션 처럼 상황마다 다르고 최대 거리에 대한 제한도 있는데, 얕은 학습만을 사용하였습니다. 그래서 딥러닝 보다 덜 정확할 수 있지만 일반적으로 알려진 딥러닝 모델들의 속도와 비교해서는 월등히 빠르고 저렴한데도 딥러닝의 결과물과 비교될만한 수준을 기대할 수 있습니다.
공정한 비교가 아닐 수도 있지만 구글번역기나 파파고번역기와 유태거4를 비교해볼 수 있겠습니다. 위의 예에서 '차'는 모두 의미를 잘 구분합니다. 그러나 “사과를 받았지만 그걸 먹자니 걱정이다. 사과를 받았지만 그걸 이해할 수 없다.” 에서는 현재(2023년 2월 9일) 번역기들이 모두 apology로 번역하고 있고, 유태거4는 각각 apple과 apology로 구분합니다. 그러나 이런 현상이 늘 나타나는 것은 아니며, 일반적으로 더 무겁고 비용이 높은 모델(딥러닝)이 더 정확한 편입니다.
유태거4는 CRF 처럼 얕은 학습 모델로 분류될 수 있으나 미학습패턴에서도 강건하게 동작하기 위해서 단어를 백터화하는 기술을 추가적으로 사용하고 있습니다. 이 백터의 형태는 딥러닝의 그것과는 다르며, 백터를 얻거나 백터를 활용하는 모든 과정에서 딥러닝이 사용되지 않았고, 딥러닝과 비교하면 월등히 저렴하고 빠릅니다.
유태거4의 백터 기술은 미학습 패턴에 대해서 아무런 자질이 재현되지 못하더라도 정답에 유사한 답을 도출하도록 도움을 줍니다. 예를 들어서 배(pear)의 백터와 사과(apple)의 백터가 유사하다고 가정하고 “사과를 썰어서”를 학습했다면 “배를 썰어서”도 이해할 수 있는 식입니다. 실제로 학습 말뭉치에는 “배를 썰…” 패턴이 존재하지 않으며, 백터 기술을 적용하지 않으면 boat(배2)로 구분됩니다. 그러나 이 백터 기술을 적용하면 pear(배3)으로 교정됩니다.
이러한 백터 기술은 신조어를 등록할 때에도 사용할 수 있으며, 실제로 작동하는 것을 확인하였습니다. 예를 들어 '몬스터'는 '괴물'이라는 뜻 1개 뿐이여서 의미번호가 존재하지 않습니다. 여기에 에너지 드링크 몬스터를 '몬스터2'라고 정의하고 이 백터를 '음료'와 같다고 등록할 수 있습니다. 같은 방식으로 영화 타이틀 몬스터는 '몬스터3'으로 정의하고 '영화'를 백터로 등록할 수 있습니다. 이렇게 하면 2와 3은 학습 말뭉치 속에 전혀 나타난 적이 없지만 '음료'와 '영화'에 대한 학습 정보를 이용해 구분되어질 수 있습니다.
학습된 문장패턴이 존재할 경우에 유태거4의 백터 기술은 문장패턴을 이용한 처리 보다는 부정확한 편입니다. 따라서 몬스터 2~3의 경우에 이미 대량으로 학습된 '사과' 또는 '차'와 같은 수준을 기대하기는 어렵습니다. 다만 대량의 데이터를 새로 입력하는 비용을 들이지 않고도 구분 능력을 가질 수 있다는 것 입니다.
우리는 유태거4의 성능을 알아보기 위해 세종말뭉치 1,100만 어절에서 80%(880만 어절)와 사전(우리말사전 등. 뜻풀이나 용례가 아닌 형태소 등재 용도로만 사용)을 학습하고, 나머지(220만 어절)는 미학습으로 남기고 정확률을 실험하였습니다. 실험용 컴퓨터는 32개의 스레드를 사용할 수 있는 사양입니다.
유태거4는 총 3개의 모듈로 구성되는데 각각 A, B, 백터기술 이라고 부를 수 있습니다. A만 사용하면 12초가 소요되었고 이 때 정확률은 96.9% 입니다. A+B를 사용하면 약 17초가 소용되며 정확률은 97.2%입니다. A+B+백터기술에서 50~60초가 소요되고 97.4% 입니다. A+B로 기본적인 분석(형태소 복원 및 경계 분리, 단순한 품사 분류)만 하고 백터 기술로 모든 구분을 결정지으면 95.6% 입니다. 백터 기술에는 원시 말뭉치도 필요한데 위키와 뉴스 등이 사용되었고, 실험용 세종말뭉치는 이 학습에서도 제외되었습니다. 참고로 동일한 환경에서 유태거3은 2.3초를 소요하고 96.5%의 정확률을 보였습니다.
이렇게만 보면 A+B만 사용하는 것이 현명한 것 같으나 실제 사용감은 상당히 다릅니다. 우리(울산대학교 한국어처리 연구실)가 직접 사용해보았을 때에는 백터기술까지 적용하였을 때에 월등히 더 정확하게 느껴졌습니다. 그 이유는 세종말뭉치를 8:2로 나눌 때 문장을 5개씩 잘라서 4개를 학습하고 1개를 남기기를 반복하였기 때문입니다. 이런식으로 실험환경을 구축하며 미학습 문장이라 하더라도 그 앞 뒤 문장을 학습하였기 때문에 미학습패턴 자체가 거의 존재하지 않게 됩니다. 그래서 이러한 방법으로는 강건한 백터기술의 정확한 가치를 측정하기 어렵고, 이와 달리 우리가 즉흥적으로 직접 입력한 완전히 새로운 문장들에서는 큰 차이를 느낄 수 있었습니다. 특히 유태거4데모와 유태거3데모를 직접 사용해보면 굉장히 큰 차이 볼 수 있습니다.
이 정확률들은 모두 형태소 분석 및 동형이의어 번호를 어절 단위로 측정한 것입니다. 그래서 주의할 점은 상술한 백터기술단독 정확률이 순수하게 “미학습 패턴에 대한 동형이의어 구분 능력”을 표현하는 것이 아니며, 몬스터 2~3을 구분하는 것에 그런 정확률을 기대하지 않는 것이 좋다는 것 입니다. 주관적이고 짧은 실험에서 유태거4는 몬스터2~3에서 약 70~90%의 정확률을 보였습니다.
( 실제로 작동 중인 데모는 다양한 말뭉치를 학습하였고 하이퍼파라메타에 약간의 차이가 있습니다. )
잘못 붙여쓴 문장을 분석하는 방법
유태거는 “나는하늘을나는새를보았다.” 처럼 붙여 쓴 문장에서도 강건하게 작동합니다. 이를 위해서 띄어쓰기 교정기를 내장하고 있는데, 이 교정기로 선교정-후분석을 하는 것은 아닙니다. 교정기가 추천하는 띄어쓰기 위치는 자질을 구성하는데 일부 영향을 줄 수도 있는 정도로만 작동합니다. 문장에 따라서 교정을 수행하지 않고 분석을 마칠 수도 있습니다. 이러한 설계는 3가지 의도를 내포하고 있는데, 과도하거나 잘못된 교정으로 인하여 형태소분석 정확률이 하락하는 것을 방지하기 위한 것과, 불필요하게 교정으로 인해 속도가 느려지는 것 입니다. 마지막으로 교정기의 기능을 한정하였기에 이 교정기는 작고 빠르게 설계되었습니다.
선교정-후분석을 할 경우에 “이세계장르”는 “이 세계 장르”로 교정될 수 있습니다. 이러한 현상을 피하기 위해서 '이세계'가 명사로 있는지 확인하는 로직이 '이'와 '세'사이에 띄어쓰기가 나올 수 있는지를 확인하는 것 보다 먼저 수행됩니다.
다양한 표현으로 '차' 구분하기
차를 받았는데 맛있더라. 차를 받았는데 속도가 빠르네. 차를 받았는데 낡았어. 차를 받았는데 너무 달아.
얼마나 멀리 있는 문맥을 이해할 수 있는지에 대한 테스트 예제
차를받았는데좀마셔볼까? 차를받았는데좀몰아볼까?
차를 가져왔어 어서 몰아보자.
차를 가져왔어 어서 마셔보자.
기타
나야말로말을타는자의말로를말로들었다
접시를사기로한손님은사기로만들어진접시를사기위해사기행위로물건값을깍았고나의사기를꺾었다.
두모자가모자를사려는데돈이모자란다
장기를두는데한쪽장기가아파와병원에가려고하니운전이장기인친구가장기간장기적으로도와주겠단다.
나는은으로만든은메달은은근히은은한향이나서싫다.