bitToken2

신종화 (Jowoncni, CRO)

6/2/23

발표자 소개

  • 사회학박사 / E-MBA(IT Biz.)
  • 지성사-개념 연구, 텍스트 마이닝 (학술, 언론)

bitToken2 개발 배경

  • 지난 10여년의 언론 데이터 분석

    • 정부/공공 프로젝트 (과기부, 행안부, 지자체)
    • 논문[+특허, 저서, 번역] / 언론 기고 / 비영리활동(공공의창)
    • 컨설팅(정치)
  • 찾기: 주제어 중심의 의미 파악 ->

    시계열 묶기: (중장기) 트렌드 파악 - >

    수집 및 (단기)목록화: 의미적 요약기법 개발

개인적 딜레마 [1]

  • 나는 누구인가? 내 위치는? 내 역할은?
    • 패키지 개발을 하지 않는다 [나는 개발자가 아니다]
      • R manuals 기초 교육, 사회과학 방법론 교육, 컨설팅, 분석
    • R 기초 교육 및 번역(한글화) 집중한다
      • R Commander 메뉴(메세지) 한글화 관리 10년
      • R in Action 번역, R manuals 한글화
  • 매일 반복의 텍스트 마이닝 작업: 쌓여가는 .R, .rmd
    • 텍스트마이닝 기술문서에 대한 아쉬움
      • 수집-전처리-시각화에 집중, 반면 언어적 지형 무관심

개인적 딜레마 [2]

  • 배고픈 수집가 vs. 배부른 요약[창작]가
    • AI기반 텍스트 마이닝 도입의 어려움
    • 저사양, 저용량 컴퓨팅 환경으로 불가피한 ND&PU 선택
  • 토큰화 테크닉 활용: 그룹화 및 대표 선택

참고: Narrowing Down & Picking UP

  • 문제의식:

    • 본문의 요약은 제목? <- 작성자의 지능기반 요약
    • 제목의 요약은? 주요 단어
    • 핵심 토큰은? 첫 3~4개 단어에 등장
  • 당면이슈

    • 10개 이하로 묶어야 함: 어떤 classification 기법?
    • 의미적 전달(제목) + 설명적 근거(본문)의 최소 토큰 수 점검
    • 이상치 제거라는 개념을 텍스트마이닝(토큰화)에 도입?

한편, 습관이 문제

  • 급하면, 편집기 사용보다는 프롬프트로:
    • 파이프 사용 불편
    • 한줄 코딩의 유혹
  • 스크립트의 스크롤 압박: 사고의 흐름 -> 정리정돈 필요
  • 비개발자를 위한 UX 고민 시작
  • .rmd/ .qmd 관리: 짧은 코드가 좋다!

결심: 패키지 개발하자

  • chatGPT 활용
    • R 생태계에서 패키지 개발 환경 재점검
      • 시작은, Github -> 향후, CRAN
    • 프롬프트 엔지니어링의 언어, 영어/한글
      • 질문은 한글로,
      • 최종 결과물은 영어로
    • chatGPT로부터 가상의 데이터셋 제작

bitToken2 소개

저장소: https://github.com/sens5900r/bitToken2

require(devtools)
install_github("sens5900r/bitToken2")
require(bitToken2)
help(package="bitToken2")

왜, 띄어쓰기(whitespace)+ 토큰?

########################
# 후쿠시마 포함 제목 분석#

# last_24_hours: 가상의 언론 데이터셋
# 제목(title), 본문(body)
########################

last_24_hours %>%
  filter(str_detect(title,"후쿠시마")) %>%
  pull("title")   # 제목에서 후쿠시마 찾기
  
last_24_hours %>%
  filter(str_detect(title,"^후쿠시마")) %>%
  pull("title")   # 제목에서 후쿠시마로 시작하는...찾기

last_24_hours %>%
  filter(str_detect(title,"^\"후쿠시마")) %>%
  pull("title")   # 제목에서 "후쿠시마로 시작하는...찾기 [후쿠시마 인용]

last_24_hours %>%
  filter(str_detect(title,"^\'후쿠시마")) %>%
  pull("title")   # 제목에서 '후쿠시마로 시작하는...찾기 [후쿠시마 인용]

last_24_hours %>%
  filter(str_detect(title,"^“후쿠시마")) %>%
  pull("title")   # 제목에서 “후쿠시마로 시작하는...찾기 [후쿠시마 인용]

last_24_hours %>%
  filter(str_detect(title,"^‘후쿠시마")) %>%
  pull("title")  # 제목에서 ‘후쿠시마로 시작하는...찾기 [후쿠시마 인용]

library(purrr)
get_first_word <- function(x) {
  str_split(x, "\\s")[[1]][1]
}

last_24_hours %>%
  filter(str_detect(map_chr(title, get_first_word),"후쿠시마")) %>%
  pull("title")   # 제목의 첫 토큰에서 후쿠시마가 포함된 사례 찾기

bitToken2 functions

require(bitToken2)
bitToken_search(last_24_hours, "title", "후쿠시마") # title 변수에서 후쿠시마찾기
bitToken_search(last_24_hours, "title", "후쿠시마", location=1) 
# title 변수에서 첫 토큰에 후쿠시마 있는 사례 찾기
bitToken_info(last_24_hours, "body", add=TRUE) # body 변수의 토큰기준 정보 요약
bitToken_count_m(last_24_hours, "body", "후쿠시마", sum_info=TRUE)$counts
bitToken(chatGPT_news1, "title")
bitToken_m(last_24_hours, "title", filter_var="category", filter_vals="정치")
# category 변수에서 "정치"에 해당하는 title 변수의 토큰화 리스트
require(tidyverse)
require(bitToken2)
weekly %>%
  bitToken_search("title", "후쿠시마", location=3) # pipe 연계 가능

bitToken2 개발방향

  • 대용량 텍스트 데이터 처리
    • 멀티 코어 사용, R 코드 개선
    • python, Julia 이식 검토
  • 방법론 내재화
    • Narrowing Down & Picking Up
    • 시각화 개선
  • 국제화
    • 현재, 한글 언론 데이터 분석에 특화
    • 해외 언론 분석용으로 미시적 튜닝 요구(관사, 전치사 )

교훈: chatGPT 평가

  • 변화: 구글 검색량 급격한 감소/ 1인 프로젝트 기대
  • 미시적 개선에 탁월한 성과 (시간비용 감소)
    • 양질의 Q&A 도움말 서비스
    • 전처리, 데이터 만들기, 코드 검사 및 추천
  • 국제화: 외국어 글쓰기 제약 해결 (도움말/주석 작성)
    • Readme, News, 초벌, 번역 감수, 언어 문법 점검
    • 다국어/다국적 프로젝트에 큰 기여

부록: 메세지 한글화

  • 참여 프로젝트
  • chatGPT 활용 경험
    • 평소 익숙한 툴, 언어, 매뉴얼 번역에 활용시 생산성 높음
      • 기술문서의 특징(목차, 메뉴, 인덱스, 코드 ) 사전 파악
    • 앞으로도 계속 사용할 툴, 언어, 매뉴얼의 번역 선택
      • 오기 수정 및 글 윤색의 진화적 흐름에 대한 책임의식