공돌하우스

자연어 처리 중 wordnet 본문

AI

자연어 처리 중 wordnet

전자둥이 2021. 6. 20. 15:00

안녕하세요 전자둥이입니다.

 

제가 CNN위주로만 공부하고 프로젝트를 진행하고 했었는데요 이번에는 RNN쪽으로 공부를 할 겸 정리한 걸 공유할려고 합니다.

나중에는 강화학습쪽도 공부하고 포스팅 하도록 하겠습니다.

 

RNN은 밑바닥부터 시작하는 딥러닝 2 라는 책을 읽고 정리해서 작성할려고 합니다. 

 

오늘은 자연어 처리 분야중 wordnet에 대해서 알아보겠습니다.

 

wordnet은 프린스턴 대학교에서 구축한 유의어 DB입니다. 유의어 사이의 관계를 그래프로 정의하고 있는 방대한 데이터입니다. 이 wordnet을 이용하여 유사한 단어를 파악할 수 있고, 각 단어의 유사도를 계산할 수 있습니다.

 

wordnet을 파이썬에서 이용할려면 NLTK(Natural Language Toolkit)라이브러를 사용해야합니다.

해당 라이브러리를 설치하고   import해주었으면 "car"의 의미가 몇 개나 되는지 확인해보겠습니다. 이는 wordnet.synsets()메서드를 사용하면 됩니다.

원소 5개짜리 리스트가 출력되는걸 확인 할 수 있습니다. 이는 car 라는 단어에는 다섯 가지 의미가 정의되어 있다는 뜻입니다.

car.n.01 -> 첫번째는 단어이름, 두번재는 속성(명사인지 동사인지), 세번재는 그룹의 인덱스를 나타냅니다.

 

해당 리스트의 정의나 동의어를 찾아볼려면 definition()메소드와 lema_names()메서드를 사용하면 됩니다.

그리고 'car'의 단어 네트워크를 사옹하여 다른 단어와의 의미적인 상.하 관계를 살펴보겠습니다. 이때는 hypernym_paths()메서드를 사용합니다. 참고로 hypernym은 주로 언어학에서 사용하는 단어로 "상위어"라는 뜻입니다.

결과를 보시면, car는 entity라는 단어로 시작하여 physical_entity -> object -> ... -> motor_vehicle->car 경로로 이어집니다. 이처럼 wordnet을 구성하는 단어 네트워크는 위로 갈수록 추상적이고, 아래로 갈수록 구체적이 되도록 단어를 배치했습니다.

 

지금까지 설명한 것처럼 wordnet에서는 많은 단어가 동의어 별로 그룹지어져 있습니다. 단어 사이의 의미 네트워크도 구축 되어 있습니다. 이러한 단어 사이의 연결 정보를 이용하면 다양한 문제에서 활용될 수 있습니다. 그 다양한 정보 중 단어 사이의 유사도를 계산해주는 예를 살펴보겠습니다.

단어 유사도는 path_similarity()메서드로 구합니다. 1일 수록 매우 비슷한 뜻이고 0일 수록 비슷하지 않다는 뜻입니다.

결과를 보면 car는 motorcycle이랑 가장 유사한 걸 수치로 확인 할 수 있습니다.

 

wordnet의 문제점

1. 시대 변화 대응에 어렵다

   - 단어의 뜻은 시대가 지날 수록 다양하게 사용되어집니다. 예전의 의미가 없어지기도 하고 새로운 뜻으로 사용되어지기도 합니다. 따라서 wordnet과 같은 시소러스에는 수많은 단어에 대한 동의어와 계층 구조 관계가 정의되어있어 변화에 적응하기가 어렵습니다.

2. 사람을 쓰는 비용이 크다.

 - 시소러스를 만드는데 엄청난 인적 비용이 발생합니다. 

3. 단어의 미묘한 차이를 표현할 수 없다.

 - 시소러스에서는 뜻이 비슷한 단어들을 묶습니다. 따라서 같은 뜻이라도 단어마다 표현하는 미묘한 차이를 구별하기가 어렵습니다.

 

이처럼 시소러스를 사용하는 기법(단어의 의미를 사람이 정의하는 기법)에는 커다란 문제가 있습니다. 이러한 문제를 피하기 위해, 다음 포스팅에서는 통계 기반 기법과 신경망을 사용한 추론 기법에 대해서 소개하겠습니다.

 

 

 

 

'AI' 카테고리의 다른 글

[딥러닝]SSD모델 default anchor box 그려보기  (0) 2021.09.03
Distance-IOU Loss  (0) 2021.07.25
[딥러닝] Activation Function 소개  (0) 2021.06.04
ResNet skip-connection  (0) 2021.05.30