자연어 분석 할만한 데이터가 무엇이 있을까 하다가,
마침 이전에 일했던 ESC라는 비영리 과학기술인 사단법인에서 수행한 설문조사가 눈에 들어왔다.
주관식 답변이 이미지 형태로 수록되어 있었다.
이를 다운 받아서 ChatGPT에게 txt로 만들어달라고 하니,
"시스템에 한국어 언어 데이터(kor.traineddata)가 설치되어 있지 않아 한국어 인식을 할 수 없습니다."
라고 답변이 왔다.
그래서 내 컴퓨터에서 필요한 패키지 설치해서 텍스트 인식하는 방법 알려달라고 했다.
물론 이렇게 인식 해도 인식이 잘 안되기도 해서,
거의 절반 정도는 일일히 수작업으로 타자를 쳐서 옮겼다.
주관식 답변이 74개 밖에 되지 않아서 그래도 할만 했다.
* 형태소 분석과 WordCloud
https://blog.naver.com/ekgo48sun/223909029269
자세한 방법과 코드는 위 게시물에 정리해두었다.
형태소 분석은 몇 가지 패키지를 활용해보았는데, 가장 잘 되는 Mecab을 활용했다.
WordCloud 뿐만 아니라, Kmeans cluster 분석 했을 때에
Mecab으로 형태소 분석한 경우에 클러스터가 가장 잘 나뉘었다.
다른 형태소 분석기는 대부분의 문장이 하나의 클러스터에 몰려있어서
클러스터 분석이 의미가 없는 수준이었다..
WordCloud는 Counts Matrix를 활용했고,
의미 없는 형태소가 부각되어 나타나면 불용어 제거 목록을 업데이트 했다.
* 클러스터링 분석 - KMeans
다음으로 클러스터링 분석을 수행했다.
몇 가지로 분류할 때 가장 적절할지 확인해보려고 이것 저것 계산해보았는데,
별로 주요한 수가 발견되지는 않았다.
TF-IDF Matrix로 KMeans 클러스터링을 몇 개로 나누는게 적합한지 판별하는 실루엣 점수와 Elbow Method를 수행해 보았다.
실루엣 점수가 0.4 이상이어야 유효하다고 판단한다는데, 모든 경우에서 실루엣 점수가 낮게 나왔다.
� 실루엣 점수 (k=2~9)
k=2, 실루엣 점수: 0.0189
k=3, 실루엣 점수: 0.0103
k=4, 실루엣 점수: 0.0145
k=5, 실루엣 점수: 0.0078
k=6, 실루엣 점수: 0.0068
k=7, 실루엣 점수: -0.0004
k=8, 실루엣 점수: -0.0045
k=9, 실루엣 점수: -0.0046
Elbow Method는 SSE 값 경사가 완만해지는 지점의 k가 적합하다고 판단한다.
그런데 전반적으로 그런 경향을 관측되지 않았고,
그나마 국소적으로 봤을 때 k=2, 3을 시도해볼 수 있을 것 같았다.
k = 2
==== KMeans 클러스터 대표 키워드 ====
[클러스터 0] 문서 개수: 45
과학, 지식, 고위, 태도, 합리, 공직자, 인권, 근거, 문제, 정책
[클러스터 1] 문서 개수: 29
사람, 공직자, 고위, 소양, 지식, 과학, 기본, 종교, 임명, 생각
k = 3
==== 클러스터 대표 키워드 ====
[클러스터 0] 문서 개수: 34
과학, 태도, 합리, 지식, 고위, 인권, 설문, 공직자, 진화, 나라
[클러스터 1] 문서 개수: 12
소양, 기본, 사람, 공직자, 못하, 수준, 상식, 갖춰야, 사회, 고위
[클러스터 2] 문서 개수: 28
공직자, 사람, 지식, 과학, 고위, 임명, 정책, 생각, 종교, 신념
결과를 해석하기 전에 염두에 두어야 할 점은,
이 설문은 "고위공직자의 과학 지식 수용에 대한 태도가 직무 수행이 미치는 영향"에 관한 것이다.
그렇기 때문에 [고위, 공직자, 과학]이 모든 클러스터링 분류에 등장하는 것은 충분히 가능한 일이다.
다만 이 설문이 2024년 9월 임기를 시작한 안창호 국가인권위원회 위원장의 취임 과정에서의 논란이 계기가 되었다는 점에서,
[인권, 진화] 등은 해당 사안에 직접적으로 영향을 받은 단어라고 판단해 주요 단어에서 제외했다.
[사람, 나라, 사회, 생각, 지식] 등은 포괄적인 단어여서 주요 단어에서 제외하고,
[갖춰야]는 특정 문장에만 존재할 가능성이 있기에 제외했다.
[기본, 수준]은 판단하기 애매한데, '수준'은 맥락에 따라 긍/부정이 달라 질 수 있기에 제외하고,
기본은 만족해야하는 최소 조건이라는 의미이니 남겨두었다.
처음에는 상위 문서를 하나씩만 뽑아보았는데,
예를 들어 어떤 문장은 "합리"가 세 번이나 등장하여 클러스터 0번의 대표 문장으로 선정되었다.
이런 경우는 대표성이 있다고 보기 어렵기 때문에,
중복으로 포함하는 경우는 점수를 매기지 않았다.
그렇게 해도 고유 키워드 수 자체가 적어서,
대표 문장으로 여겨질 수 있는 문장들이 중복으로 선정되었다.
그 중에 가장 적합한 대표 문장을 뽑는 것은 아무래도 분석가의 주관이 들어갈 수밖에 없는 영역인 듯 하다.
그래서 내가 뽑은 중심 문서는 이러한데,
전반적으로 설문의 답변들이 모두 '합리'를 요구하면서도 상당히 감정적인 반응을 보이고 있다고 느꼈다.
====== [클러스터 0] 중심 문서 ======
▶ 중심 문서 (인덱스: 26, 고유 키워드 수: 2)
과학 지식을 대하는 태도에서 가치관이 합리적인지 아닌지가 드러나기 때문에 직무를 대하는 태도를 엿볼 수 있습니다. 그러니 과학 지식을 두고 궤변을 내놓는 고위공직자는 배제돼야 합니다.
====== [클러스터 1] 중심 문서 ======
▶ 중심 문서 (인덱스: 36, 고유 키워드 수: 2)
고위공직자는 과학 지식에 대해 상식적으로 갖고 있어여 하며, 그렇지 않다면 부족한 소양에 대해서 창피해하거나 배울 자세가 되어 있어야 한다.
====== [클러스터 2] 중심 문서======
▶ 중심 문서 3(인덱스: 10, 고유 키워드 수: 3)
고위공직자는 전체 국민 대상의 정책을 계획 실행하는 위치로서 과학적 지식이 전문가들의 보편적 지식체계를 받아들일수 있는 사람이어야 합니다. 면에서 작금 임명되고 있는 고위공직자들은 그 자격이 현저히 떨어지며 부적합이라 생각되며 따라서 임명되어서는 안 됩니다
* 클러스터링 분석 - LDA
Counts Matrix로 LDA 나눌 떄 몇 개의 주제가 적절한지 판별하는 Coherence Score를 계산해보았다.
TF-IDF Matrix를 활용하고 싶었는데, 아쉽게도 Coherence Score는 그럴 수가 없었다.
그래서 그냥 참고용으로 그려보았다.
주제가 10개일 때 가장 적절하다고 나왔는데, 주관식 답변 74개에서 10개로 나누는건 과적합이라는 생각이 들었다.
그리고 일일히 수작업으로 타자 치면서 전반적으로 살펴봤던 경험에 비추어 보아도 10개의 클러스터는 너무 많다고 느껴졌다.
코드: https://blog.naver.com/ekgo48sun/223913709900
� LDA 주제별 상위 단어
� Topic #1: 지식, 과학, 공직자, 사람, 고위, 종교, 태도, 소양, 상식, 생각
� Topic #2: 과학, 문제, 근거, 인권, 사회, 공직자, 진화, 고위, 차별, 생각
� LDA 주제별 상위 단어:
� Topic #1: 지식, 종교, 공직자, 고위, 과학, 합리, 인물, 사람, 결정, 개인
� Topic #2: 근거, 못하, 과학, 문제, 기반, 사회, 발언, 국민, 사고, 정책
� Topic #3: 과학, 공직자, 사람, 지식, 고위, 생각, 임명, 태도, 진화, 인권
LDA 분석은 두 가지 결과를 내놓는다.
주제별 주요 단어와 특정 문서가 특정 주제를 얼마나 포함하는지 알려준다.
다만 주제가 무엇인지는 분석하는 사람이 유추해야 하기는 하지만,
주제별 대표 문장을 참고할 수는 있다.
특정 문서가 특정 주제를 얼마나 포함하는지를 알려주기 때문에
Kmeans 보다는 상대적으로 길이가 더 긴 답변들이
더 높은 점수를 받는 경향이 있는 듯 하다.
====== � Topic #1의 대표 문서 ======
▶ 대표 문서 (문서 인덱스: 5, 토픽 점수: 0.8613)
굉장히 전문적인 이공계 지식이라도 정책 설립이나 업무에 필요하다면 요약본을 통해서라도 알아야 한다고 보는더, 지엽적인 부분을 모르는 것도 아니고 보편적인 과학 지식을 거부하는 사람은 고위 공직자뿐만 아니라 시민들에게 영향을 끼치는 어느 자리든간에 부적합하다고 봅니다. 추가적으로, 대한민국은 종교와 정치가 분리된 사회인데 공적인 자리에서 종교적 목소리를 내는 것부터가 결격 사유에 해당한다고 생각합다.
====== � Topic #2의 대표 문서 ======
▶ 대표 문서 (문서 인덱스: 11, 토픽 점수: 0.8417)
과학적 탐구와 사실에 기반한 교육이 무엇보다 중요한 시기에 정부 고위 관계자가 이러한 부적절한 발언을 한것만 가지고도 피면되어야 함에도 후보로 정문회에서 당당하게 발언하는 것을 보고 경악을 금치 못했습니다. 여기에 대한 위험성을 깊이 인식할 필요가 있어 보입니다.
====== � Topic #3의 대표 문서 ======
▶ 대표 문서 (문서 인덱스: 1, 토픽 점수: 0.8737)
저는 과학적으로 검증된 사실과 이론을 지지하고, 진화론에 근거한 연구를 하고 있으며 포괄적 차별금지법도 찬성입니다. 그러나 다른 신념을 가지고 있는 사람이 우리 사회에 분명히 있으며 이들의 선택과 인격을 존중하는 문화가 필요하다고 생각합니다. 논란이 되는 고위 공직자 후보의 실제 발언을 검토해 보면, 창조론 부정이 아닌 창조론과 진화론을 모두 가르쳐야 한다고 말하였고, 현재 형태의 차별금지법이 입법될 때 가져올 수 있는 결과를 검토해야 한다고 했습니다.
* LDA와 Kmeans의 비교
LDA는 문서 안에 내재된 주제(Topic)의 분포를 추정하는 데 초점을 둔 확률적 생성 모델이다. 하나의 문서는 여러 주제가 섞여 있다고 가정하며, 각 주제는 특정 단어 분포를 따른다고 본다. LDA는 이러한 구조를 바탕으로 문서를 주제 분포로, 주제를 단어 분포로 표현하며, 이 과정은 베이지안 추론과 Dirichlet 분포에 기반한 수학적 모델로 학습된다. 주제별 핵심 단어와 문서별 주제 비율을 통해 문서의 의미 구조를 해석할 수 있기 때문에, 주제 추출, 내용 해석, 문서 요약 등에 자주 활용된다.
반면, KMeans는 문서 간의 유사성을 수치적으로 측정하여 군집(Cluster)을 형성하는 비확률적 거리 기반 모델이다. 각 문서는 TF-IDF와 같은 벡터로 표현되며, 유클리디안 거리(또는 코사인 거리 등)를 기준으로 중심점을 반복 갱신하면서 문서를 하나의 클러스터에 할당한다. 따라서 KMeans는 각 문서를 하나의 그룹에만 속하도록 분류하며, 문서 분류, 유사 문서 그룹화와 같이 빠르고 직관적인 군집화가 필요한 상황에 적합하다.
정리하자면, 문서를 복수의 주제 혼합으로 해석하고자 한다면 LDA를, 명확하게 하나의 그룹으로 나누고자 한다면 KMeans를 사용하는 것이 바람직하다. 주제를 해석하고자 할 때는 LDA가, 빠르게 그룹을 나누고자 할 때는 KMeans가 더 적합한 선택이다.
* Zero-Shot 감정 분류
Zero-Shot 감정 분류에 대한 내용은 아래 글에 정리해 두었다.
https://blog.naver.com/ekgo48sun/223910281360