티스토리 뷰

좋아하다의 활용형


위의 표는 기본형 좋아하다의 활용형을 정리한 것이다. 존칭형은 생략하였고 과거완료, 미래완료 등의 완료시제와 완료진행시제도 생략하였으며 접속형도 대표적인 것 일부만 정리하였다. 그나마 좋아하다는 규칙 활용을 하기 때문에 쉬운 것이고 반갑다등과 같이 불규칙 활용을 하는 경우는 더욱 변화무쌍하다.

문제는 우리말의 모든 동사와 형용사가 위와 같이 활용을 한다는 점인데 이를 어떻게 챗봇에게 가르칠 것이냐 하는 점이다. 다행히 챗봇은 사용자가 입력한 문장을 올바르게 이해하기만 하면 되지만 (출력문은 챗봇의 개발자가 작성하므로) 대화 상대방이 문장의 형태에 따라, 시제에 따라, 뒤따르는 단어의 형태에 따라, 그리고 본인이 생각하는 챗봇과의 위계 질서에 따라 저 활용형 중 하나를 선택하여 입력문에 포함시킬 것이기 때문에 각각의 활용형 별로 별도의 룰을 작성해야 한다. 즉 무척 많은 룰의 중복이 발생하게 된다.

이런 비효율을 최소화하기 위해, CS는 각 단어의 기본형과 활용형을 사전(dictionary)에 등록해 놓고 룰을 기본형(canonical form)으로 작성하면 사용자가 어떤 형태의 활용형으로 입력하든 시스템이 알아서 매칭시키게 하는 방법을 제공하고 있다. 예를 들어 위의 좋아하다라는 동사에 대해 그 기본형과 활용형을 사전(dictionary)에 등록해 놓았다고 가정하고, 룰을 기본형으로 작성하면 사용자가 좋아하다의 활용형 중 어떤 형태를 입력하더라도 CS엔진이 알아서 매칭시켜 준다.

 

A.     u: ( 야구* 좋아하다 ) 저는 축구를 좋아해요.

 

이 룰은 야구를 좋아해요”, “야구를 좋아합니다”, “야구를 좋아했지만 농구를 더 좋아한다.”, “야구를 좋아하는 친구가 있어요.”,  “야구를 좋아해서 잠실 구장에 응원가요등과 모두 매칭이 된다. 즉 기본형으로 룰을 작성함으로써 중복을 최소화하고 가독성도 높일 수 있게 된 것이다. 문제는 CS엔진의 이런 장점을 살리기 위해 동사와 형용사의 활용형을 모두 등록해야 한다는 점인데 먼저 영문의 경우 어떻게 하고 있는지부터 알아 보자.

우선 영어는 언어 특성상 우리말에 비해 활용이 훨씬 제한적이라 취급하기가 쉬운데다 영문버전의 CS는 아래의 3가지 툴을 추가적으로 동원하고 있기 때문에 사용자가 입력한 단어의 기본형(canonical form)을 정확히 알아내고 있다.


    POS Tagging (Part-of-speech tagging, 품사분류기) : 단어를 명사, 동사, 형용사 등의 품사로 구별한다. 컴퓨터를 이용한 자연어처리 분야에서는 50~ 150개 정도로 분류한다고 한다. CS는 영어에 대해 자체 POS Tagger를 내장하고 있다.

    Parsing : 문장의 구조와 문장 내에서 이웃하는 단어들과의 관계에 기초하여 주어, 목적어 등 각 단어의 역할이나 기능을 분석하는 작업이다.

    사전 : 프린스턴 대학의 WordNet(PWN)을 사용하고 있으며 이를 이용해 철자 검사  및 단어들 간의 상위관계, 하위관계, 동등관계 등 개념상의 관계를 파악하고 있다. WordNet은 단어 자체에 대한 사전적 정보보다는 단어들 간의 관계 즉 온톨로지 정보를 제공하고 있다는 점에서 어휘 의미망으로 분류되는 사전이다

 

우리말의 경우는 위의 3가지 툴이 없는 상태에서 기본형과 활용형을 연결시켜 주어야 하는데 다음과 같은 다섯 가지 방법을 생각해 볼 수 있다.

 

    외부 사전을 구비한다

    concept으로 만든다

    직접 사전을 만든다.

    선택 매칭( [ ] )을 사용한다.

    부분 와일드 카드를 사용한다.

 

첫째, 사전을 구비하는 방법은 국립국어원의 세종전자사전이나 부산대학교의 KorLex[1] 등을 검토할 수 있을 것이다. 특히 세종전자사전은 상업적 용도로 사용하지 않는다면 누구나 자유로이 사용할 수 있는 사전이다.[2] 다만 이러한 전통적인 사전은 기본형을 등재할 뿐 동사나 형용사의 모든 활용형을 등재하지는 않기 때문에 CS의 기본형 개념을 활용하려면 추가 작업이 필요하다. 즉 사전에 등재된 동사와 형용사에 대해 3항에서 설명하는 바와 같이 canon명령어로 활용형과 기본형을 연결시키는 작업을 해야 한다.

두 번째는 concept으로 만드는 방법이다.

 

concept: ~좋아하다 [좋아해 좋아해요 좋아합니다 좋아하고 좋아해서 좋아하며 …… ]

 

모든 활용형을 위와 같이 하나의 컨셉으로 묶고 그 컨셉 이름을 기본형으로 정하는 방법이다. 이후 사용할 때는 컨셉의 이름을(=기본형) 사용하면 포함된 모든 활용형과 매칭이 되기 때문에 사전을 구비하는 것과 비슷한 효과를 기대할 수 있다. 이 방법은 CS를 수정할 필요 없이 바로 적용할 수 있다는 장점이 있는 반면 사용할 때마다 매번 “~”기호를 붙여야 한다는 점과 수 많은 단어에 대해 위와 같이 컨셉을 만들어야 한다는 점이 단점이라 할 수 있다.

세 번째는 사전을 직접 만드는 방안이다. CS는 내장되어 있는 영어 사전 외에 사용자가 별도로 사전을 만들 수 있는 툴을 제공하는데 그 명령어가 바로 concept 명령어와 canon 명령어이다. concept 명령어로 사용자 사전을 만들어 기본형과 활용형을 등록하고 canon 명령어로 활용형과 기본형을 연결시켜 주면 된다.

 

concept: ~좋아하다 VERB ( 좋아하다 좋아해 좋아하는 좋아해서 좋아하고 )

canon (좋아해 좋아하다)

canon (좋아하는 좋아하다)

canon (좋아해서 좋아하다)

canon (좋아하고 좋아하다)

 

concept 명령어로 사용자 사전을 만들 때는 컨셉이름 뒤에 VERB, ADJECTIVE, ADVERB, NOUN 등과 같은 품사명을 지정해 주면 된다. 이 방법 역시 시간과 노력이 많이 걸린다는 단점이 있다.

네 번째 방안은 아래와 같이 필요한 곳에서 선택 매칭을 사용하는 방법이다.

 

u: ( 야구* [좋아해 좋아해요 좋아합니다 좋아하고  좋아하며 좋아하니까] )

 

이 방법은 코드가 복잡해져서 읽기 어려워진다는 점 외에 매번 저렇게 작성해야 한다는 것은 비생산적이라 해결책이 되지 못한다.

다섯 번째 방안은 어근+*”의 부분 와일드 카드로 패턴을 작성하는 방법이다.

 

u: ( 야구* 좋아* )

 

불규칙 변화일 때는 아래와 같이 추가를 하면 된다. 이 방식의 단점은 기본형과 활용형의 장점을 활용하지 못한다는 점과 장차 지식베이스를 만들 때 활용하지 못한다는 점을 들 수 있다.

 

#! 강아지가 반갑게 꼬리쳤다

u: ( 강아지* [ 반가* 반갑* ] 꼬리* )

 

이 다섯 가지 방안 모두가 각각의 장단점이 있겠으나 실용적인 측면에서의 추천안은 마지막 다섯 번째 방안이다. 필요한 동사와 형용사에 대해 부분 와일드카드를 사용하면 간편하게 활용형을 처리할 수 있다. 그러나 본격적으로 전문가 시스템을 만들려 한다면 그 분야에서 자주 사용하는 단어는 위의 세 번째 방안으로 직접 사전을 만들 것을 추천한다.

다른 한편, 기본형이 아니라 사용자가 입력한 형태 그대로 매칭되도록 하고 싶을 경우는 해당 단어 앞에 ‘(어포스트로피)를 붙이면 된다. 형용사 빨갛다가 빨갛고, 빨개서, 빨갛지만, 빨가니까 등의 활용형과 함께 기본형으로 등록되어 있다고 가정할 때,

 

u: ( 사과* ‘빨갛다 )

 

이 룰은 사과는 빨갛다와는 매칭이 되지만 사과가 빨갛고”, “사과는 빨갛지만등과는 매칭이 되지 않는다. ‘(어포스트로피)를 붙이면 기본형으로 일반화시키지 않고 그 형태 그대로를 유지하라는 뜻이 된다.

 



[1] 부산대학교에서 2004년부터 구축해 온 한글 어휘 의미망 KorLex를 사용할 수도 있을 것이나 이는 저작권을 먼저 해결해야 할 것이다. http://korlex.pusan.ac.kr/

[2] https://ithub.korean.go.kr/user/main.do



댓글
댓글쓰기 폼