감정의 이해란...? ( coreML )

cheshire0105·2024년 1월 30일

iOS

목록 보기
9/45
post-thumbnail

들어가며...

지금 당신의 감정이 어떤 감정인지, 당신은 명확히 알고 있는가?. 나는 아직 잘 모르겠다. 분노의 감정 인줄 알았는데 감정이 일으킨 원인을 알아보고자 되짚어보면 사실 그건 서운함이거나, 섭섭함, 미안함. 일때가 있었다. 그렇다면 어떤 감정이 들 때 그 감정이 뭔지 정확히 알고 있지는 않은거다.

정확한 감정의 중요성.

작가 김영하는 학생 시절 학생들에게 "짜증난다" 라는 단어를 금지 했다고 하는데 아마 같은 이유 일 것이다. 본인의 정확한 감정을 아는 것은 곧 나의 상황을 정확히 인지 한다는 것일 뿐만 아니라, 어떤 감정인지 근사치를 찾으면 그에 맞는 적절한 대처도 다를 것이다.

또한 정확한 감정을 찾기 위해 그 감정의 발화를 찾는 방법 또한 감정을 다스리고 아는 좋은 과정이다. 필연적으로 일의 순서를 거꾸로 되짚으면서 감정의 근원을 종합하고 찾게 되는데 그 과정을 통한 다는 것 자체가 우리의 감정을 좀 더 객관적으로, 성숙한 방법으로 마주하는 길이겠다.

This is not a Diary

나는 내가 지금 어떤 감정인지 적으면서 내가 지금 어떤 이유로 어떤 감정이 들었고, 그 감정이 순간적으로 든 지금의 감정과 어떻게 다른지 마주하는 경험을 했다. 순간의 감정과 실제 감정은 달랐고, 기록 한다는 것 자체와 기록의 결과를 마주하며 내 현재 감정을 좀 더 객관적으로 마주 하며 다스리는 경험을 한 것이다.

그런 차원에서 한가지 토이 프로젝트를 진행 했다. "This is not a Diary".

기록하는 행위를 통해 감정을 마주하고 그 감정의 결과를 토대로 간단한 조언을 해주는 간단한 앱이다. 이 앱을 개발하기 위해선 감정을 분석 하는 기능이 필연적으로 있어야 하는데 나는 그 기능을 애플의 coreML을 활용해서 구현 해봤다. 아래의 설명은 이 토이 프로젝트를 진행 함에 있어서 coreML의 사용법과 느낌을 기록한 글이다.

coreML

coreML은 애플의 자체 로컬 기기 만으로도 머신 러닝을 할 수 있게 해주는 프레임워크이다. 서버를 통하지 않고 기기 만으로 실행 하기 때문에 보안이 높아지고, 배터리와 swift를 사용 하는 나로써 최적화 되어 있는 최적의 프레임 워크인 셈이다. 내 앱의 컨셉은 인터넷을 통하지 않고, 개인 적인 일화를 기록하는 앱 이기 때문에 보안이 중요하다. 그렇기 때문에 coreML을 고려 하게 되었다.

그렇다면 감정을 어떻게 분석 해야 할까? 사람의 감정은 어디서 분석 할 수 있을까? 그리고 그 데이터는 어떻게 구할 수 있을까?

머신 러닝의 개요는 정확히는 다를 수 있으나 내가 찾아본 바로는 이렇다. 많은 양의 데이터를 주고 그 데이터를 분석하여 새로운 데이터를 주었을 때 이전의 학습한 데이터를 바탕으로 새로운 데이터는 ~일 것이다.라고 예측 하는 것이다. 그렇다면 그 많은 양의 데이터가 있어야 한다.

우선 비슷한 강의를 참고 하고 그 강의에서의 데이터를 사용 했다.
출처 : Sentiment Analysis(Text Classification) using CoreML & CreateML in Xcode 15 and IOS17

이 강의는 감정 데이터 셋을 머신 러닝 하여 그 감정을 이모지로 나타냈다.

그 강의에서 사용한 데이터는 트위터 내용에 따른 감정을 분류 하여 정리 해놓은 데이터들이였다.

이런 식으로 문장과 감정을 매칭 시켜 놓은 데이터 들이다. 참고로 이 데이터 들은 .cvs 파일로 만들어져 있어야 분석 할 수 있다고 한다. 또한 .cvs는 맥의 엑셀 같은 numbers 앱을 통해서 편하게 읽을 수 있다. 다만 영상에서도 나오지만 머신 러닝을 하게 하려면 형식에 맞게 파일을 편집 해야 한다. 행과 열에 text, label 이렇게 요구 하는 형식에 맞게 적혀 있어야 한다.

그렇지 않으면 오류를 띄운다. 그렇다면 .cvs 파일을 편집 해야 하는데 numbers 앱으론 편하게 읽을 수 있다는 장점이 있지만 저장을 하게 된다면 .numbers 형식으로 저장 되어 수정 내용을 반영 할 수 없다는 단점이 있다. 그렇기 때문에 터미널로 접근 하고 편집 해야 한다.

우선 .csv 파일이 있는 폴더 터미널로 접근 해서

vi koreanData.csv ( 파일명 ) 

으로 접근 한다. 그러면

파일이 터미널로 열리게 된다. ( 지금은 파일이 편집 된 상태라 제대로 나오는데 아마 파일 형식에 맞게 첫째 줄이 다른 텍스트로 적혀 있을 것이다. 터미널 편집 방법은 터미널 편집 방법을 참고 했다. )

편집을 완료 하면 머신러닝을 위한 데이터가 셋팅이 완료 된다. 이제 그 데이터를 가지고 기기에 학습을 시키게 된다. 학습은 create ML 이라는 앱을 이용 한다. Xcode 처럼 자체 툴 같은 느낌이다.

데이터를 올바르게 셋팅 했다면 다음과 같은 화면이 뜰 것이다. 그 후에

버튼을 누르면! 기계는 이 데이터를 기반으로 문장과 감정을 학습 한다. 실로 놀랍지 않은가.

프리뷰를 통해 어떤 결과가 나오는지도 볼 수 있다.

이제 그 학습 완료 데이터들을 프로젝트 파일에 추가 하면, 데이터를 사용 할 수 있다. 네트워크, 로그인, 아무것도 사용 하지 않는다. 오로지 로컬 환경에서 돌아가는 머신 러닝이다.

    func analyzeTextEmotion(_ text: String) {
        if isKorean {
            let model = koreanEmotionText() // 한국어 감정 분석 모델 클래스 사용
            guard let prediction = try? model.prediction(text: text) else {
                resultLabel.text = "감정 분석 실패"
                return
            }

            // 한국어 감정에 따른 조언을 선택하여 UI 업데이트
            let randomAdvice = getRandomKoreanAdvice(for: prediction.label)
            DispatchQueue.main.async {
                self.resultLabel.text = "\(randomAdvice)"
            }
        } else {
            let model = emotionTextML() // 영어 감정 분석 모델 클래스 사용
            guard let prediction = try? model.prediction(text: text) else {
                resultLabel.text = "감정 분석 실패"
                return
            }

            // 영어 감정에 따른 조언을 선택하여 UI 업데이트
            let randomAdvice = getRandomAdvice(for: prediction.label)
            DispatchQueue.main.async {
                self.resultLabel.text = "\(randomAdvice)"
            }
        }
    }

데이터의 결과를 분기 처리 해서 다음과 같은 코드를 만들었고 텍스트에 따라 감정을 분석 하고 조언들을 바인딩 하는 로직을 만들었다.

이렇게 간접적으로 머신러닝을 사용 해봤다. 영어는 데이터의 분류가 세가지 밖에 되지 않았고, 한국어는 AI허브 라는 곳에서 가져온 데이터를 사용 했는데 한국어는 조금 데이터의 분류가 애매 한 경우가 있었다. 분노까진 아닌데 분노라고 분류 하거나 놀람을 공포로 분류 하거나... 그래서 결과도 내가 원하는 방향으로 가지 않았다. 학습 데이터가 명확하고 정확해야 그걸 학습 시키고 분석 시킬 데이터의 결과도 원하는 방향으로 나오는거 같았다. 그렇기 때문에 한국어를 입력 하면 원하는 감정이 나오지 않을 때가 있었다.

감정이란...?

최근 거대 인공 지능의 등장과 자연어 처리의 발전, 데이터 분석과 빅 데이터의 증가로 인간과 AI 지능이 견주게 되는, 불과 몇 년 전만 해도 있을 수 없는 일들이 현실로 일어나고 있다. 나 역시도 GPT가 없었다면 작업이 불가능한 지경 까지 왔다.
오직 인간만이 할 수 있다고 여긴 일들을 AI는 하루가 멀다 하고 그 한계를 뛰어넘는 모습을 보여주고 있다. 모방을 넘어 창조 까지...

인간의 뇌는 거대한 양자 컴퓨터의 성능이라는 기사를 본적 있다. 컴퓨터는 무엇인가. 기억과 연산을 빠르게 하는 기계이다. 양자의 능력까진 아니지만 거대 연산이 인간의 생각과 다르지 않다는 사실은 분명히 알겠다. 감정은 무엇일까. 나는 유기체의 감정이란 기계와 달리 조금 더 고차원의 무형의 무언가 라고 선민 사상을 가지고 있었을 거라는 생각이 문득 들었다. 데이터를 재차 상기하고 분석 하는 것을 추억이고 데이터의 순간의 분석이 감정이라면 어쩌면 우리는 그리 복잡하지 않을 지도 모른다.

순간 드는 감정을 몰라 준다고 화를 내고, 그 감정에 놀라 되레 분노를 하고, 과거의 데이터가 현재의 분석에 영향을 미치게 되어 성숙하지 못한 방법으로 감정을 표현하고...
어쩌면 우리는 데이터와 분석이 습관화 되어 그걸 분석한다고 생각하지 않고 느낀다 라고 표현하는건 아닐까... 싶다.

많지 않은 데이터를 분석 시키면 꽤 근사치의 측정 값이 나오는걸 보면 우리의 감정과 생각은 그리 고차원의 것은 아닐지 모르겠다.

더 많은 데이터를 쌓고 연산이 좋아진다면... 우린 정말 지금 현실을 살고 있는걸까? 통 속에 있는걸까?

0개의 댓글