티스토리 뷰
지난 글에서 컴퓨터에서 인간의 언어를 처리하기 위해서는 온톨로지가 필요하다는 이야기를 하였습니다. 제가 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
- synset
- 뇌혁명
- 워드넷
- 해석공동체
- 문장파싱
- 의미조작
- 하위어
- 대화프로그램
- wordnet
- gensim
- 인공지능
- 의미표현
- 의미속성
- conceptnet
- 의미연산
- 소프트웨어오류
- 코퍼스
- 단어벡터
- 상위어
- 실용주의자
- 올바른해석
- 유튜브시대
- hyponyms
- 챗봇
- word2vec
- 단어의의미
- hypernyms
- lemma
- 실패준비
- 데이터베이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |