티스토리 뷰

카테고리 없음

워드넷(wordnet)의 강력함

뭉클스토리 2019. 4. 24. 23:23

지난 글에서 컴퓨터에서 인간의 언어를 처리하기 위해서는 온톨로지가 필요하다는 이야기를 하였습니다. 제가 wordnet을 발견하고 얼마나 재미있었는지 수없이 많은 단어를 대입하며 그 결과를 음미하곤 했었습니다. 다음의 구조를 보시면 워드넷이 무엇인지 금방 알 수 있습니다.

동물
  -새
     -참새
  -물고기
     -고등어
     -멸치

추상
   -형태
   -시간
   -감정
       -사랑
       -행복
       -분노

위 예시를 보시면 단어들이 가지는 의미의 위계를 알아볼 수 있습니다.
첫 번째 예에서 ‘물고기’로 주목해 보면, 물고기의 상위어는 동물입니다. 그리고 물고기의 하위어는 고등어, 멸치 등입니다. 
상위어, 하위어가 중요한 이유는 어떤 개념이나 지식의 위계를 일목요연하게 파악할 수 있기 때문입니다. 단어라고해서 다 똑같은 단어가 아니라, 의미상 더 큰 개념을 포괄하는 단어일수록 상위에 위치하고, 우리가 그 단어를 사용한다면 보다 추상적 수준의 지식을 조작하는 것이 됩니다. 반대로 우리가 어떤 개념이나 지식을 다룰 때, 그것의 구체적인 예나, 더 세부적인 지식을 궁금해 할 때에는 하위어를 중심으로 찾아보고 풀어나가는 것이 순리일 것입니다.

만약 인간의 ‘감정’에 대해서 깊이 조사해 보려고 한다면, 워드넷 상에서 감정의 하위어들을 쭉 따라 내려가면서 각각의 개념들을 종합해 보는 과정이 필요할 것입니다. 

한 나라의 언어 체계가 깔끔하고 체계적으로 이렇게 정리된다면 정말 써먹을 수 있는데가 많을 것 같습니다. 영어권에선 진작에 이것을 구축하려는 움직임이 있었고, 수백만 단어를 기초로하여 작업이 이루어졌죠. 그것이 워드넷입니다. 
다만, 이것이 어려운 것이 단어 하나하나를 일일이 다 사람이 의미를 판별하고, 위치를 정하고 데이터베이스에 입력하는 지난한 작업을 해야한다는 것입니다. 그러니 방대하고 엄청난 작업이 될 수 밖에 없고 시간도 많이 들어갈 수밖에 없겠죠. 
그런 어려움 때문인지 우리나라는 공개된 워드넷이 나오기까지 많은 시간이 필요했던 것 같습니다. 몇 년전 열심히 우리나라 공개된 워드넷을 찾았으나, 찾지못했고 부산대학교에서 연구중이었던 것을 보았습니다. 최근 들어가보니 온라인 상에서 무료로 쓸 수 있게끔 공개해 놓으신 것 같습니다. (다만, 다운로드를 받으려면 구매해야 합니다.)
http://korlex.pusan.ac.kr/
들어가셔서 다양한 단어를 입력하시다보면 상상력이 자극되시는 경험을 하게 되실거라 생각합니다. 

또한 워드넷을 활용하면 다양한 단어 조작이 가능합니다. 다음 코드를 먼저 볼까요?
(아래 코드는 https://stackoverflow.com/questions/30081982/get-noun-from-verb-wordnet 에서 yvespeirsman 님이 작성한 것입니다.) 

def nounify(verb_word):
	set_of_related_nouns = set()

	for lemma in wn.lemmas(wn.morphy(verb_word, wn.VERB), pos="v"):
		for related_form in lemma.derivationally_related_forms():
			for synset in wn.synsets(related_form.name(), pos=wn.NOUN):
				if wn.synset('person.n.01') in synset.closure(lambda s:s.hypernyms()):
					set_of_related_nouns.add(synset)
	return set_of_related_nouns
 
print nounify("created")
set([Synset('creator.n.02'), Synset('creature.n.02'), Synset('creature.n.03')])

print nounify("teach")
set([Synset('teacher.n.01')])

print nounify("spoke")
set([Synset('speaker.n.03'), Synset('speaker.n.01')])

선언된 함수 nounify는 동사형 단어를 입력받으면, 관련된 명사형으로 바꾸어 반환해주는 함수입니다.
예컨대 teach 를 입력하면 teacher를 반환해주고, 

created를 입력하면 creator, creature를 반환,

spoke를 입력하면 speaker 를 반환해줍니다.

 

그게 별거냐라고 할 수도 있지만, 이렇게 의미를 조작할 수 있다는 방법이 있다는 것만으로도 감격스러운 일이 아닐 수 없습니다. 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함