티스토리 뷰
본 포스팅은 바라가브 스리니바사 디지칸, 『자연어처리와 컴퓨터언어학』, 마창수 역, 에이콘을 참고하여 만들어졌습니다.
http://acornpub.co.kr/book/nlp-computational-linguistics
1. 토픽 모델링의 이해
토픽 모델은 텍스트에서 특정 토픽에 관한 정보를 포함하고 있는 확률 모델, 토픽은 텍스트에서 표현하고 있는 아이디어나 주제를 말한다. 예를 들어 뉴스 기사의 말뭉치를 다루고 있다면 가능한 주제는 날씨, 정치, 스포츠, 경제 등이 될 것이다.
왜 텍스트 처리 영역에서 토픽 모델이 중요할까? 전통적으로 IR과 검색 기술은 유사성과 관계성을 식별하기 위해 단어를 이용한다. 이제 단어 대신 토픽을 이용해 광법위하게 검색하고 파일을 정리할 수 있다. 하지만 토픽이 의미하는 것은 단어의 분포, 특히 단어의 확률 분포다. 이 모델을 이용하면 토픽의 확률 분포로 문서를 설명할 수 있다. 문서를 구성하는 단어들과 그 숫자를 알고 있기 때문에 이 지식을 이용해 토픽 모델을 만들 수 있다. 일단 토픽 모델을 갖게 되면 모든 문서들은 토픽의 분포로 표현할 수 있다.
또한, 각 토픽에서 문서를 탐색하고 토픽이나 테마를 이해하기 위해 문서를 좀 더 자세히 검토할 수 있다. 텍스트 말뭉치에 대한 토픽 모델을 작성하면 데이터 세트를 탐색하고 말뭉치에 어떤 주제의 문서들이 포함돼 있는지 관찰할 때 유용하다.
문서를 시간 순으로 정렬하면 시간이 지남에 따라 문서의 토픽이 어떻게 진화했는지도 확인할 수 있다. 타임스탬프를 고려한 상태에서 시간이 경과함에 따라 토픽에 관련된 주제 단어들이 어떻게 진화되는지 확인할 수 있다. 토픽 모델을 사용하면 이전에 할 수 없었던 방식으로 데이터를 이해할 수 있게 된다.
하지만 토픽이 단순히 단어들의 확률적 분포이며 그것 자체의 라벨이나 제목을 생성하지 않는다는 것을 명심해야 한다. 예를 들어 신문 말뭉치에서 날씨에 고나한 토픽이라고 부르는 주제는 태양, 온도, 바람, 폭풍, 예보와 같은 단어들이 토픽 내에 나타낼 수 있는 확률을 나타낸다. 토픽에서는 날씨와 같이 해당 주제에 나타날 가능성이 높은 단어드이 포함돼 있을 것이다. 단어들을 확률에 따라 배열하면 주제를 표현할 수 있는 아이디어를 얻을 수 있다. 물론 코드에서 단순히 주제1, 주제2 ... 주제n과 같이 표현할 수 있고 n-1은 말뭉치에서 식별해야 할 토픽 수를 의미한다. 이 지점에서 사람이 확률이 확률 분포 집합에서 원하는 주제 레이블을 지정해야 한다.
이제 문서를 단어 대신 주제로 표현할 수 있게 됐기 때문에 주제 수를 이용하면 전체 어휘의 크기나 데이터의 크기를 획기적으로 줄일 수 있다. 초기의의 IR 알고리즘 중 하나인 잠재의미분석(LDA)는 이와 매우 유사하므로 이 말뭉치의 주제를 표현하는 토픽의 표현으로 크기를 줄이는 작업을 할 수 있다.
앞에서 토픽 모델이 무엇인지에 대해 논릐를 했지만 생성은 어떻게 해야 할까? 생성하는데는 여러 가지 방법이 있다. 우리 모델을 생성하기 위해 젠심을 이용할 예정인데 이는 LDA, LSA, 계층적 디리클레 프로세스(HDP), DTM 등을 구현하는데 도움을 준다. 이 알고리즘들에는 몇 가지 공통점이 있는데 문서의 단어들을 기본적인 확률 분포를 갖고 있다고 가정하며 우리는 이 분포를 찾으려고 한다. 이 분표는 결국 토픽이다. 이런 분포(수학적 또는 통계적 기법으로)를 식별하는 방법이 이 알고리즘들을 달리 만든다.
2. 젠심을 이용한 토픽 모델링
젠심은 무료로 사용할 수 있는 가장 인기 있는 토픽 모델링 도구이고 파이썬으로 작성되어 있기 때문에 사용하기 간편한다. 젠심은 다양한 토픽 모델링 알고리즘, 직관적인 API 그리고 화발한 커뮤니티 덕분에 인기가 있다.
github.com/bhargavvader/personal/blob/master/notebooks/text_analysis_tutorial/topic_modelling.ipynb
위 주피터 노트북을 참고하여 마이클리의 뉴스 기사 말뭉치를 로딩하는 과정을 실행한다. 노트북 코드는 대부분의 사용자가 사용할 수 있도록 파이선 2.7을 기반으로 개발됐지만 파이썬 3에서도 문제 없이 동작한다. 말뭉치는 2000년부터 2001년까지 약 300개 문서의 헤드라인을 포함하고 있다. 이 말뭉치는 주제를 일관되게 나타낼 만큼 충분한 크기를 갖고 있지만 학습 시간이 너무 오래 걸릴 정도로 크지 않기 때문에 토픽 모델이 어떻게 동작하는지 설명하기에 충분하다. 여러분이 내부에서 어떻게 동작하는지 살펴보는 것은 매우 고무적인 일이지만 동작 방법보다 무엇을 할 것인지에 더 초점을 맞출 것이다.
우리가 다루고 있는 데이터의 종류에 대한 기억을 되살리기 위해 texts와 corpus가 어떻게 생겼는지 살펴보자. 이는 주피터 노트북의 여덟 번째와 아홉 번째 셀 다음 부분이다.
텍스트는 원본 텍스트 데이터에 대한 토큰화돼 정리된 값들이며 copus는 머신 러닝에 사용할 BOW표현이다.
(1) 잠재 디리클레 할당(LDA)
가장 인기 있는 토픽 모델링 알고리즘인 LDA부터 시작해보자. LDA 모델은 2003년 블레이와 공동 연구자들이 개발한 「Latent Dirichlet Allocation」 논문에 게재됐다.
앞에서 논의한 바와 같이 LDA는 단어 분포로 이뤄진 주제 분산을 이용해 말뭉치를 모델화하는 데 도움을 준다. 단어 분포한 무엇일까? 젠심은 이를 매우 쉽게 이해하고 활용 할 수 있도록 해준다.
모델을 생성하는 건 무척 쉽다. 단지 말뭉치, 사전 매핑 그리고 사용할 모델의 토픽 수를 지정한다. 이제 학습된 모델이 있으므로 데이터 세트에 속한 주제가 무엇인지 살펴보자.
튜플의 첫 번째 값은 토픽 ID이고 토픽을 식별하 때 사용한다. 뒤에 이어지는 단어들은 토픽에서 가장 확률이 높은 단어들이다. 단어에 곱해진 숫자는 해당 주제에서 단어가 나타날 확률이다. 주제 토픽을 이해할 수 있는 확률이 가장 높은 단어들을 확인할 수 있다.
군집화나 문서 단어 컬리링, 토픽 모델 시각화 등 토픽 모델로 할 수 있는 일들이 많다.
(2) 잠재 의미 색인(LSI)
LDA와 함께 젠심에서 처음 구현된 알고리즘은 잠재 의미 색인(LSI,Latent Semantic Indexing)이다. LSI 모델을 설정하려면 gensim.models를 통해 임포트하고 LDA모델을 설정했던 방법과 동일하게 설정하면 된다.
주제를 LDA 출력보다 많거나 적게 나타낼 거시다. 숫자의 의미를 해석하는 것은 쉽지 않고 LSI가 수행되는 SVD와 관련돼 있다. SVD는 행렬을 분해하기 위한 인수 분해 방법이다. LSI가 실제 동작하는 방식에 대한 자세한 수학적 정보를 확인하려면 디어웨스터와 공동 연구진이 발표한 원본 논문 「Indexing by Latent Semantic Analysis」와 호프만이 간행한 「Probabilistic latent semantic indexing」을 참조하면 좋다.
citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.62.1152&rep=rep1&type=pdf
'인공지능, 자연어처리' 카테고리의 다른 글
- Total
- Today
- Yesterday
- Tutorial
- 텍스트분류
- web
- CBOW
- 심리학
- AI
- 코딩하는 신학생
- word embedding
- 그림자
- Skip-gram
- 인공지능
- WebProgramming
- django
- Python
- 코딩테스트
- 젠심
- 자연어처리
- 알고스팟
- lstm
- text classification
- 로버트존슨
- Mikolov
- word2vec
- word vector
- Polls
- 분석심리학
- 융
- 단어표현
- 당신의 그림자가 울고 있다.
- NLP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |