brunch

You can make anything
by writing

C.S.Lewis

by 기획하는 족제비 Aug 18. 2023

챗 GPT를 이용한 회고록 텍스트 마이닝

Python & KoNLPy를 안 써도 된다.


인트로

6월 달부터 데일리 노트를 시작하며 정했던 목표 중 하나는 데일리 노트를 활용한 텍스트 마이닝을 하는 것이었다.


회고록 텍스트 마이닝의 목적은 월간 회고를 진행할 때 질 좋은 성찰을 하기 위한 참고 자료를 마련하는 것이고, 이를 위해 1) 내가 자주 사용했던 단어를 확인한 후 2) 한동안 빠져있던 단어, 생각을 복기하는 것을 마이닝의 목표로 정했다. (사실 재밌어서 하는 것)




왜 챗 GPT로 하는가?

원래는 파이썬과 KoNLPy를 활용할 생각이었, 챗 GPT를 사용해 키워드 파싱부터 워드 클라우드, 트리맵 등을 실행할 수 있는 코드를 뽑아낼 생각이었다.


근데 확인해 보니 KoNLPy를 사용하지 않고 분석을 요청을 해도 챗 GPT로 간단한 형태소 분석이 가능한 것을 확인했다. 덕분에 굳이 파이썬을 세팅하지 않고 챗 GPT만 사용해서 이 작업을 해보는 것으로 방향을 변경했다.

KoNLPy(코엔엘파이)는 국문 형태소 분석을 할 수 있는 여러 클래스가 모여있는 파이썬 라이브러리다. NLPy는 영문 형태소 분석이 가능하다.



분석 준비

챗 GPT를 사용하더라도 형태소를 분석하는 행위의 의미는 동일하기 때문에 사전 준비해야 하는 것들이 몇 개 있다.


1. 불용어 리스트업

첫 번째 작업은 불용어를 리스트업하는 것이었다.


불용어(stop word)란 문장 내에서 빈번하게 발생하는 의미를 부여하기 어려운 단어들을 의미한다. 구문(phrase)에 자주 등장하는 단어를 예시로 들 수 있는데, 예를 들어 영문에서는 ‘a’, ‘the’, 국문에서는 '이, 그, 저, 을, 를, 이, 가'를 말할 수 있다. 불용어는 자연어 처리에 있어 효율성을 감소시키기 때문에 분석을 하기 위해서 필수로 거쳐야 하는 과정이다.


불용어 리스트업은 이 분의 포스팅을 참고했다. 실제로 분석하다 보면 불용어는 지속적으로 추가될 것이다.

ⓒ 327roy


2. 분석 결과물 선택

텍스트 마이닝 시 할 수 있는 기본적인 분석 결과물을 챗 GPT에게 물어보고 선택했다. 가장 무난한 단어 빈도수 파악워드 클라우드를 해 볼 예정이다.

ⓒ 327roy


3. Prompt 작성

분석은 챗 GPT의 Code interpreter를 사용할 생각이다. 이것은 파이썬 기반의 코드를 챗 GPT가 직접 짜고 실행하는 것인데, 1) Pandas, Numpy와 같이 분석과 관련된 라이브러리를 기본적으로 제공하고 있으며, 2) 데이터 파일을 업로드할 수 있다는 장점이 있다. (단, 유료 버전만 이용 가능)


Prompt 엔지니어링을 여러 기법이 있지만, 나는 보통 아래의 기준을 참고하여 Prompt를 만든다.


#1. 무엇을 지시할 것인가(request)

생성 AI에게 '무엇'을 명령할 것인지를 작성한다.


이때 명령할 것의 형상이 명확할수록 좋다. 나의 경우 형상을 수식하는 말들은 Prompt의 뒤로 보내는 편이고, 명령문은 최대한 단순하게 작성한다. 수식어가 많을수록 명령을 해석하기 힘들어지기 때문이다.


#2. 맥락이 무엇인가(context)

'누가, 어떻게, 언제, 어디서, 왜' 하는지와 같은 세세한 정보를 제공한다.


생성 AI는 당신이 어떤 경험을 거쳐서 요청을 하게 되었는지 그리고 어떤 결과를 얻고 싶은지 모른다. 따라서 보다 정확한 대답을 얻기 위해서는 생성 AI에게 이러한 맥락을 설명해줘야 한다.


#3. 참고 자료가 있는가(example)

생성 AI가 좋은 답변을 할 수 있도록 일종의 가이드라인을 제시한다.


챗 GPT의 Code interpreter를 사용한다면 CSV 등 데이터 구조를 업로드하거나 혹은 PDF reader, URL reader와 같은 플러그인을 사용하면 좋다.


아래는 이를 기준으로 작성한 Prompt 사진이다. 보통 Prompt는 영문으로 작성하는데, 어차피 국문 텍스트 마이닝것이어서 그냥 국문으로 작성했다.

ⓒ 327roy



회고록 텍스트 마이닝 과정

간단하게 회고록 텍스트 마이닝을 진행하는 과정을 도식화해 보았다.

ⓒ 327roy


1. 데일리 노트 작성

ⓒ 327roy

매일 인상 깊었거나 배웠던 점을 노션의 데일리 노트 DB에 차곡차곡 쌓아둔다. 최초에는 날 것으로 쌓았다가 주간 회고를 작성하며 이를 한 번 더 다듬는 과정을 거친다.


분석을 하기 위한 텍스트 기반의 로우 데이터를 모으는 작업이며, 분석의 질을 높이기 위해 모든 데이터는 맞춤법 검사기를 사용하여 문장의 띄어쓰기까지 동일한 규칙을 적용시킨다.   


해당 노션의 DB를 설계할 때는 CSV로 추출하는 것을 고려해 꼭 필요한 컬럼만 넣었다. 각 컬럼의 정의는 아래와 같다.


1. 날짜: 노트의 작성일자를 의미한다.

2. 주 차: 노트를 작성한 주 차를 의미한다.

3. 이름: 노트의 요약된 내용을 의미한다.

4. 노트: 노트한 내용을 의미한다. 제일 중요.

5. 메타 태그: 노트의 키워드를 의미한다. 후에 매핑을 위한 용도로 작성 중

6. 비고: 노트에 대한 메모를 의미한다.

7. 체크박스: 저것은 브런치 주간 회고에 업로드된 여부를 의미한다. 분석과는 무관한 데이터다.


2. 데일리 노트 DB 추출

노션의 데일리 노트 DB를 CSV 파일로 추출한다. 해당 DB에 접속한 후, 우측 상단의 내보내기를 통해 추출할 수 있다.

ⓒ 327roy


3. 분석

챗 GPT의 Code interpreter와 미리 제작해 놓은 Prompt를 활용하여 분석을 진행한다.


#1 파일과 아까 만들어둔 Prompt를 입력한다.

ⓒ 327roy

#2 결과를 확인하고 후보정을 진행한다.

('시', '해당'도 불용어 처리했어야 했는데 깜빡했다.)

ⓒ 327roy

#3 현재 챗 GPT의 워드 클라우드 라이브러리는 영문만 알아먹는다. 따라서 추출한 단어를 영어로 대체한 후 시각화를 요청한다.

ⓒ 327roy

#4 챗 GTP가 내용을 가시화해준다. 정렬과 여백 조정 등 몇 가지 튜닝을 더 해주면 작업이 끝난다.

ⓒ 327roy


분석 결과

6, 7월 데일리 노트에서 추출한 단어의 사용 빈도수는 아래와 같다.

제품(Product): 50회

개발(Development): 27회

스프린트(Sprint): 21회

기획(Planning): 19회

애자일(Agile): 16회

시(Time): 14회

유저(User): 14회

해당(Relevant): 13회

얘기(Talk): 13회

업무(Task): 13회


텍스트의 빈도수를 워드 클라우드와 막대그래프로 시각화한 결과는 아래와 같다.

ⓒ 327roy




그래서?

생성 AI를 사용할 때마다 느끼는 것은 사용하기 나름의 도구라는 것이다. 단순히 검색 엔진을 대신하는 용도로도 사용할 수도 있지만, 나아가 자신의 생각을 검증하거나 원하는 목적을 달성하기 위한 방법이 될 수도 있다.


그래서 생성 AI가 더욱 발전되어도 사람은 사고를 멈추면 안 되며, 이를 어떻게 더 잘 사용할 수 있을지를 탐구할 필요가 있다. 이것이 내가 생성 AI를 좋아하는 이유다.


주변의 아는 대표님이 현재 생성 AI Prompt 엔지니어링 기법에 대한 책을 작고 중인데, 그 책이 어서 완성되었으면 하는 바람.


별도로 이 글의 분석 내용은 월간 회고를 작성할 때 사용할 예정이다.




참고 자료

https://deep.chulgil.me/hangugeo-bulyongeo-riseuteu/

https://thebook.io/080289/0684/

https://www.promptingguide.ai/kr/introduction/basics


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari