지난 포스트 (기술 흐름의 탐지와 분석 (1))[1]에서는 단일 기술 키워드를 바탕으로 기술 변화의 흐름을 분석했었다. 이번 포스트에서는 인공지능과 관련된 중요한 응용과 세부 기술들 사이의 상관성의 변화를 정량적으로 측정해 보자. 이러한 측정 결과를 통해서는, 특정 응용에 대해 이해하거나 해당 응용을 구현하고자 할 때, 어떠한 세부 기술을 시작점으로 삼아야 하는가에 대한 기초적인 정보를 얻을 수 있을 것이다.
데이터와 실험 방법
이번 실험에서는 2012년부터 2019년 9월까지 Arxiv[2]에 업로드된 Computer Science 분야의 논문들의 abstract를 수집, 활용하였다. 전체 분석과정은 preprocessing, modeling, postprocessing 으로 구성된다. 인포리언스는 내부적으로 Fasttext[3], Latent Dirichlet Allocation[4], 그리고 BERT[5]와 같은 transformer 모델의 장점들을 적절히 융합하여 활용하고자 다양한 실험을 진행하고 있는데, 이번 포스트의 결과는 해당 연구과정에서 나온 가장 기초적인 버전을 활용한 것이다. (따라서, 연구가 진행됨에 따라 더 새로운 연구결과가 나올 수 있다는 점을 미리 밝혀둔다.)
응용과 세부 기술 사이의 상관성은 100점 만점으로 표시하였으며, 하나의 응용에 대해 여러가지의 세부 기술들이 높은 점수를 받을 수도 있는 구조이다.
응용과 세부 기술 사이의 관련성
응용 분야마다 해당 분야를 대표하는 기술이 있으며, 대표 기술은 기술의 발전과정에서 다른 기술에 의해 대체되기도 한다. 특정 기술이 오랜 기간 동안 대표 기술의 자리를 놓치지 않는 경우도 있고, 새롭게 나타난 기술과 융합되기도 한다.
그림 1. Robot 분야와 reinforcement learning 기술과의 상관성 흐름
그림 1은 2016년 이후의 robot 응용 분야과 reinforcement learning 기술과의 상관성을 보여준다. 이 그림에 의하면 최근 4년 동안 reinforcement learning 기술은 robot 응용 분야에서 중요한 위치를 계속 유지해 왔다. 사실, reinforcement learning 의 태동은 꽤 오래 전이며, 최근에 인공지능 기술에 대해 폭발적으로 관심이 높아지기 전부터 꾸준히 활용되어 왔다.
그림 2. Language modeling 분야와 Bert 기술과의 상관성 흐름
Bert[5]는 2018년에 구글에 의해 제시되었으며, recurrent networks 중심의 language modeling 분야의 연구를 transformer 중심으로 이동시키는데 가장 큰 역할을 한 기술이다. 그림 2에서 확인할 수 있는 바와 같이, language 분야와 Bert와의 상관성은 2018년에 시작되어 2019년에는 가장 높은 수치를 나타낸다. 최근에는 language 분야를 넘어 다른 분야들에서도 활용되고 있는데, 이와 관련된 수치는 아래에서 일부 확인할 수 있다.
그림 3. Speech recognition 분야와 Markov 와의 상관성 흐름
딥러닝 기술의 폭발적 응용이 이루어지기 전까지 Hidden Markov Model [6] 은 음성인식 분야를 대표하는 세부 기술의 자리를 차지하고 있었다. 그러나 최근에는 딥러닝 관련 기술들에게 점차적으로 자리를 내어주는 추세인데, 그림 3에도 그러한 추세가 조금씩 나타나고 있다.
본격적인 결과
이제 본격적으로 이번 실험의 결과를 살펴보자. 응용 분야는 모두 8개를 골랐고, 각 응용 분야와의 상관성을 측정할 세부 기술은 총 6개를 선택했다. 상관성은 2012년부터 2019년까지 8년 동안의 흐름을 1년 단위로 측정하여 해가 바뀌면서 어떻게 변화하는지 확인해 본다. 이번 포스트에서 분석 대상으로 선택한 응용 분야와 세부 기술들은 다음과 같다.
응용 분야 : Robot 응용, Chatbot 응용, Drone 응용, Medical 응용, Driving 응용, Face detection 관련 응용, Anomaly 탐지 관련 응용, Translation 응용
그림 4를 보면, Robot 응용 분야에서는 Reinforcement learning 이 초강세를 보이고 있음을 알 수 있다. 이러한 강세는 2012년 이후에서 현재에 이르기까지 거의 변화가 없을 정도이다. 2014년부터 2018년 사이에는 CNN도 강세를 보였으나 2019년에는 많이 약해졌다. RNN은 2014년에 강세를 보인 이후에는 전체적으로 상관성이 하락하고 있으며, GAN과 VAE가 2016년에 잠시 크게 나타났으나 강세를 유지하지는 못한 것으로 보인다.
잠정적으로 결론을 내 보자면, Robot 응용 분야에서 활용되는 인공지능 기술에 대한 이해를 얻기 위해서는 Reinforcement learning 에 대해 먼저 알아보는 것이 바람직할 것이다.
그림 5. chatbot 응용과 세부 기술들과의 상관성
그림 5를 통해서는 chatbot 응용에서도 Reinforcement learning 의 상관성이 높다는 점을 확인할 수 있다. 2016년 이후부터는 RNN과 GAN의 상관성이 많이 나타났다. 2018년 이후에는 Bert 가 나타나자마자 Reinforcement learning 과 비슷한 상관성을 보였다는 점이 매우 흥미로운데, chatbot 응용이 language model을 기반으로 구현될 수 있다는 점을 고려할 때 당연한 현상일 것이다.
Chatbot 응용 분야에서의 인공지능 기술에 대한 이해를 얻기 위해서는 Reinforcement learning 및 최근에 등장한 Bert와 같은 transformer 모델에 대해 알아보는 것이 중요할 것이다.
그림 6. drone 응용과 세부 기술들과의 상관성
그림 6을 통해서는, drone 응용에서는 CNN과 RNN이 전체적으로 강세를 보였고, 최근에 들어서 Reinforcement learning 과 GAN의 상관성이 크게 높아졌음을 알 수 있다.
그림 7. medical 응용과 세부 기술들과의 상관성
그림 7을 통해서는 medical 응용 분야에서 전체적으로 CNN이 강세를 보였고, 2016년 이후부터는 GAN의 상관성이 크게 높아졌음을 확인할 수 있다. 흥미로운 것은 2018년 이후에 나타난 Bert의 상관성이 높게 나타났다는 점인데, medical 분야에서 Bert가 어떻게 활용되는지에 대해 알아보는 것은 매우 흥미로운 작업이 될 것이다. 2019년의 데이터를 보면, medical 분야에서는 거의 모든 세부기술들의 상관성이 골고루 나타났다.
따라서, Medical 응용 분야에서의 인공지능 기술에 대한 이해를 얻기 위해서는 세부 응용에 따라 알아보아야 할 세부 기술들이 달라질 것이라는 잠정적인 결론을 내릴 수 있다.
그림 8. driving 응용과 세부 기술들과의 상관성
그림 8을 통해서는 driving 관련 응용에서는 예상했던 대로 Reinforcement learning 의 상관성이 가장 높음을 확인할 수 있다. 2016년 이후에는 CNN, GAN, VAE의 상관성도 높아졌는데, 세부 응용에 따라 구체적인 세부 기술의 내용이 달라질 것으로 보인다.
그림 9. face detection 응용과 세부 기술들과의 상관성
그림 9를 통해서는 face detection 관련 응용에서 CNN이 가장 강한 상관성을 보였고, 2016년 이후부터는 GAN과 VAE의 역할이 매우 커졌음을 알 수 있다.
그림 10. anomaly 응용과 세부 기술들과의 상관성
그림 10을 보면, Anomaly detection 관련 응용에서는, 2016년 이전에는 Reinforcement learning 과 CNN이, 2016년 이후부터는 VAE와 GAN의 상관성이 크게 나타나고 있다.
사실 Anomaly detection 은 데이터에 따라 활용할 세부 기술이 달라지므로, 다양한 세부 기술이 활용될 수 있는데, Bert를 제외한 거의 모든 세부기술들의 상관성이 높게 나타나고 있음을 2019년의 데이터를 통해 확인할 수 있다.
Anomaly detection 응용 분야에서의 인공지능 기술에 대한 이해를 얻기 위해서는 세부 데이터에 따라 알아보아야 할 세부 기술들이 달라질 것이다.
그림 11. translation 응용과 세부 기술들과의 상관성
그림 11을 통해서는, translation 분야에서는 다른 분야와는 달리 RNN의 상관성이 높은 점수를 유지하고 있음을 확인할 수 있다. 그리고 2017년 이후에는 거의 모든 기술들의 상관성이 고루 분포하고 있고, 2018년 이후부터 Bert가 등장하자마자 상관성이 크게 나타났다. Translation 분야가 language modeling 과 밀접한 관계가 있고, Bert가 language modeling 분야에서 가장 먼저 활용되었음을 생각해 보면 당연한 결과일 것이다. 그림 11만 보면, translation 분야에서는 reinforcement learning이 Bert에게 자리를 물려준 듯 해 보이는데, 확실한 결론을 내려면 2019년 이후의 데이터를 지속적으로 확인해 봐야 할 것이다.
실험의 결론과 한계, 그리고 향후 발전 방향
이번 포스트에서는 인공지능의 응용 분야와 세부 기술의 상관성을 정량적으로 분석한 초기 결과를 제시해 보았다. 실험 결과를 통해 각 응용 분야의 대표적인 세부 기술의 내용과 시간에 따른 세부 기술의 변화의 흐름을 확인해 볼 수 있었다. 일부 기술은 특정 응용 분야에서 강세를 보이기도 하고, 여러 응용 분야에서 고루 활용되고 있는 세부 기술도 있었다. 특히, 2018년에 새로 등장한 Bert와 같은 transformer 모델이 앞으로 얼마나 다양한 분야에서 어떻게 활용될 지 사뭇 궁금해진다.
사실 세부 기술 분야 및 응용 분야들도 서로 독립적으로 존재하는 것이 아니라 밀접하게 관련되어 있다. 예를 들어 Convolutional layer를 기반으로 GAN과 VAE를 구성할 수 있고, RNN과 CNN도 융합할 수 있다. Medical 응용에서 anomaly detection 기술이 활용되기도 한다. 따라서, 이번 실험에서 응용 분야를 구분한 방식이 올바른 접근 방법인가에 대해서는 의문의 여지가 있을 수 있다.
인포리언스는 기술 변화의 흐름을 정량적으로 측정하기 위한 방법을 지속적으로 연구하고 있으며, 정확한 측정 방법을 개발하기 위해 연구를 진행하고 있다. 또한 논문의 제목이나 초록 뿐만 아니라 각 논문의 본문까지 활용 대상에 포함시킨 분석도 시도하고 있다. 본문의 상세 내용까지 분석 대상에 포함시킬 경우, 더욱 세부적인 분석 결과를 만들어 낼 수 있을 것으로 기대하고 있다.
최근의 기계학습 분야에서 가장 핵심적인 역할을 하고 있는 것들 중의 하나가 ‘embedding’이다. Wikipedia에 명시된 embedding의 정의 [0] 는 다음과 같다.
“In mathematics, an embedding is one instance of some mathematical structure contained within another instance, such as a group that is a subgroup. When some object X is said to be embedded in another object Y, the embedding is given by some injective and structure-preserving map f : X → Y. The precise meaning of “structure-preserving” depends on the kind of mathematical structure of which X and Y are instances.”
정의를 읽어보니, 뭔가 멋진 것 같은데, 머리가 슬슬 아파온다. 그래서 데이터 분석 분야에서는 embedding을 어떻게 설명하고 있는지 살펴보기로 한다.
“An embedding is a mapping of a discrete — categorical — variable to a vector of continuous numbers. In the context of neural networks, embeddings are low-dimensional, learned continuous vector representations of discrete variables” [1]
다른 설명을 봐도 머리가 아프니, (다른 설명은 쉬울 줄 알았는데 속았다…) 다음과 같이 간단하게 정리하자. Embedding은 우리가 표현하고자 하는 대상을 벡터공간의 좌표로 매핑하고 표현하는 과정이다. Embedding 대상은 대용량의 문서들에 포함된 단어들일 수 있고, 문서 자체일 수도 있고, 이미지가 될 수도 있고, 그래프가 될 수도 있다. 벡터공간의 좌표로 표현하게 되면 각 대상의 좌표 사이의 거리를 계산하거나, 대상들의 순서를 매기는 것과 같은 다양한 수학적 연산을 할 수 있게 된다. (단어들을 가지고 연산을 한다고? 신나는 일이다.) 차원이 아주 큰 대상을, 그것의 본래의 성질을 최대한 유지한 상태에서 활용이 용이한 형태로, 성질이 더 잘 나타나도록 압축시키기 위하여 쓸 수도 있다.
Embedding의 원리와 특성을 자세히 공부하는 것은 다음 기회에 포스팅하기로 하고 (잠시만 구글링을 해봐도 좋은 소개자료들이 넘쳐난다…), 이번 포스트는 embedding을 활용하면 어떤 것을 할 수 있을지 맛을 보기 위한 내용으로 구성해 보자.
Word2Vec
Embedding의 대상들 중에서 가장 주목을 많이 받고, 많이 활용되고 있는 것들 중의 하나는 단어(word)이다. 사실, 자연어 처리 분야에서는 단어나 문장을 수학적 공간좌표에 효율적으로 mapping, 표현하기 위하여 많은 노력을 기울여왔는데, word embedding이 그러한 노력에 한줄기 빛을 제공했다고 할 수 있다. (요즘은 여기저기서 계속 새로운 빛이 나오고 있긴 하다. 그래서 눈부셔…) Word embedding 방법들 중에서 가장 기초적이면서도 대표적인 것이 word2vec [2][3] 이라고 할 수 있는데, 이번 포스트는 나름대로 재미있어야 하므로, word2vec의 개념이나 원리는 잠시 뒤로 미뤄두고, word2vec을 실제 데이터에 적용해 본 결과만 즐겨보자. (과연 즐거울 것인가…)
Data
어떤 종류의 word 들을 embedding해서 가지고 놀면 재미있을까? 사람 이름, 지명, 음식명, 질병명, 영화 제목, 생활 용품 이름 등등, 많은 것들 중에서 고민해 볼 수 있다. 평소에 자주 먹는 음식의 종류에 따라 그 사람의 특성을 설명할 수도 있다는 말도 얼핏 들은 듯 한데, 정말 그럴 지도 궁금하고, 음식과 질병 사이의 관계도 궁금하니까 본 포스트에서는 음식명과 질병명을 활용해 보기로 한다.
그렇다면, 음식과 질병에 대해 작성된 대용량의 문서 세트를 구해야 한다. 공식적으로 활용할 수 있는 자료들도 있겠지만, 이번 포스트는 기초적인 활용 방법을 느껴보는 것을 목적으로 하니까, 일단은 웹 상에서 어렵지 않게 구할 수 있는 문서 데이터들을 수집하여 활용해 보기로 한다. 음식에 대한 설명 문서들은 나무위키의 ‘식품관련정보’[4]와 ‘요리법/요리’[5], 그리고 ‘영양소’[6]에 업로드된 자료들을 활용하기로 한다. 질병과 관련된 문서는 (주관적으로 선택한) 주요 질병들에 대한 문서들을 직접 수집하여 활용한다. 이번 분석과정에서 선택한 23가지의 주요 질병명은 다음과 같은데, 평소의 식생활에 의해 영향을 많이 받을 것 같은 질병들을 골라 보았다. (의사가 아니므로 실제로는 식생활과 무관한 질병명이 포함되어 있을 수 있다…)
이 데이터를 활용하여 embedding한 모델을 본 포스트에서는 앞으로 FD모델(Food-Disease 모델)이라고 부르기로 한다.
그림 0. FD모델의 Embedding 결과 확인
그림 0은 음식 관련 문서들에 포함된 단어들을 word2vec을 활용하여 벡터 공간에 mapping 한 뒤에, 각 벡터들을 t-SNE[7]를 써서 2차원으로 출력해 본 그림이다. 음식 관련된 문서들을 활용했기 때문에 대부분의 단어들이 음식명이기는 하지만, 음식명이 아닌 단어들도 꽤 보인다. (너무 당연한 이야기인가…) ‘불량식품’이나 ‘괴식’과 같은 단어들도 포함되어 있다는 점이 재미있다. 그림을 잘 들여다 보면, 청국장, 쌈장, 된장, 간장, 낫토 등이 가까운 곳에 위치하고 있고, 고기 종류들도 서로 가까운 곳에 모여 있는 듯 하다. (그렇다면, 각각 혼자 멀리 떨어져 있는 것처럼 보이는 ‘참깨’와 ‘채식주의’는 아웃사이더인가…?)
단어 간 관계
가장 먼저, 단어 사이의 거리를 계산해 보자.
표 1. 단어 간 거리
표 1은 FD모델을 적용하여 측정한 단어 간 거리값을 나타낸다. 삼겹살을 먹을 때에는 쌈장을 곁들일 때가 많은 것에 비해 파스타와 함께 먹는 경우는 많지 않으니 삼겹살과 쌈장 사이의 거리가 삼겹살과 파스타 사이의 거리보다 짧게 나왔다. (꿈보다 해몽일지도…. ) 고지혈증과 고혈압 사이의 거리가 고지혈증과 감기 사이의 거리보다 짧게 나왔는데, 고지혈증이 고혈압의 직접적인 원인이라는 점에서 꽤 타당한 결과인 듯 보인다. 또한 표 1에 제시된 결과대로라면 삼겹살을 많이 먹을 경우 비만에 걸릴 가능성이 통풍에 걸릴 가능성보다 높다고 해석할 수도 있겠다. (의학적인 근거는 없다.)
음식 단어와 가까운 단어들
아래의 그림 1, 그림2, 그림3은 각각 ‘김치’, ‘참치’, 그리고 ‘돼지’와 가까운 단어들 중에서 상위 10개를 추출한 결과를 보여준다.
그림 1. ‘김치’와 가까운 단어 리스트
‘김치’와 가까운 단어들을 보면 거의 모두 그럴 듯한 것들이 추출된 것 같다. 비빔밥과 간장은 조금 색다르게 느껴지는데, 비빔밥에 김치를 곁들여 먹거나, 아예 김치를 넣어서 비벼먹는 경우가 꽤 있다고 해석하자. (김치 비빔밥!!) 그리고, 김치와 간장의 관계도 고개를 갸웃거리게 했는데, 구글링을 좀 해보니 ‘간장김치’라는 메뉴도 있다. (억지로 끼워 맞추는 듯…)
그림 2. ‘참치’와 가까운 단어 리스트
그림 2에 표시된 ‘참치’와 가까운 단어들의 경우에는 조금 애매하게 느껴지는 단어들이 여럿 포함된 듯 하다. 예를 들어, 참치와 비빔면의 관계성이 애매하게 느껴진다. (단, 모 회사에서 참치 비빔면을 출시한 바 있다고 한다.) ‘젓’과의 관계도 의문이었는데, 참치 내장으로도 젓갈을 담근다고 한다. (역시 꿈보다 해몽 같지만…) 아무리 그래도 참치 김밥이나 참치 샌드위치를 생각할 때, 참치와 마요네즈와의 관계가 상대적으로 낮게 나온 것은 불만스럽다. (개인적인 성향…)
그림 3. ‘돼지’와 가까운 단어 리스트
그림 3에 표시된 ‘돼지’와 가까운 단어들은 모두 이상할 것이 없는 것들로 구성되어 있는 듯 하다. 물론, ‘제육’이나 ‘족발’이 리스트에 없는 것이 서운하게 느껴질 사람도 있을 수 있다.
질병 단어와 가까운 단어들
아래의 그림 4, 그림5, 그림6은 각각 ‘고혈압’, ‘감기’, 그리고 ‘콜레스테롤’과 가까운 단어들 중에서 상위 10개를 추출한 결과를 보여준다.
그림 4. ‘고혈압’과 가까운 단어 리스트
그림 4를 보면, ‘고혈압’과 가까운 단어들이 꽤 타당하게 선택된 것을 알 수 있다. 고혈압은 당뇨와 같은 다른 합병증을 일으키는 원인이 되기도 하지만 적극적인 치료를 받으면 잘 관리할 수 있는 질환이라고 한다.
그림 5. ‘감기’와 가까운 단어 리스트
그림 5에서는 감기와 가까운 단어들을 확인할 수 있다. 그림 4에 나타난 리스트와는 달리, ‘바이러스, ‘면역’, ‘인플루엔자’ 등이 리스트에 포함된 것으로 보아 꽤 타당한 선택 결과라고 생각된다.
그림 6. ‘콜레스테롤’과 가까운 단어 리스트
콜레스테롤은 혈액을 통해 운반되는 성분으로서, 심혈관 질환이나 혈압 수치와 관련되며, 음식을 통해 흡수되기 때문에 혈중 콜레스테롤 농도는 평소의 식습관과 밀접한 관계가 있다고 한다. 그림 6에서 선택된 단어 리스트를 보면, 콜레스테롤에 대한 문서에서 불포화 지방산이나 트랜스 지방에 대한 언급이 빠지지 않는다는 점이 잘 반영된 듯 하다.
가장 거리가 먼 단어 선택
표 2. 거리가 먼 단어 선택 결과
표 2의 각 행은 주어진 4가지 단어들 중에서 가장 거리가 먼 단어를 FD모델을 기반으로 선택해 본 결과를 나타낸다. 종류가 다르거나, 관련성이 낮은 단어들이 적절하게 선택되었음을 확인할 수 있다. 이러한 개념을 잘 활용할 경우, 사람들이 평소에 즐겨 먹는 음식들에 대한 정보를 모을 수 있다면 그 정보를 바탕으로 사람들의 성향을 충분히 그룹핑할 수도 있겠다는 생각을 해보게 된다.
음식과 질병 관계
그림 7. 음식과 가까운 질병
그림 7은 특정 음식과 가까운 질병명을 추출한 결과들을 보여준다. ‘볶음밥’이나 ‘피시&칩스’와 가장 가까운 질병은 (아무래도 기름기가 많을 수 있으니) 당뇨병이나 심근경색이 선택되는 것이 타당해 보인다. 그런데 ‘달걀밥’이나 ‘연어’와 가까운 질병명들을 보니 뭔가 의심스러운 생각이 든다. 달걀밥이 이렇게 많은 질병과 골고루 관련되어 있다는 말인가. 그리고 연어가 만성피로나 심근경색을 유발한다고? 연어의 효능과 관련된 자료를 찾아보면, 오히려 심혈관 질환이나 혈액 순환 장애에 도움이 되고 피로회복에도 좋은 영향을 끼친다는 내용이 많다. 그렇다면, 단순히 거리가 가깝다는 사실만으로는 해당 음식이 질병에 좋다는 의미인지 나쁘다는 의미인지 파악하기 어렵다는 판단을 할 수 있다.
그림 8. 음식-질병 관계를 구분하여 실험한 결과 (1)
그림 9. 음식-질병 관계를 구분하여 실험한 결과 (2)
그림 8과 그림 9는 5가지 질병 – 고지혈증(Hyperlipidemia), 당뇨(Diabets), 비만(Obesity), 지방간(Liver), 고혈압(High blood pressure) – 들에 좋은 음식을 설명한 문장들과 나쁜 음식을 설명한 문장들을 구분하여 수집한 뒤에, 해당 문장들에 포함된 단어들과 음식명 사이의 거리의 평균값을 구한 결과를 보여준다. 간에 좋은 음식과 나쁜 음식을 설명한 문장들의 예는 아래의 표 3에서 확인할 수 있다. 그림 8에서 삼겹살과 hyperlipidemia_bad 와의 거리값은 고지혈증에 나쁜 음식들에 대하여 설명한 문장들에 포함된 단어들과 삼겹살 사이의 거리의 평균값을 의미한다.
표 3. 간에 좋은 음식에 대한 설명 문장들과 간에 좋은 음식에 대한 설명 문장들의 예
그림 8과 그림 9에 나타난 결과들을 종합해 보면, (몇 가지 예외를 제외하고) 삼겹살, 튀김, 술, 나트륨, 햄버거는 5가지 선택된 질병들에 좋지 않은 것으로 설명한 문장들에 포함된 단어들과 거리가 가깝다고 판단할 수 있으며, 녹차, 현미, 오이는 해당 질병들에 좋은 음식들을 설명한 문장들에 포함된 단어들과 거리가 가깝다고 판단할 수 있다.
마치며…
이번 포스트에서는, embedding이 어떻게 응용될 수 있을지에 대해 맛을 볼 목적으로, word2vec을 적용하여 단어들 사이의 거리를 측정해 보고, 그 결과들이 상식에 얼마나 부합할 지에 대하여 알아보았다. 생각해 보면, 단어들 사이의 의미상 거리를 제대로 측정할 수만 있다면, 그것만으로도 꽤 많은 응용 서비스를 파생시킬 수 있다. 인포리언스는 이미 오래 전에, 지능적인 영어 학습 서비스를 개발하는 과정에서 word embedding을 활용한 바 있는데, 학생들의 어휘 학습 수준에 맞는 새로운 학습 단어를 추천하거나, 학생이 학습한 문장과 유사한 수준의 다른 문장을 추천하는 과정에서 문장의 구조적 특성과 문장을 구성하는 단어들 사이의 유사성을 복합적으로 고려하도록 구현했다. [8]
실험 과정에서 더욱 정제된 문서의 집합들을 활용하고 섬세한 데이터 가공 절차와 학습 과정을 적용할 수 있다면 더 좋은 결과를 얻을 수 있을 것이지만, 이번 포스트에서 활용한 데이터에는 사실 노이즈가 꽤 포함되어 있었다. 예를 들어, 특정 음식에 대한 설명 문서에 해당 음식과 전혀 무관한 설명들이 포함되어 있는 경우도 있었다. (이것이 수집 대상 데이터 자체의 문제인지, 아니면 데이터를 수집하기 위해 작성한 코드의 오류에 의해 생긴 것인지는 좀 더 확인을 해봐야 하지만)
Word2vec은 이미 유명 라이브러리에 포함되어 있으므로, 실제 코드에 적용해 보는 것은 어렵지 않다. 따라서, 이번 포스트에 소개한 실험과정에서는 word2vec을 적용하는 과정보다 데이터를 모아 활용 가능한 형태로 정리하는 과정에 더 많은 시간과 노력이 필요했다.
본 포스트에서 가장 주의할 것은, 실험에 활용한 데이터에 따라 이러한 실험의 결과가 달라진다는 점이다. 다시 말해서, 다른 문서 데이터 세트를 대상으로 실험을 진행했다면, 매우 다른 결과를 얻게 될 수 있다. 그리고 질병과 관련하여 이 포스트에서 언급한 내용들은 실제 의학적 전문 지식과 크게 다를 수도 있다는 점에 유의해야 한다.
인공지능 분야의 연구결과들은 컴퓨터로 풀 수 있는 문제들에 대한 새로운 해결법을 제시하는 경우가 많기 때문에, 다양한 분야의 문제들에 대해 새로운 해결 방향을 제시할 수 있다. 인공지능 분야의 연구를 크게 나누어 보면, 새로운 인공지능 모델이나 알고리즘을 개발하는 부류와, 문제의 해결 과정에 인공지능 모델이나 알고리즘을 활용, 적용하는 부류로 나누어 볼 수 있는 것도 같은 맥락이다.
그렇다면, 최근 들어 폭발적으로 발전하고 있는 인공지능 관련 기술들이 다른 분야의 연구들에 얼마나 영향을 끼치고 있을까 궁금해진다. 다시 말해서, 다른 분야의 연구들이 얼마나 “인공지능화” 되어가고 있을지 호기심이 생긴다. 이 호기심은 인공지능 기술의 산업별 파급력에 대한 기초적인 질문일 수도 있다.
본 포스트에서는 인공지능 연구의 파급력을 분석해 보는 첫번째 시도로서, 40여 개의 computer science(CS) 의 세부 연구분야들이 얼마나 인공지능 기술과 관련을 맺어 가고 있는가에 대하여 정량적으로 분석한 결과를 제시해 보기로 한다.
데이터 출처 및 분석 방법
이번 분석은 첫번째 시도이니, 너무 크게 욕심내지 않기로 하고, 연구자들이 자신의 연구 논문을 공개하는 오픈 사이트인 Arxiv(https://arxiv.org/)에 업로드된 CS분야의 논문들에 대한 메타 정보(각 논문들에 태깅되어 있는 category 정보)를 일단 활용해 보기로 한다. 최근에는 많은 연구자들이 (특히 CS 분야의 연구자들이) 자신의 논문을 Arxiv에 공개할 뿐만 아니라, Arxiv에서 다른 연구 결과들에 대한 정보를 수집하는 추세이므로, CS 연구의 전체적인 동향을 분석하는 데에 손색이 없을 것이다. Arxiv를 통해서는 1990년대의 논문부터 최근의 논문까지 검색, 활용할 수 있으나, 이번 분석 과정에는 2010년 1월부터 최근까지 업로드된 논문들에 대한 정보를 활용하기로 한다. 논문의 컨텐츠를 포함한 분석은 현재 진행 중이며, 다음 기회에 소개하기로 한다.
그림 1. CS 세부 분야 리스트
그림 1은 Arxiv에서 분류한 CS 세부 분야를 나타내고 있는데, 총 40여개의 세부 분야들로 분류되어 있다. 이번 분석은 Artificial Intelligence (AI) 이외의 분야에 해당하는 논문들이 AI와 얼마나 관련되어 있는가를 측정하는 것이다.
결과
그림 2. AI와 관련된 전체 논문 수의 시간에 따른 변화 패턴
가장 먼저, AI 분야의 전체 논문의 수가 어떻게 변화하고 있는지 확인해 보자. 위의 그림 2는 2010년 1월부터 2019년 9월 사이에 업로드된 AI 분야의 논문들의 총 개수를 30일 간격으로 측정한 결과를 나타낸다. (이후의 모든 수치는 Min-Max normalization 과정을 거친 결과이다.) 모두가 예상한 바와 같이, 전체 논문의 개수는 명백한 증가 패턴을 보이고 있다. Arxiv에 업로드되는 AI 분야의 논문의 수가 이렇게 증가하고 있다면, 모든 CS 세부 분야 내의 AI관련 논문의 수도 당연히 비슷한 추세로 증가하고 있지 않을까?
그림 3-(A) Robotics 분야의 전체 논문 수의 시간에 따른 변화 패턴그림 3-(B). Robotics 분야의 논문들 중 AI와 관련된 논문 수의 시간에 따른 변화 패턴
위의 그림 3-(A)는 시간에 따른 Robotics 분야의 전체 논문 수의 변화 패턴을 나타낸다. 위의 그림 3-(B)는 Robotics 분야의 논문들 중에서 AI와 관련된 논문 수의 추세를 나타낸다. Robotics 분야의 전체 논문 수는 시간에 따라 증가하고 있으며, Robotics 분야의 AI 관련 논문의 양도 역시 시간이 흐를 수록 많아지는 패턴이 명백하게 나타나고 있다. 이 정도면, 다른 CS 세부 분야들도 모두 이와 비슷한 패턴을 보일 거라는 생각을 하게 된다.
그림 4-(A). Computational Complexity 분야의 전체 논문 수의 시간에 따른 변화 패턴그림 4-(B). Computational Complexity 분야의 논문들 중 AI와 관련된 논문 수의 시간에 따른 변화 패턴
위의 그림 4-(A)는 Computational Complexity 분야의 전체 논문의 수가 시간에 따라 증가하는 패턴을 보이고 있음을 나타낸다. 그러나, 그림 4-(B)에서 볼 수 있는 것과 같이, Computational Complexity 분야의 논문들 중 AI와 관련된 논문의 수는 뚜렷한 증가 추세를 보이지 않는다. Arxiv에 업로드되는 논문의 수가 계속 증가하고 있고, AI 논문의 수도 크게 증가하고 있는데, AI와 관련된 논문의 수가 증가하지 않는 CS 세부 분야가 있다는 점이 상당히 흥미롭다.
Correlation 분석 결과
그림 5. AI 전체 논문 수의 변화 추세와 각 세부분야의 AI 관련 논문 수의 변화 추세 사이의 correlation표 1. Correlation 값을 기준으로 평가한 상위 7개 분야와 하위 7개 분야
그림 5는 AI 전체 논문 수의 변화 추세와 각 세부분야의 AI 관련 논문 수의 변화 추세 사이의 correlation을 각 세부 분야 별로 측정하고, correlation 값이 큰 것부터 나열한 것이다. Correlation 값이 크다면, 해당 세부 분야의 AI 관련 논문 수의 증가 패턴이 AI 전체 논문 수의 증가 패턴과 유사하다고 볼 수 있다. 즉, 해당 분야는 AI 분야의 발전에 의해 영향을 받고 있다는 해석을 할 수 있을 것이다. 물론, 값이 작으면, 영향을 덜 받고 있다고 볼 수 있다. 표 1은 correlation 값을 기준으로 평가한 상위 7개 분야와 하위 7개 분야를 정리한 것이다.
Trend distance 분석 결과
그림 6. AI 전체 논문 수의 변화 추세와 각 세부분야의 AI 관련 논문 수의 변화 추세 사이의 distance표 2. Distance 값을 기준으로 평가한 상위 7개 분야와 하위 7개 분야
그림 6은 AI 전체 논문 수의 변화 추세와 각 세부분야의 AI 관련 논문 수의 변화 추세 사이의 distance를 각 세부 분야 별로 DTW(Dynamic Time Warping)를 써서 측정하고, distance값이 작은 것부터 나열한 것이다. Distance 값이 작다면, 유사도가 높은 것이므로, 해당 세부 분야의 AI 관련 논문의 증가 패턴이 AI 전체 논문의 증가 패턴과 유사하다고 볼 수 있다. 물론, 값이 크면, 두 패턴 사이의 유사도가 낮다고 볼 수 있다. DTW는 비교 대상이 되는 시계열들에 나타나는 유의미한 변화 포인트 사이에 시간적인 차이가 나타날 경우에도 이를 보정하면서 distance를 계산하므로, 좀 더 융통성 있게 비교할 수 있다. 표 2는 DTW distance 값을 기준으로 평가한 상위 7개 분야와 하위 7개 분야를 정리한 것이다.
잠정적인 결론 및 future works
그림 5와 그림 6, 그리고 표 1과 표 2에 나타난 결과를 보면, correlation 값을 활용한 결과와 DTW distance 값을 활용한 결과가 유사함을 알 수 있다. 상위 7개 분야들은 학습과 비전, 패턴인식, 언어 처리, 로봇, 보안 등의 분야들로 구성되어 있고, 하위 7개 분야들은 시스템 관련 분야 또는 전통적인 수학적 알고리즘을 연구하는 분야들로 구성되어 있다. 상위에 랭크된 분야들의 구성을 보면, 최근 AI 분야의 발전 추세를 고려할 때, 본 포스트의 분석 결과가 꽤 타당해 보인다.
이번 분석 결과는 꽤 재미있지만, 논문의 컨텐츠를 분석하지 않고 이미 잘 정리되어 있는 메타 정보만을 활용했다는 한계가 있다. 논문의 컨텐츠를 기반으로 AI 관련성을 측정할 수 있다면, 더욱 정교한 추세와 패턴을 얻을 수 있을 것이다. 또한 컨텐츠를 활용한 분석을 하게 되면, Arxiv에서 제공하는 공통된 category 메타 정보를 활용할 수 없는 다른 공학, 자연과학, 사회과학 분야의 논문들도 분석 대상에 포함시킬 수 있을 것이다. 인포리언스는 현재 이와 관련된 작업을 진행하고 있다.
너무 계산적으로 들릴 수도 있겠지만, 자신이 몸담고 있는 분야의 AI 관련성이 높지 않다면, AI 기술을 자신의 활동 분야의 주요 문제에 먼저 적용해 보면 어떨까? 어쩌면 다른 사람들보다 먼저 새로운 문제 해결법을 제시할 수도 있지 않을까? 이러한 생각은, 과거에는 없었던 것을 창조해야만 새로운 것을 시작할 수 있는 것이 아니라, 다른 분야에서 쓰이고 있는 방법론이나 도구를 새로운 분야에 적용, 활용해 보는 것으로도 새로운 창조과정을 시작할 수 있다는 믿음에서 비롯된다.
인공지능에 대한 관심도가 높아지면서, 관련 기술을 보유하고 있지는 못하지만 외부의 힘을 빌려서라도 자신의 비즈니스에 인공지능 기술을 적용해 보려고 하는 사람들이 늘어나고 있다. 본 포스트에서는, 인포리언스가 실제로 진행해 온 프로젝트들에서 얻은 경험과 주요 관련 사이트에 실린 분석 기사들을 토대로, 인공지능 기술을 비즈니스에 성공적으로 응용하기 위해서는 어떤 준비가 필요하며, 어떤 프로세스를 거쳐야 하는지에 대해 1차적으로 정리해 본다.
인공지능을 비즈니스에 쉽게 활용할 수 있을까?
인공지능에 대한 최근의 폭발적 관심에도 불구하고, 인공지능 및 데이터 분석 기반 프로젝트의 85%가 실패한다고 알려져 있다. [1] 도대체 왜 그런 걸까?
이러한 맥락에서, 최근에는 인공지능 기술을 응용하는 프로젝트가 왜 실패하는가에 대해 고찰한 기사들이 많이 제시되고 있다. [2-12] 기사들을 통해 확인한 대표적인 이유들을 정리해 보면 다음과 같다.
(1) 구체적인 기술과 구현과정에 대한 지식과 경험을 갖춘 사람을 만나기 어렵다. 인공지능 분야를 전공하고, 다양하고 실제적인 프로젝트를 기획단계에서부터 최종 구현단계까지 충실히 완료해 본 경험을 갖춘 사람을 만나기 어렵다. 만나게 되더라도, 그 사람이 특정 분야의 비즈니스 또는 특정 데이터에 꼭 맞는 능력과 경험을 가진 사람일 가능성 또한 그리 높지 않다. 인공지능의 세부분야도 꽤 다양하기 때문이다.
(2) 기술이 있어도, 데이터에 따라 성공 여부가 달라진다. 인공지능 프로젝트의 대부분은 데이터를 기반으로 진행된다. 따라서 운좋게 누군가의 도움과 협력을 구할 수 있는 상황이 된다 하더라도, 프로젝트에 필요한 데이터의 내용, 형태, 품질 및 용량 등이 세부분야에 따라 크게 달라진다는 점이 인공지능 프로젝트의 성공적인 진행을 어렵게 한다. 또한 이것은 인공지능 프로젝트의 성공 가능성을 미리 예측하기 어렵게 하는 이유가 되기도 한다. 달리 말하자면, 훌륭한 전문가 또는 경험자가 있더라도, 활용 대상이 되는 데이터 때문에 프로젝트가 실패할 수도 있는 것이다. 설상가상으로, 프로젝트가 진행되는 동안 새롭게 밝혀지는 데이터 특성으로 인해 프로젝트의 세부 진행, 심지어 전체적인 방향과 범위가 바뀔 수도 있다.
(3) 쓸모있는 결과보다 새로운 기술 적용에 초점을 맞추는 경우가 있다. 인공지능 관련 기술을 “비즈니스”에 적용하려는 가장 근본적인 이유는 추가적인 수익을 창출하는 것이다. 그럼에도 불구하고, 많은 인공지능 프로젝트들이 인공지능의 기술적 내용에만 초점을 맞추거나, 구체적인 성과가 없어도 인공지능 기술을 적용했다는 사실만으로 만족스럽게 생각하는 경우가 많다. 이렇게 되면 기술 개발의 노력이 수익 창출로 제대로 이어지지 못하게 된다.
(4) 충분하지 않은, 부적절한 커뮤니케이션에 의해 프로젝트가 무너진다. 모든 기술개발 프로젝트가 마찬가지겠지만, 특히 인공지능 관련 프로젝트에서는 프로젝트 관련자들 사이에서의 커뮤니케이션이 매우 중요하다. 이 문제에는, 비즈니스 관점에서 프로젝트를 보는 사람들과 기술적 관점에서 프로젝트를 이해하는 사람들 사이에서의 커뮤니케이션의 어려움 뿐만 아니라, 기술을 개발하는 개발자들 사이에서의 커뮤니케이션의 어려움도 포함된다. 다른 종류의 개발 프로젝트와는 달리, 인공지능, 특히 데이터 기반 프로젝트는 데이터를 핸들링하는 꽤 오랜 시간동안 ‘모호하고 답답한’ 상태가 지속될 수도 있는데, 시스템 개발자들의 관점에서는 이러한 상황이 매우 낯설게 느껴질 수 있기 때문이다.
어렵다고 하지만 그래도 잘 해보려면…
인공지능을 비즈니스에 성공적으로 적용하는 것이 어렵다고는 하지만, 그렇다고 포기할 수는 없다. 지금부터는 인공지능을 적절히 활용하기 위해서 어떻게 하면 좋을 지 생각해 보자. 이번 포스트에서는 다음과 같은 요소들에 대해 생각해 보기로 한다. (사실, 깊이 따지자면 생각해야 할 세부내용들이 아주 많지만, 우선 5가지만 고려해 보자.)
현황과 문제 파악
프로젝트 수행에 필요한 세부 요소들을 정의
Communication 방법 및 Paperwork에 대한 정의
Working model 의 구현과 검증
확보한 결과의 내재화 (internalization) 방안 마련
(1) 현황과 문제 파악
모든 프로젝트가 그렇듯이, 인공지능 프로젝트를 성공적으로 수행하여 비즈니스에 적용하기 위해서는 현재의 비즈니스 현황과 문제, 필요한 솔루션 등에 대하여 최대한 명확하게 파악하고 정리해야 한다. [5] 실제 비즈니스에서 나올 수 있는 예를 통해 인공지능 프로젝트를 위해 사전에 정리해야 할 요소들을 하나씩 살펴보자.
영어 교육 앱 서비스를 제공하는 회사A가 영어 독해 학습용 인공지능 웹 서비스를 만들기로 했다는 시나리오를 생각해 보자. 그리고 3D 프린터를 생산하는 회사B에서는 생산품의 품질을 자동으로 측정하는 인공지능 모듈을 만들기로 했다고 가정해 보자. (인포리언스는 이와 유사한 종류의 프로젝트를 실제로 진행한 경험이 있다.)
Situation
회사A
고등학교 학생들을 대상으로 스마트폰 앱을 통해 독해 문제를 제공하고 있으며, 학생들이 제출한 답에 대한 부가설명을 선생님들이 직접 작성하고 있다.
학생들이 문제를 풀고 나면 다음에 풀어볼 문제가 제공된다.
특정 학생이 푼 문제와 해당 문제에 대한 정오답 여부, 그리고 선생님이 작성한 부가설명 데이터가 서버에 지속적으로 쌓이고 있다.
회사B
3D 프린터를 생산하는 공장을 운영하고 있으며, 생산된 3D 프린터의 품질 상태를 측정하기 위해 3D 프린터를 시험적으로 동작시키는 동안 발생하는 소음을 체크하고 있다.
Problem
회사A
학생 수와 문제 수가 많아 선생님들이 부가 설명을 작성하는 일에 너무 많은 시간을 소비하고 있다.
부가 설명은 일부 주요 문제에 대해서만 제공되고 있다.
다음에 풀어볼 문제가 무작위로 선택되어 제공되고 있어 학생의 수준이나 성향을 고려하지 못하고 있다.
경쟁 업체의 경우, 인공지능을 적용한 맞춤형 학습 서비스를 제공하고 있어 주목을 받고 있다.
회사B
3D 프린터의 소음을 작업자가 직접 듣고 품질을 평가하고 있다.
생산되는 3D 프린터의 수가 많아 모든 프린터의 품질 상태를 체크하지 못하고 있으며, 무작위로 추출한 일부 생산품에 대해서만 품질을 평가하고 있다.
작업자가 평가한 결과에 오류가 발생하고 있다.
Solution
회사A
학생이 틀린 문제에 대한 부가설명을 자동적으로 생성, 제공하는 기능을 만든다.
정오답 결과를 기반으로 학생의 수준과 성향을 파악한 후 이를 기반으로 다음에 풀어볼 문제를 추천하는 기능을 만든다.
장기간에 걸쳐 쌓인 학생의 학습 히스토리를 기반으로 현재의 수준과 앞으로의 학습 방향에 대한 가이드를 자동적으로 생성, 제공하는 기능을 만든다.
회사B
3D 프린터의 소음을 마이크로 녹음한다.
녹음된 소음 상태를 자동적으로 분석하여 이상 여부를 평가하는 기능을 만든다.
Next step
회사A
독해 문제 뿐만 아니라 어휘, 문법, 영작 문제에도 유사한 기술을 적용한다.
영어 과목 뿐만 아니라 제2외국어 과목에도 유사한 기술을 적용한다.
회사B
공장에서 생산하고 있는 다른 타입의 제품에도 적용한다.
제품 뿐만 아니라 제품을 만드는 기계의 상태도 실시간으로 파악한다.
위의 내용은 회사A와 회사B가 인공지능 서비스를 만들기 위해 가장 먼저 고려해야 할 요소들의 예시를 보여준다. (회사A가 실제적으로 구현할 수 있는 실제적인 기능의 예시는 인포리언스의 관련 포스트[13]를, 회사B의 상황에 필요한 기능의 예시에 대해서는 인포리언스의 과거 포스트들[14 -16]을 참조한다.)
Situation 항목에서는 인공지능 서비스가 구현되기 전의 상태를 정리한다. Problem 항목에서는 현재의 상태에 어떤 문제가 있는지, 어떤 포인트에 개선할 부분이 있는지에 대해 정리한다. Solution 항목에서는 problem 항목에 정리된 내용들을 개선하기 위해서 어떠한 기능을 구현하고자 하는지에 대해 정리한다. 그리고 Next step에서는 구현된 기능을 어떻게 활용, 확장할 것인지에 대해서 정리한다.
사실 위의 내용들은, 인공지능 서비스를 구현할 경우에만 해당되는 것은 아니며, 모든 기술개발 프로젝트의 초기 단계에서 고려해야 할 일반적인 내용이라고 해도 전혀 이상하지 않다.
(2) 프로젝트 수행에 필요한 세부 요소들을 정의
AI Project Canvas [3] 에는 인공지능을 기반으로 한 연구개발 프로젝트를 진행하기 위해 고려해야 할 여러가지 요소들이 포함되어 있다. 전체 요소들 중에서, 연구개발을 수행하는 데에 직접적으로 관련되는 4가지 요소들에 대해서 살펴보자.
Data, data, data
인공지능 기술을 기반으로 진행되는 프로젝트에서 데이터만큼 중요한 것은 없다. 구현하고자 하는 기능에 적합한 데이터를 보유하고 있어야 하며, 데이터에 대하여 많이 파악하고 있을 수록 프로젝트의 성공 가능성이 높아진다. 데이터의 중요성은 다양한 관점에서 생각해 볼 수 있는데, 용량, 출처, 품질, 그리고 내용과 형태, 배경지식 등이다.
가장 먼저, 인공지능 모델을 학습시킬 수 있는 충분한 양의 데이터를 가지고 있어야 한다. 충분할 용량이 어느 정도인가에 대해서 콕 집어서 말할 수는 없지만, 활용할 수 있는 최대한의 데이터를 확보해야 한다. 회사A가 특정 학생의 학습 히스토리를 충분히 보유하고 있지 못하거나 회사B가 소음 데이터를 충분히 보유하고 있지 못하다면, 인공지능 모델로 하여금 학생의 특성과 수준, 독해 지문의 특성을 충분히 학습하거나 기계의 정상, 이상상태를 학습하게 할 수 없다.
만약, 현재 보유하고 있는 데이터가 충분하지 않다면, 외부에서 추가적인 데이터를 끌어와야 할 수도 있다. 이러한 경우에는, 끌어올 데이터의 활용성 만큼 출처와 라이센싱 문제도 중요하게 검토해야 한다. 특히 데이터가 사람들에 대한 정보를 담고 있을 경우에는 개인정보보호 문제가 매우 중요해진다. 회사A의 경우, 이미 보유하고 있는 문항 데이터 외에, 고등학생들의 영어학습 수준에 맞는 corpus를 확보할 필요가 있다. 또한 학생들의 학습 히스토리는 개인정보이므로, 법적인 문제가 발생하지 않도록 신중하게 검토해야 한다. 회사B의 경우, 라이센스 문제없이 외부에 공개된 비슷한 기계 장치의 소음 데이터를 찾아 활용해 볼 수 있을 것이다.
데이터는 활용하기에 적합한 내용과 형태로 구성되어 있어야 한다. 그렇지 않으면 목적에 맞게 데이터를 가공해야 한다. 사실, 데이터의 가공과정에는 데이터에 대한 배경지식, 활용목적, 그리고 데이터를 다루기 위한 기술적 지식과 경험이 요구되며, 심지어 시간이 꽤 소요되는 작업이다. 따라서, 이 과정에 시간과 노력을 투자하는 것에 너무 비판적인 자세를 취하면 안된다. 이 과정에서 프로젝트의 성패가 결정되는 경우도 많다.
데이터의 품질은 용량, 내용, 형태를 바탕으로 종합적으로 평가할 수 있다. 그러나 놓치지 말아야 할 것은, 현재의 데이터가 만들어지거나 수집되는 과정이 적절했는가에 대해서도 꼼꼼하게 살펴봐야 한다. 예를 들어 회사B의 경우, 소음 데이터를 수집하는 과정이 어떤 환경에서 어떻게 진행되었는지를 살펴봐야 한다. 또한 오류가 포함되어 있을 수 있는 작업자의 품질 판단 결과를 인공지능 모델의 학습 데이터로 활용해서는 안된다.
데이터에 대한 배경지식은 프로젝트의 진행방향을 결정하는 매우 중요한 요소이다. 예를 들어 회사A의 경우, 학생들이 문제를 틀릴 때 어떠한 부가설명을 제공하는 것이 좋을 지에 대해서 인공지능 기술자들이 잘 알고 있을 가능성은 높지 않다. 그럼에도 불구하고 틀린 문제에 대해 부가설명을 자동적으로 제공하는 기능을 구현하고자 한다면, 특정 문제에 대한 부가설명을 추려내는 과정에 대한 선생님들의 경험과 노하우가 인공지능 모델에 최대한 반영될 수 있도록 자세히 정리, 공유되어야 한다. 회사B의 경우, 작업자가 소음에 포함된 어떤 특성을 잡아내려고 하는지에 대해 잘 정리할 수 있다면 기술개발자들이 해당 특성에 초점을 맞출 수 있게 되어 프로젝트의 결과에 대한 기대치가 크게 높아질 수 있다.
Skill
회사A가 필요로 하는 기반 기술은 Natural Language Processing (NLP)이다. 예를 들어, 독해 지문의 문장 구성, 주제, 어휘 정보 등을 분석하는 기술을 구현, 활용해야 한다. 이 과정에서는 state-of-the-art 기술을 활용해야 하는지, 아니면 이미 검증된 바 있는 traditional 기법만으로도 충분한지에 대해 고려해야 한다. 이 선택 과정은 구현하고자 하는 기능, 데이터의 용량과 내용에 의해서 달라질 수 있다. 회사B의 경우에는 Vibration Analysis 기술이 기반이 된다. 기계공학 분야에서 오랫동안 연구되어 온 기계 진동소음 분석 기술을 활용할 수 있어야 하며, 최근에 많이 주목받고 있는 딥러닝 기반 anomaly detection 기술도 고려대상이 될 수 있다. 만약 기계의 동작상태를 열화상 카메라를 통해 파악할 수 있고 해당 데이터를 확보한 상태라면, Machine Vision 기술도 고려할 수 있다.
Skill 에 대해 정리하는 과정에서는 연구개발 인력에 관해서도 검토해야 한다. In-house 개발, 즉 내부의 인력만으로 프로젝트를 진행할 지, 아니면 outsourcing, 즉 외부와의 협력을 추진하거나 프로젝트를 외부 전문가에게 맡길 지에 대해 결정해야 한다. 내부 인력의 기술과 경험이 충분하다면 내부 인력만으로 프로젝트를 진행하는 것이 이상적이겠지만, 그렇지 않을 경우가 더 많을 것이다. 그렇다면, 프로젝트에 필요한 기술적 역량과 경험, 추진력을 갖춘 외부 협력 대상을 찾는 것이 중요해진다.
Output
프로젝트의 최종결과에 대해 명확하게 정의하는 것도 중요하다. 이것을 정의할 때에는, 목표로 하는 기능에 대한 ‘묘사’ 수준에서 시작하여 해당 기능들에 대한 세부 명세까지 상세히 정리해 볼 필요가 있다. 이 과정은 특히 외부와의 협력을 통해 프로젝트를 진행할 때 더욱 중요해지는데, 프로젝트 관련자들이 가지고 있는 최종 결과의 내용과 범위에 대한 시각이 서로 다를 경우 큰 어려움에 빠지게 될 수 있기 때문이다. 회사A의 경우에는 ‘학생의 학습 수준 측정 기능, 학습 수준을 고려한 새로운 문제 추천 기능’ 등과 같이 정리하기 시작하여 학습 수준의 평가 방식과 추천 문제의 선택 방식에 대한 세부적인 방법론까지 정리할 수 있다. 회사B의 경우라면, 작업자가 직접 품질을 평가했을 때의 정확도보다 높은 성능을 내는 것을 목표로 하는 것과, 짧은 시간동안 얼마나 많은 작업 결과를 낼 수 있을 것인가와 관련한 목표 중에서 선택하거나, 두 가지 모두를 목표로 할 수 있을 것이다. 회사A의 경우에는, 개발한 기능을 활용한 서비스에 대한 학생들의 만족도를 평가해 보는 것이 중요할 수도 있다.
그러나, 데이터에 대해 충분히 검토해 보기 전에 명확한 목표 성능을 설정하는 것이 오히려 프로젝트의 진행을 어렵게 만드는 경우도 많이 발생한다. 위에서도 언급했지만, 인공지능 프로젝트를 통해 구현한 결과의 성능은, 활용한 데이터에 의해 크게 좌우되고, 미리 예측하기 어려운 경우가 많기 때문이다. 따라서, 인공지능 프로젝트 고유의 불확실성을 고려하여 결과에 대한 기대치를 현실적으로 잡을 필요가 있다.
Integration
Integration 요소는 프로젝트의 결과를 어떻게 활용할 것인가에 대한 것이다. 가장 대표적으로는, 프로젝트의 결과를 독립적인 서비스로 구현하거나, 기존의 서비스에 통합하는 것 중에서 선택하는 과정이 필요할 수 있다. 또한 프로젝트를 통해 구현된 인공지능 모델에 데이터를 공급하는 방법에 대한 정리를 해야 할 수도 있다. 회사A의 경우, 인공지능 모듈을 현재 제공하고 있는 학습 서비스의 내부에 포함시킬 지, 아니면 인공지능 모듈을 따로 분리하여 동작시키고 모듈의 출력을 전송하도록 구성할 것인가에 대해 고민해야 한다. 회사B는 소음 데이터가 수집되는 과정과 품질 평가 결과가 활용되는 환경의 특성을 고려하여 인공지능 평가모듈의 동작 방식을 정해야 한다.
물론, 세부적인 내용은 프로젝트를 진행하는 과정에서 명확해지기도 하므로, 이러한 요소들을 사전에 모두 완벽하게 정리하기 위해 너무 많은 시간을 소비할 필요는 없다.
(3) Communication 방법 및 Paperwork에 대한 정의
모든 프로젝트가 마찬가지겠지만, 성공적인 결과를 얻기 위해서는 기록과 공유에 대한 원칙이 세워져 있어야 한다. 특히 outsourcing을 통해 프로젝트를 진행할 경우에는 프로젝트를 맡긴 사람과 수행하는 사람이 달라 서로의 커뮤니케이션 과정에서 문제가 발생할 가능성이 높아진다. 이런 현상의 대표적인 원인은 기술자와 비기술자들이 사용하는 어휘와 말투가 다르다는 점이다. 이러한 문제를 최대한 사전에 방지하기 위해서는 상대방이 명확하게 이해했는가를 꼼꼼하게 체크하는 인내심이 필요하며, 프로젝트 진행 과정에서 산출되는 모든 내용을 적절한 형태로 (간단하게라도) 기록하여 추후에 재검토할 수 있게 해야 한다. 가장 최악의 경우는 시도 때도 없이 전화로만 커뮤니케이션하고 기록을 전혀 남기지 않는 것이다.
(4) Working model 의 구현과 검증
훌륭한 기술을 보유하고 있어도 데이터에 따라 인공지능 프로젝트의 성공 여부가 달라진다는 점은 이미 언급한 바 있다. 따라서, 프로젝트에 대한 사전준비가 완료되면 1차 모델을 빨리 만들어서 적용해 보는 pilot project를 수행하는 것이 좋다. Pilot project에서는 1차 모델을 처음부터 구현하는 것보다는 비슷한 종류의 프로젝트에서 성능이 검증(공개)된 모델을 찾아 활용하는 것이 효과적이다. (물론 이러한 경우에도 라이센싱 문제를 점검할 필요가 있다.) 만약 1차 모델을 활용한 결과가 아주 나쁠 경우, 또한 설상가상으로 그 결과의 개선 가능성이 현저히 낮게 판단될 경우에는 프로젝트의 방향을 대폭 수정하거나, 심한 경우에는 프로젝트를 중지하는 것이 추가적인 시간과 비용을 낭비하는 일을 피할 수 있게 한다. 이와 같은 맥락에서, Quick ML [4]은 아이디어 도출, 구현, 실험과 검증으로 구성된 하나의 iteration을 최대한 빠르게 진행하고, iteration을 반복하면서 성능을 높여 나가는 개념을 제시하고 있다.
인공지능 및 데이터 분석 기반의 프로젝트를 크게 나누어 exploratory 단계와 confirmatory 단계로 구분하기도 한다. [12] Exploratory 단계는 데이터의 특성을 살펴보고 가장 적합한 모델을 찾아가는 과정에 해당하며, confirmatory 단계는 데이터 처리 방법 및 모델의 성능과 활용성을 최대한 끌어올리는 단계라고 볼 수 있다. 프로젝트가 정상적으로 진행된다면, exploratory 단계의 성격이 짙은 초기 iteration에서 시작하여, iteration이 진행될 수록 confirmatory한 성격으로 변화하게 될 것이다.
(5) 확보한 결과의 내재화 (internalization) 방안 마련
프로젝트가 완료되면, 산출된 모든 것들이 중요한 자산이 된다. 프로젝트를 진행하는 과정에서 얻은 모든 경험과 지식들은 다음 프로젝트를 수행하거나 프로젝트 결과를 비즈니스화할 때 활용될 수 있기 때문이다. 프로젝트를 통해 확보한 기술적 자산을 담은 지적재산권을 확보하는 것이 가장 중요하다고 볼 수 있는데, 지적재산권의 중요성은 프로젝트 결과를 기반으로 비즈니스를 진행할 경우에 그 중요도가 더해진다. 또한 프로젝트의 진행방식에 대한 경험, 진행과정에서 확보하게 된 모든 중간결과 및 문서들은 다음 프로젝트를 더욱 효과적으로 기획하고 수행할 수 있게 한다.
이외에도 인공지능 분야의 세계적인 대가 중의 하나인 Andrew Ng은 training을 중요한 internalization의 요소로 제시하였는데, [10] training 대상자의 담당업무나 직책에 따라 training 시간과 내용 구성을 달리해야 한다고 주장하고 있다. 특히 outsourcing 형태로 프로젝트를 진행하였을 경우에는 내부 인력으로 하여금 프로젝트와 관련된 기술적 내용과 지식을 최대한 흡수하게 해야 한다. 프로젝트가 완료된 이후에 새롭게 충원된 인원들을 대상으로 한 training의 중요성도 간과해서는 안된다.
일단 마치며…
지금까지 정리해 본 요소들을 꼼꼼하게 고려하는 과정은 쉽지 않은 일이며, 기술적 지식이 없거나 연구개발 프로젝트에 익숙하지 않은 사람들에게는 더욱 낯설고 힘든 작업이다. 따라서, 사전에 자료를 직접 찾아 연구하거나 제대로 된 경험과 지식을 보유한 사람과 커뮤니케이션을 해야 한다. 프로젝트의 성패는 세부적인 요소들에 의해서 판가름나기 때문이다. 인공지능을 자신의 비즈니스에 적용해 보고자 한다면, 본 포스트에서 언급한 요소들에 대하여 고민하고 정리해 보자.
인포리언스는 이번 포스트에서 소개한 요소들 및 세부요소들을 충실히 고려한 인공지능 연구개발 프로세스를 디자인하였고, 현재 실제적인 프로젝트에 적용하고 있다. 인포리언스는 프로젝트를 수행하면서 얻게 될 추가적인 경험을 바탕으로 후속 포스트를 업로드할 계획이다.
지난 포스트 [1][2]에서는 정상적인(normal) 기계 진동 데이터와 비정상적인(anomaly) 기계 진동 데이터가 확보된 상황에서, 학습모델로 하여금 normal 데이터의 특성을 학습하게 한 뒤에, 새로 입력되는 데이터에서 anomaly 데이터를 탐지하도록 하는 개념을 소개하였다. 해당 포스트들에서 소개한 실험결과를 통해 우리가 구현한 anomaly 탐지 모델이 좋은 결과를 보여줄 수 있음을 확인하였으나, 이러한 개념을 실제 현장에서 활용하기 위해서는 normal 데이터를 충분히 모아서 학습시켜야 한다는 한계가 있다. 예를 들어, 기계 제품을 생산하는 공장에서 생산품의 동작 진동 데이터를 통해 불량 여부를 판단하려 하거나, 생산 설비의 동작 상태를 소음 데이터를 통해 모니터링하고자 할 때, normal 상태의 학습용 데이터를 최대한 많이 확보해야 할 필요가 있는 것이다. 또한 normal 상태의 특성이 다양하거나 normal 상태의 내부 특성에 변화가 생길 경우 적응할 수 없다는 한계가 있다. (학습 모델은 초기에 학습한 특성에만 전적으로 의존하게 된다.)
조금씩 똑똑해지는 모델을 구현하려면.
그렇다면, 학습 대상이 되는 초기 normal 데이터가 많지 않을 경우에는 학습 모델로 하여금 anomaly를 잘 탐지하도록 할 수 없는 걸까? 더 나아가, 초기 데이터의 양이 작으면, 아무래도 normal 데이터에 대한 모든 특성을 한번에 학습할 수 없을 테니, 초기에는 정확도가 불만스럽더라도, 계속 새롭게 확보하게 되는 normal 데이터의 특성을 지속적으로 학습 모델에 제공하여 모델이 점점 더 똑똑해지게 할 수는 없을까?
그림 1. 학습 모델의 업데이트 프로세스 개념도. 초기 학습 데이터를 기반으로 만들어진 모델은 지속적으로 사용자와 상호작용하면서 점점 똑똑해질 수 있다.
이러한 모델을 구현하기 위해서는 초기 학습 모델이 출력한 판단 오류(ex: normal 데이터를 anomaly로 판단하는 오류)에 대한 정보를 학습 모델에 알려주어야 하며, 학습 모델은 자신이 범한 오류가 다시 나타나지 않도록 업그레이드되어야 한다. (그림 1 참조) 이를 위해, 사용자가 초기 모델의 판단 오류를 학습 모델에 알려주는 상황을 가정해 볼 수 있다. 예를 들어, 초기 모델이 anomaly로 판단한 데이터를 사용자가 직접 확인한 뒤, 판단이 틀린 결과에 대해서는 해당 데이터가 normal 데이터임을 학습 모델에 알려주는 것이다. 학습 모델은 사용자가 알려준 오류 정보를 기반으로 자신의 실수를 보정하기 위한 업데이트 프로세스를 수행해야 하며, 이러한 과정을 빠른 시간 안에 끝내서 사용자가 관여해야 하는 수고를 최대한 덜어줄 필요가 있다.
가벼운 업데이트, 약간 깊은 업데이트, 그리고 깊은 업데이트
인포리언스는 학습 모델의 업데이트 프로세스를 여러가지 종류로 구분하여 적용하고 있다. 업데이트의 종류는 학습 모델이 업데이트 과정에서 얼마나 커다란 변화를 겪는가에 따라 구분한다. 가벼운 업데이트는 업데이트에 관여하는 파라메터의 수가 작아 업데이트 과정에 소요되는 시간이 짧다는 장점이 있는 대신 업데이트의 효과가 제한적일 수 있다는 한계가 있으며, 깊은 업데이트는 업데이트에 상대적으로 많은 시간이 소요되지만 효과가 제대로 반영될 가능성이 커진다는 장점이 있다. 이것은 시험기간 동안에만 벼락치기로 공부한 효과와 장기간에 걸쳐 우직하게 공부한 효과가 다르다는 점에 비유될 수 있지 않을까 한다.
실험 개념
본 포스트에서는, 가장 가벼운 업데이트와 약간 깊은 업데이트를 수행해 본 결과를 소개한다. (각 업데이트 과정에 적용한 구체적인 알고리즘은 추후에 소개하도록 한다.) 사용자가 일정 기간 동안 학습 모델의 판단 오류를 보정해 주면 점차적으로 정확도의 목표치를 달성하고, 최대한 빨리 목표치를 달성하며, 일단 목표치를 달성한 후에는 정확도가 목표치 이하로 다시 내려오지 않도록 하는 것이 목적이다. 실험 과정의 개념은 다음과 같다.
지난 포스트[2]와 동일한 데이터를 활용한다.
학습과 테스트 과정이 빠르게 수행될 수 있도록 가벼운 모델과 feature를 활용한다. (1-Dimensional Variational Autoencoder (VAE) & RMS) (지난 포스트[2]를 참조)
Normal 데이터를 여러 그룹으로 나누어 단계별로 입력한다.
Anomaly로 잘못 판단된 테스트 데이터를 normal로 재태깅하여 학습 모델에 재입력한다. (사용자가 수행할 오류 보정 과정을 모델링)
학습모델은 재입력된 데이터를 기반으로 스스로 내부 파라메터를 업데이트한다.
테스트 정확도의 목표치는 ROC AUC 값이 0.95 를 나타낼 때로 설정한다.
테스트 정확도의 목표치에 도달하면 사용자는 더 이상 오류를 보정하지 않는다.
이번 포스트를 위한 실험과정에서는 전체 normal 데이터(235개) 중에서 아주 작은 일부에 해당하는 20개를 랜덤으로 선택하여 초기 학습 데이터로 활용하였으며, 각 단계에서 입력할 테스트 데이터에는 normal 데이터와 anomaly 데이터를 각각 20개씩 역시 랜덤으로 선택하여 포함시켰다. 각 단계에서 테스트가 완료된 후에는 anomaly로 잘못 판단된 normal 데이터를 normal 로 태깅(보정)하여 학습 모델이 자신을 스스로 업데이트하는 과정에 활용하도록 하였다.
실험 결과
그림 2. 가벼운 업데이트를 적용했을 때의 성공 케이스와 실패 케이스
그림 2는 각 단계에서 사용자가 보정해 준 오류를 바탕으로 학습 모델이 가벼운 업데이트 과정을 수행했을 때의 결과를 나타낸다. 그림 2-(a)와 2-(b)는 업데이트가 잘 이루어져서 단계가 진행됨에 따라 테스트 정확도가 상승한 케이스를 나타낸다. 3번째 단계에서부터 정확도 목표치를 달성하였고, 이후의 단계에서도 계속 목표치를 웃도는 결과를 보여주었다. 그러나, 이러한 경우에 못지 않게 그림 2-(c) 또는 그림2-(d)와 같은 결과들도 많이 관찰되었는데, 단계가 진행되어도 정확도가 상승하지 않거나, 목표치까지 정확도가 상승하지 못한 경우들이다. 이 결과를 통해, 가벼운 업데이트가 효과적인 경우도 존재하기는 하지만, 늘 그렇다고 볼 수는 없다는 잠정적인 결론을 내릴 수 있다. (물론, 다른 종류의 데이터와 학습 모델을 활용하게 되면 완전히 다른 결과를 얻게 될 수 있음에 유의해야 한다.)
그림 3. 약간 깊은 업데이트를 적용했을 때의 성공 케이스
그림 3은 약간 깊은 업데이트 과정을 수행했을 때의 결과를 나타낸다. 정확도 목표치를 이른 단계에서 달성하였고, 실험을 반복하여도 비슷한 패턴의 결과를 지속적으로 보여주었다. 이 결과를 통해, 약간 깊은 업데이트 과정을 적용할 경우에는 학습모델이 빠르게 발전하여 목표치의 성능을 갖추게 할 수 있음을 확인하였다. (물론, 모든 데이터와 학습 모델에 대해서도 이러한 결과를 동일하게 얻을 수 있다고 일반화하면 안된다.)
Future works
본 포스트에서는 인포리언스가 연구개발한 가벼운 업데이트 및 약간 깊은 업데이트 알고리즘을 활용하면 점차적으로 똑똑해지는 anomaly detection 모델을 구현할 수 있다는 가능성을 간단한 실험 결과를 활용하여 제시하였다. 실험 결과를 통해 가능성을 확인하였지만, 이 포스트에서 제시한 결과가 절대적인 것은 아니며, 다양한 데이터와 학습 모델에 적용하여 검증해 볼 필요가 있다. 인포리언스는 사용자 또는 환경과 상호작용하면서 점점 스마트해지는 학습 모델을 구현하는 것과 관련된 다양한 연구를 계속 진행하고 있으며, 관련된 주요 연구문제를 해결해 가고 있다.
2016년도에 IEEE Transactions on Reliability에 발표된 논문[1]은 진동(소음) 데이터를 활용하여 air compressor의 상태를 모니터링하는 방법을 제시하고 있다. 이 논문에서는 한 종류의 healthy state (normal) 와 7 종류의 fault state (anomaly) 들에 해당하는 데이터를 대상으로 연구를 진행하였다. 각 state에는 225개의 데이터 파일들이 포함되어 있다.
가장 먼저, healthy state와 fault state에 해당하는 진동(소음) 데이터를 직접 들어보자. 해당 기계에 대한 도메인 지식이 없는 사람이 소리만으로 두 상태를 구분하는 것은 불가능할 듯 하다.
소리 1. Normal state data
소리 2. Fault state data
문제 정의
논문[1]은 자신들이 제시한 데이터 preprocessing 과정 및 학습 모델을 활용하면 매우 높은 정확도로 각 state들을 구분할 수 있다고 언급하고 있다. 이 논문은 각 state를 탐지(구분)하는 문제를 classification의 관점에서 풀었는데, 모든 state들에 해당하는 데이터가 충분히 확보되어 있는 상황을 가정하고 있다. Support Vector Machine (SVM)을 학습 모델로 채택하였으며, SVM의 효율적인 학습과 활용을 위해 입력 데이터에 대한 preprocessing, feature extraction 및 feature selection 과정에 많은 양의 노력을 할애하고 있다. 그러나 실제 환경에서는 normal 상황에 비해 anomaly 상황이 자주 나타나지 않아 anomaly state에 대한 충분한 데이터를 수집하기 어렵다. 따라서 anomaly state 에 나타나는 특성을 학습할 충분한 기회를 학습 모델에게 부여할 수 없게 된다. 또한 어떠한 feature가 추출 가능하며, 추출 가능한 feature들의 활용성은 어느 정도나 되는지 예측(판단)하는 작업도 만만치 않다.
본 포스트에서는, 2가지 관점에서 논문[1]과는 다른 접근 방식을 채택해 보았다. 첫째, classification의 관점이 아닌, anomaly detection의 관점에서 문제를 해결해 보았고, 둘째, deep learning 모델을 활용하여, 데이터에 대한 preprocessing, feature extraction 및 feature selection 과정을 최소화하였다.
Generative model을 써서 anomaly detection 방식으로 풀어보자
일반적으로 anomaly detection 과정에서는 학습 모델로 하여금 normal 데이터의 특성을 학습하게 한 뒤에, normal state와 anomaly state가 섞여있는 데이터에서 anomaly state에 해당하는 데이터를 찾아내도록 한다. 실제 현장에서 anomaly state에 해당하는 데이터를 충분히 수집하기 어렵기 때문인데, 데이터를 수집할 목적으로 기계 장치에 실제로 문제를 일으키거나, 일부러 고장을 낼 수 없다는 점을 생각해 보면 쉽게 이해할 수 있다.
Normal state 의 특성에 대한 학습을 마친 후에는 새로 입력된 데이터가 normal state 와 얼마나 유사한가를 판단한다. 이 과정에서 generative model 의 reconstruction 기능을 활용하는데, generative 모델의 학습 과정이 충분히 이루어질 경우, 새로 입력된 데이터가 normal state 에 가까울 수록 reconstruction 결과가 원래의 데이터와 유사한 형태를 나타내게 된다는 점을 활용하는 것이다. 다시 말해서, 입력된 데이터의 reconstruction 결과가 많이 일그러지면, 그 데이터는 anomaly state 에 해당할 가능성이 높아지는 것이다.
그림 1. 2가지 종류의 feature 활용 및 학습 모델에 대한 적용
그림 1은 본 실험의 2가지 개념을 나타낸다. 진동이나 사운드 데이터에서는 다양한 feature 들을 추출할 수 있는데, 가장 많이 쓰이는 mel-spectrogram을 필두로 하여, 다양한 time-domain features, frequency domain features, time-frequency domain representations, phase-space dissimilarity measurements, complexity measurement 들을 활용할 수 있다. 인포리언스는 이러한 분류들에 해당하는 40여 가지의 다양한 feature 들을 활용하고 있으나, 이번 실험은 최대한 간단한 preprocessing 과정을 적용하는 것을 목표로 하므로, 사운드 파워의 특징을 나타내는 가장 기본적인 RMS[2]와 사운드 분석 과정에서 가장 널리 쓰이는 mel-spectrogram 을 활용한다.
이번 실험에서는 대표적인 generative model 중의 하나인 Variational Autoencoder (VAE)를 사용한다. [3, 4, 5] VAE는 raw 데이터에서 latent feature들을 추출하는 encoder 네트워크와 이를 다시 복원하는 역할을 하는 decoder 네트워크로 구성된다. 대표적인 generative model 중의 하나인 Generative Adversarial Network (GAN) [6]을 선택하는 것도 가능하겠지만, anomaly detection 응용에 GAN을 잘 활용하려면 추가적인 trick 이 요구되고 학습 안정성도 상대적으로 높지 않으므로, GAN을 활용한 실험 결과는 추후에 포스팅하기로 하고, 이번 실험에서는 활용하지 않는다. [7, 8]
RMS는 각 프레임에서 1차원의 정보만 추출하므로 1차원 시계열이 추출되며, mel-spectrogram은 mel 의 수에 해당하는 고차원의 정보를 추출하므로 (이번 실험에서는 mel의 수를 128로 지정) image 형태의 feature가 추출된다. 따라서, RMS를 추출할 경우에는 1-dimensional convolution layer로 구성된 VAE를 활용하고, mel-spectrogram을 추출할 경우에는 2-dimensional convolution layer로 구성된 VAE를 활용한다.
이번 포스트에서는 7가지 fault state들 중에서 flywheel[9]에 fault가 발생한 경우를 탐지하도록 했다. Normal state에 해당하는 225개의 데이터 중에서 112개를 무작위로 골라 학습 데이터로 활용하였고, 나머지 113개는 테스트 데이터로 활용하였다. Flywheel fault state의 데이터들 중에서 113개를 무작위로 골라 테스트 데이터로 활용하였다. Anomaly detection 방식의 실험이므로, fault data는 학습 데이터에 포함시키지 않는다.
실험 결과
그림 2. 1D-VAE 활용 결과
그림 2는 1D-VAE를 활용했을 때의 실험결과를 나타낸다. 그림 2의 상단의 그래프는 1D-VAE가 normal 데이터 및 anomaly 데이터에 대해 출력한 reconstruction error 값의 분포를 나타낸다. 전체적으로 anomaly 데이터에 대한 loss 값이 높게 분포되고 있으며, normal 데이터와 anomaly 데이터의 loss값의 분포가 잘 분리되는 형태를 보인다. 그림 2의 하단의 내용은 loss 값의 기준을 0.0026으로 잡았을 때의 anomaly 탐지 결과의 정확도를 나타낸다. Normal 데이터에 대해서는 113개의 데이터 중에서 3개를 잘못 분류하였고, anomaly 데이터에 대해서는 113개의 데이터 중에서 4개를 잘못 분류하여, ROC_AUC 값이 97%에 육박하였고, Kappa_Score는 94% 정도를 나타내었다.
그림 3. 2D-VAE 활용 결과
그림 3은 2D-VAE를 활용했을 때의 실험결과를 나타낸다. 그림 3의 상단의 그래프는 2D-VAE가 normal 데이터 및 anomaly 데이터에 대해 출력한 reconstruction error 값의 분포를 나타낸다. 1D-VAE를 적용했을 때와 마찬가지로, anomaly 데이터에 대한 loss 값이 높게 분포되고 있으며, normal 데이터와 anomaly 데이터의 loss값의 분포가 잘 분리되는 형태를 보인다. 그림 3의 하단의 내용은 loss 값의 기준을 0.116으로 잡았을 때의 anomaly 탐지 결과의 정확도를 나타낸다. Normal 데이터에 대해서는 113개의 데이터 중에서 2개의 데이터를 잘못 분류하였고, anomaly 데이터에 대해서는 113개의 데이터 중에서 3개를 잘못 분류하여, ROC_AUC 값이 98%에 육박하였고, Kappa_Score는 95% 정도를 나타내었다.
전체적으로, 1D-VAE와 2D-VAE가 모두 준수한 성능을 보여주었는데, 위의 결과만 놓고 보자면 2D-VAE가 아주 미세하게 더 나은 결과를 보여주었다. 그러나, 학습 및 테스트 과정에서 1D-VAE가 훨씬 가볍고 빠르게 동작한다는 사실도 기억할 필요가 있다. (2D-VAE 의 내부 파라메터의 수가 훨씬 많기 때문에 당연한 현상이다.) 비슷한 성능을 보인다면, 실제 응용 현장에서는 더 빨리 학습시킬 수 있고 더 빨리 결과를 출력할 수 있는 모델을 선호할 수도 있기 때문이다.
Future works
위에서 잠깐 언급하였지만, 진동이나 사운드 데이터에서 추출 가능한 1D feature 들은 인포리언스가 활용하고 있는 것들만 40여 종류에 이를 정도로 무척 다양하다. 이번 실험에서는 RMS가 충분한 역할을 했지만, 다른 동작 패턴을 보이는 기계 장치의 진동(소음) 데이터에 대해서도 그러하다는 보장은 없으므로, 다른 feature들을 활용한 실험을 해보는 것도 좋을 것이다. 그리고 진동(소음) 데이터를 수집하는 과정에서 환경 소음이 포함된다면, 이번 실험에서 적용한 데이터 활용방법이나 학습 모델로는 좋은 결과를 얻기 어려울 것이다.
인포리언스는 진동(소음) 데이터에서 anomaly 를 탐지하는 것과 관련된 다양한 연구를 계속 진행하고 있으며, 관련된 주요 연구문제를 해결해 가고 있다.
References
Nishchal K. Verma, R. K. Sevakula, S. Dixit and A. Salour, Intelligent Condition Based Monitoring using Acoustic Signals for Air Compressors, IEEE Transactions on Reliability, vol. 65, no. 1, pp. 291-309, 2016.
기계 장치가 발생시키는 진동(소음)이 나타내는 패턴을 이해하고, 이상 패턴을 정확히 탐지(분류)할 수 있는 지능적인 모듈을 구현할 수 있을까? 이러한 기능이 구현되어 실시간으로 기계 장치의 상태를 모니터링할 수 있게 된다면, 작업자들에게는 큰 도움이 될 수 있다. 예를 들어, 기계의 고장 여부를 판단하거나, 잔존 유효 수명 (RUL: Remaining Useful Life)을 측정할 수도 있다. 더 나아가, 갑자기 발생할 수 있는 오작동으로 인한 사고를 미리 방지할 수 있게 된다면 작업 공간의 안전 수준을 크게 높일 수도 있다. 그런데, 이러한 기능을 구현하려면, 기계 장치가 발생시키는 진동(소음)에서 이상 패턴을 자동적으로 탐지하는 기능이 우선적으로 필요하다. 더 구체적으로 말하자면, 입력된 진동(소음) 데이터가 정상 패턴을 보이는지, 아니면 이상 징후를 보이는지의 여부를 스스로 판단하는 모듈을 구현해야 한다.
이번 포스팅에서는, 진동(소음)데이터에 포함되어 있는 이상 패턴의 존재를 찾아내는 기초적인 모듈을 구현해 본 결과를 소개한다. 진동(소음) 데이터를 활용한 실험결과를 담은 첫 포스팅이니만큼, 기본적인 구조의 머신러닝 모델을 쓴 결과를 소개하기로 한다.
활용할 데이터 선정
실험을 진행하려면, 되도록 많은 양의 진동(소음)데이터가 필요하다. 또한 각 데이터에 이상 패턴이 들어있는지 알려져 있어야 한다. 기초적인 수준의 실험을 하면서 대용량의 진동(소음) 데이터를 직접 모을 수는 없는 노릇이니, 우선 공개된 데이터[1]를 찾아서 활용하도록 하였다.
데이터 준비
데이터[1]에는 동일한 길이의 진동(소음)파일들이 들어있으며, 정상적인(normal)상태의 기어 및 비정상적인(anomaly) 상태의 기어에서 나는 진동(소음) 데이터가 포함되어 있다. 그러나 데이터의 수가 너무 작아서 그대로 활용하기에는 부족하여, 본 실험에서는 데이터의 수를 늘리기 위해 augmentation 과정을 수행하였다. (Augmentation 기법에 대해서는 따로 포스팅할 예정)
표 1. 실험에 활용한 데이터의 용량
그렇다면, 정상적인(normal)상태의 기어 및 비정상적인(anomaly) 상태의 기어에서 나는 진동(소음)은 어떻게 다를까? 진동(소음) 파일을 직접 플레이 해보자.
진동(소음) 데이터를 처리하고 활용하려면, 그 특성을 잘 표현하는 feature를 추출하여야 한다. 이번 실험에서는 가장 많이 활용되는 mel-spectrogram을 추출하여 사용하였다.
그림 1. Normal 상태의 기어 진동(소음)의 mel-spectrogram
그림 2. Anomaly 상태의 기어 진동(소음)의 mel-spectrogram
학습 모델 선택
일반적으로는 anomaly 상태가 자주 발생하지 않기 때문에, anomaly 클래스에 해당하는 데이터의 수는 normal 클래스에 해당하는 데이터의 수에 비해 크게 부족하게 되어 classification 모델을 활용하기 어렵다. 따라서 anomaly detection 모듈은 normal 데이터의 특성을 충실히 학습시킨 모델을 생성한 뒤에, 테스트 데이터의 특성이 normal 데이터의 특성과 얼마나 다른 지 측정하게 하는 개념으로 구현한다. 간단히 말하면, 입력된 데이터의 특성이 normal 데이터의 특성과 많이 다르면 anomaly로 간주하는 방식이다.
Anomaly detection을 위해서는 데이터의 특성 및 응용 요구사항에 따라 다양한 형태의 학습 모델을 활용할 수 있다. 인포리언스는 anomaly detection 을 위해 여러가지 학습 모델을 활용해 본 경험이 있으나, 이번 포스팅에서는 가장 기본적인 Convolutional Recurrent Neural Networks(CRNN)을 활용해 본 결과만을 일단 소개하기로 한다. (인포리언스는 실제 현장에서 수집된 대용량의 공장 진동(소음)에 대해서도 CRNN 계열의 모델을 효과적으로 활용했던 전례가 있다.)
CRNN은 Convolutional Neural Networks (CNN)와 Recurrent Neural Networks (RNN)의 특징을 혼합한 것으로, CNN의 마지막 layer를 RNN으로 구성하는 것이 가장 대표적인 형태이다. 이렇게 구성하면 CNN이 추출한 feature들의 시간적(temporal) 특성을 고려할 수 있다는 장점이 있다.
그림 3. 본 실험에서 활용한 CRNN의 개념도
그림 3은 이번 실험에서 활용한 CRNN의 개념적 구조를 나타낸다. 같은 타이밍(프레임)에 나타난 고차원(본 실험에서는 mel numbers에 해당)특성을 1-D convolution을 통해 추출하고, 이렇게 추출한 특성들의 temporal 배열에 나타나는 sequential 특성을 LSTM layer에서 잡아내게 하는 구조이다. 이번 실험은 기초적인 개념을 소개하기 위한 것이므로, 이전 프레임의 특성 패턴 sequence의 구조를 바탕으로 현재의 프레임의 특성을 예측하는 가장 기본적인 형태를 선택하였다. 실제로 관찰된 프레임의 특성과 학습 모델이 예측한 특성 사이에 차이가 많이 날 경우 해당 프레임을 anomaly로 판단하는 개념으로서, 하나의 데이터 파일 내에서 프레임 단위로 anomaly를 탐지할 수 있다는 장점이 있는 모델이다. 따라서, 데이터 내의 어느 타이밍에 anomaly 패턴이 나타났는가에 대한 정보도 쉽게 추출할 수 있다.
그림 4. 본 실험에서 활용한 CRNN의 세부 구조
그림 4는 이번 실험에서 활용한 CRNN의 세부 구조를 나타낸다. 1개의 CNN layer와 2개의 LSTM layer, 그리고 linear layer로 구성되어 있는 아주 간단한 모델이다. 본 실험에서는 그림 4와 같이 구성한 CRNN을 200 epoch 동안 학습시켰다.
실험 결과
그림 5. Normal 데이터에서 발견된 anomaly 프레임의 수(파란색)와 anomaly 데이터에서 발견된 anomaly 프레임의 수(붉은색)
그림 5를 통해, 35개의 normal 테스트 데이터에서 각각 발견된 anomaly 프레임의 수와 35개의 anomaly 테스트 데이터에서 각각 발견된 anomaly 프레임의 수를 비교해 볼 수 있다. 우리는 붉은색 그래프와 파란색 그래프가 최대한 separable한 형태가 되는 것을 목표로 하는 셈이다. (Anomaly 프레임으로 분류하기 위한 기준이 되는 loss값을 설정하는 방법이나, 이러한 분류과정을 정확히 수행하기 위해서 관찰해야 하는 과거 프레임의 수(sequence length) 등과 같은 parameter들에 대한 언급은 지면 관계상 생략한다.)
그림 6. 최종 실험 결과
그림 6은 3개 미만의 anomaly 프레임을 가진 데이터를 normal로 판단하고, 3개 이상의 anomaly 프레임을 가진 데이터를 anomaly로 판단하였을 때의 최종 결과를 수치로 보여준다. Confusion matrix를 보면, 우리가 학습시킨 CRNN 모델이 normal 데이터는 100% 정확하게 normal로 판단하였으나, 아쉽게도 35개의 anomaly 데이터들 중 6개를 normal로 판단하는 오류를 범했음을 알 수 있다.
이 실험 결과는 기계 진동(소음)에서 이상 패턴을 탐지하는 과정의 기초적인 개념을 소개하기 위해 가장 기본적인 모델을 아주 제한적인 데이터에 적용해 본 것이다. 실험 과정과 결과에 아쉬운 부분이 있지만 충분히 의미있는 결과를 얻었다고 평가할 수 있다. 물론, 실제 환경에서 쓰일 만한 모듈을 구현하고자 한다면 이 정도 수준의 연구로는 턱없이 부족하며, 훨씬 더 깊이있는 연구와 분석과정을 거쳐야 한다.
잠정적인 결론
지금까지, 기계 진동(소음)데이터에서 anomaly를 자동적으로 탐지하는 모듈을 1-Dimensional CNN layer와 LSTM layer를 기반으로 구성한 CRNN모델을 활용하여 구현하고 테스트해 보았다. 비교적 간단한 구조의 모델들을 적용했음에도 불구하고, 테스트 결과는 추가적으로 진행할 연구 결과에 대해 희망을 품게 하였다.
사람의 심장박동이 나타내는 패턴을 이해하고, 이상 패턴을 정확히 탐지(분류)할 수 있는 지능적인 모듈을 구현할 수 있을까? 이러한 기능이 구현되어 실시간으로 심장박동 패턴을 모니터링하는 장치에 탑재된다면, 심장질환을 가진 사람들에게는 큰 도움이 될 수 있다. 예를 들어, 부정맥, 협심증이나 심근경색 등의 질환을 가진 환자들이나, 고지혈증, 고혈압, 당뇨 등과 같이 심혈관 건강과 밀접한 관련을 가진 질환을 가진 사람들의 심장 건강 상태를 자동적으로 체크할 수 있게 된다. 더 나아가, 갑자기 찾아오는 심장마비나 심정지 상태를 미리 예측할 수 있게 된다면 많은 사람들의 소중한 생명을 구할 수도 있다. 그런데, 이러한 기능을 구현하려면, 심장박동 패턴의 특징을 자동적으로 파악, 분류하는 기능이 우선적으로 필요하다. 더 구체적으로 말하자면, 입력된 심장박동 데이터가 정상 패턴을 보이는지, 아니면 이상 징후를 보이는지의 여부를 스스로 판단하는 모듈을 구현해야 한다.
이번 포스팅에서는, 이미 기록된 ECG(electrocardiogram: 심전도) 데이터에서 부정맥(Arrhythmia)의 존재 여부를 찾아내고 구분하는 기초적인 모듈을 구현해 본 결과를 소개한다. ECG 데이터를 활용한 첫 실험결과를 담은 포스팅이니만큼, 기본적인 구조의 머신러닝 모델을 쓴 결과를 소개하기로 한다.
활용 데이터 선정
실험을 진행하려면, 많은 양의 ECG 데이터가 필요하다. 또한 각 데이터에 부정맥 패턴이 들어있는지 알려져 있어야 한다. 기초적인 수준의 실험을 하면서 대용량의 ECG 데이터를 직접 모을 수는 없는 노릇이니, 우선 많은 연구자 및 개발자들이 활용하는 공개된 데이터[1]를 찾아서 활용하도록 하였다.
데이터 준비
데이터를 준비하는 중에, 유사한 주제로 발표된 논문[2]을 발견하였고, 해당 논문의 저자가 정제한 데이터셋[3]이 있음을 알게 되어 이번 실험에 활용하기로 하였다. 이 데이터셋은 실험에 활용하기에 적합하도록 모든 ECG 데이터를 beat 별로 잘라내고 zero-padding 과정을 수행하여 모든 beat 의 길이를 동일하게 맞춰놓았다.
표 1. ECG 데이터의 클래스 구분 (from [2])
ECG 데이터는 5개의 클래스 – 정상(N) 클래스와 4 종류의 부정맥 클래스 (S, V, F, Q) – 로 구분되는데, 각 클래스에 대한 설명은 표 1에 나타나 있다.
그림 1. 각 클래스에 해당하는 ECG 패턴 그래프 및 전체 클래스의 통합 그래프
ECG 데이터의 패턴은 각 클래스 별로 고유의 특징을 나타낸다. 그림 1은 각 클래스의 ECG 패턴을 보여준다.
표 2. 클래스 별 ECG 데이터의 용량 (개수)
원래의 데이터에는 정상(N) 클래스에 해당하는 데이터의 용량이 압도적으로 많고 부정맥 클래스에 해당하는 데이터의 용량이 작다. 따라서, 이번 실험을 위해서는 전체 데이터에서 학습용 데이터를 각 클래스 별로 2000개씩, 테스트용 데이터를 각 클래스 별로 800개씩 랜덤으로 선택하여 활용하였다. 이번 실험에 활용한 데이터의 용량은 표 2에 나타나 있다.
참고로, 논문 [2]의 저자는 2개의 1-dimensional Convolutional layer 를 포함한 residual block이 5번 반복되도록 구성하고 fully-connected layer를 추가한 형태로 CNN을 구성하여 활용하였으며, 93.4%의 정확도를 보였다고 보고하였다.
학습 모델 (1) – LSTM(Long Short-Term Memory) 을 활용한 classification
그림 2. 본 실험에서 활용한 LSTM 모델의 구조
ECG 데이터는 시간에 따른 변화를 특징으로 포함하는 시계열 데이터이다. 시계열 데이터를 분석하는 과정에서 가장 먼저 떠올려 볼 수 있는 모델은 Recurrent Neural Networks (RNN) 계열이므로, 본 실험에서도 LSTM을 활용해 보았다. 하나의 ECG 데이터 – 187 time steps 로 구성 – 가 입력되면 3개의 LSTM layer를 거쳐 feature를 추출한 후에 Fully Connected Layer에 입력시키는 구조이다. (그림 2 참조)
그림 3. LSTM 모델의 테스트 결과
그림 3은 LSTM 기반 모델을 200 epoch 만큼 학습시킨 뒤에 테스트 데이터를 통해 정확도를 측정한 결과를 보여준다.
LSTM 기반 모델의 정확도는 94.6% 를 나타내었는데, 기본적인 모델을 활용한 초기 실험의 결과 치고는 나쁘지 않아 보인다. 다만, 이 정도의 정확도를 가진 모델을 실제로 활용할 수 있을 지의 여부는 아직 알 수 없다.
학습 모델 (2) – 1-Dimensional CNN(Convolutional Neural Network) 을 활용한 classification
그림 4. 본 실험에서 활용한 1-Dimensional CNN 모델의 구조
시계열 데이터의 특성을 분석하기 위해서는 1-Dimensional CNN도 활용할 수 있다. 본 실험에서 활용한 모델은 하나의 ECG 데이터 – 187 time steps 로 구성 – 가 입력되면 3개의 1-Dimensional Convolution layer들을 거쳐 feature를 추출한 후에 Fully Connected Layer에 입력시키는 구조이다. (그림 4 참조)
그림 5. 참고 논문[2]의 실험 결과
참고 논문[2]에서도 1-Dimensional Layer 로 구성된 CNN 모델을 사용하여 93.4%의 정확도를 나타냈다고 보고하고 있다. (그림 5) 다만, 기본적인 구조의 CNN 모델을 채택한 본 실험과는 달리, 해당 논문에서는 residual 모델을 활용하였다. 따라서 이번 실험에서는 참고 논문[2]의 결과와 직접적으로 비교해 보기 위해 LSTM 모델을 활용할 때와는 다르게 전체 데이터를 학습에 활용하였다. (표 2의 전체 데이터를 학습에 활용)
그림 6. 1-Dimensional CNN 모델의 테스트 결과
그림 6은 1-Dimensional CNN 모델을 100 epoch 만큼 학습시킨 뒤에 테스트 데이터를 통해 정확도를 측정한 결과를 보여준다. 1-Dimensional CNN 모델의 정확도는 94.4%를 나타내었는데, 직전 실험에서 확인한 LSTM 기반 모델의 정확도(94.6%)와 비슷하며, 참고 논문 [2]에서 활용한 Residual CNN의 정확도(93.4%)와도 크게 다르지 않다. 이 역시 초기 실험 결과 치고는 나쁘지 않아 보인다.
잠정적인 결론
지금까지, ECG 데이터들을 자동적으로 분류하는 모듈을 LSTM 및 1-Dimensional CNN을 기반으로 구성한 모델을 활용하여 구현하고 테스트해 보았다. 비교적 간단한 구조의 모델들을 적용했음에도 불구하고, 테스트 결과는 추가적으로 진행할 연구 결과에 대해 희망을 품게 하였다.
내가 활동하는 공간에서 발생하는 소리를 정확히 탐지하고, 더 나아가 그와 관련된 상황까지 판단할 수 있는 지능적인 모듈을 구현할 수 있을까? 이러한 기능이 구현되어 실제 환경에서 활용된다면, 소리를 잘 듣지 못하는 분들이나, 거동이 불편한 분들에게는 큰 도움이 될 수도 있다. 예를 들어, 비상상황이 발생하여 소리가 났을 때, 누군가가 방문했을 때, 전화벨이 울렸을 때에, 소리를 잘 듣지 못하는 분들에게 상황을 알려주거나, 거동이 불편한 분들을 대신하여 스스로 대처하게 할 수도 있다. 사람이 특정 행동을 할 때 나는 소리를 지속적으로 탐지하면 그 사람의 건강상태와 관련된 소중한 정보를 얻을 수도 있다. 그런데, 이러한 기능을 구현하려면, 소리를 탐지하고 판별하는 기능이 우선적으로 필요하다. 더 구체적으로 말하자면, 입력된 소리 데이터에 우리가 탐지하고자 하는 소리가 들어있는지의 여부를 스스로 판단하는 모듈을 구현해야 한다.
이번 포스팅에서는, 다양한 소리가 녹음된 데이터들 중에서 특정 종류의 소리를 찾아내는 모듈을 구현해 본 결과를 소개한다. 첫 포스팅이니만큼, 기본적인 구조의 머신러닝 모델을 쓴 결과를 소개하고, 다음 포스팅부터는 발전된 모델을 적용한 결과를 살펴보기로 한다.
활용 데이터 선정
실험을 진행하려면, 다양한 소리가 녹음된 데이터가 많이 필요하다. 또한 각 데이터에 어떤 소리가 들어있는지 알려져 있어야 한다. 기초적인 수준의 실험을 하면서 실제로 소리를 녹음하며 대용량의 데이터를 직접 모을 수는 없는 노릇이니, 우선 많은 연구자 및 개발자들이 활용하는 공개된 소리 데이터를 찾아서 활용하도록 하였다. [1] [2]
데이터 준비
이번 실험에서는 생활 환경에서 발생할 수 있는 여러 종류의 소리들 ([1][2]에 포함된 41개의 종류들) 중의 일부 – 사람의 기침 소리(콜록), 고양이가 내는 소리(야옹), 개가 내는 소리(멍멍) – 를 탐지 대상 소리로, 그 밖의 다른 소리들을 비탐지 대상 소리로 구분하고, 입력되는 소리들을 탐지 대상 소리와 나머지 소리로 자동 분류하는 기본적인 구조의 CNN(Convolutional Neural Network)기반의 classifier를 만들어 보았다. 비탐지 대상 소리 데이터의 종류가 꽤 많으므로, 본 실험을 위해서는 탐지 대상 소리 데이터의 2배수 만큼의 비탐지 대상 소리 데이터를 여러 종류에 걸쳐 랜덤으로 선정하여 테스트용 데이터셋에 포함시켰다. (단, 이 데이터셋에는 파일에 들어있는 실제 소리와 파일의 분류명이 일치하지 않는 것들이 꽤 포함되어 있음에 유의할 필요가 있다.)
표 1. 실험에 활용한 데이터셋의 용량
탐지 대상 소리의 샘플은 다음과 같다. (아래의 샘플들은 [1][2]에 공개된 데이터들 중에서 ‘cc0’ 라이센스에 해당하는 것들이다. [5])
사운드 데이터를 처리하고 활용하려면, 그 특성을 잘 표현하는 feature를 추출하여야 한다. 이번 실험에서는 mel-spectrogram을 사용하였다.
그림 1. 개가 내는 소리의 mel-spectrogram
그림 2. 기침 소리의 mel-spectrogram
그림 3. 고양이가 내는 소리의 mel-spectrogram
CNN(Convolutional Neural Network)
이번 실험에서 활용한 CNN 모델의 구조는 다음과 같다.
결과
그림 4. Epoch 진행에 따른 loss의 변화
그림 4는 100 epoch 만큼 학습하는 동안 나타난 loss값의 변화 추이를 보여준다. 학습이 진행되는 동안 loss값이 지속적으로 줄어드는 패턴을 보인 것으로 보아 전체적으로 무리없이 학습이 진행된 것처럼 보인다.
표 2. 테스트 결과
위의 표는 테스트 데이터셋에 대한 학습 모델의 분류 정확도를 나타낸다. Accuracy는 0.9, F1-score는 0.93, roc_auc 값은 0.87를 기록하였다. 이 정도의 정확도라면, 실제 응용에 적용하기에는 어려울 것이다. 다만, 낯선 데이터에 대해 기본적인 구조의 CNN을 처음 적용해 본 결과치고는 그렇게 비관적이지만은 않다.
데이터에 noise mixing
실제 환경에서라면, 우리가 만든 모듈이 입력받게 될 소리 데이터에는 다양한 생활 noise가 섞여있을 것이다. 예를 들어, 음악이나 TV소리가 섞여있을 수 있고, 문을 여닫는 소리나 사람이 내는 다른 소리들도 포함되어 있을 수 있다. 그렇다면, 우리가 만들 모듈은 noise가 포함된 소리 데이터를 입력받았을 때에도 동일한 기능을 수행할 수 있어야 한다. 우리가 만든 모듈이 생활 noise를 포함한 소리 데이터를 입력받았을 때에는 어떤 결과를 보이는지 실험해 보기 위해, 소리 데이터 내의 랜덤한 타이밍에 랜덤으로 선택된 background noise가 나타나도록 mixing하였다. Background noise는 공개 데이터셋 [3][4]을 활용하였다.
그림 5, 그림 6, 그림 7과 그림 1, 그림 2, 그림 3 을 비교해 보면, noise를 포함시킬 경우 mel-spectrogram에 상당한 변화가 나타남을 확인할 수 있다.
표 3. Noise가 포함된 데이터에 대한 테스트 결과
표 3은 앞서 학습한 모델에 다양한 noise가 섞인 테스트셋을 적용하였을 때의 분류 정확도를 보여준다. Accuracy는 0.74, F1-score는 0.83, roc_auc 값은 0.65을 기록하여, 소리 데이터에 noise가 포함될 경우, 분류 정확도가 전체적으로 많이 낮아졌음을 알 수 있다.
잠정적인 결론
지금까지, 다양한 소리가 녹음된 데이터들의 집합 내에서 우리가 탐지대상으로 선정한 소리가 들어있는 데이터를 찾아내는 모듈을 CNN을 활용하여 구현하고 테스트해 보았다. 비교적 간단한 구조의 CNN을 적용했음에도 불구하고, 테스트 결과는 추가적으로 진행할 연구 결과에 대해 희망을 품게 하였다. 또한 실제 상황에서 나타날 수 있는 noise가 우리가 만든 모듈의 정확도를 떨어뜨린다는 사실도 확인하였다. 실제 환경에서는 다양한 소리가 동시에 나타날 것이므로, noise에 강인한 모듈을 구현해야 할 필요성을 확인한 셈이다.
Future works
추가적인 실험은 다양한 방향으로 진행될 수 있다. 가장 기본적으로는, 사운드 데이터에서 더 많은 특성 정보를 추출하여 활용해 보는 것이다. 또한 다양한 형태의 CNN을 구현하여 활용해 볼 수 있을 것이다. 더 나아가, 데이터에 noise가 포함되어 있어도 제 성능을 발휘할 수 있는 고유의 발전된 모델을 구현, 적용해 볼 필요가 있다. 추가적인 모델 및 실험 결과에 대해서는 다음 편에서부터 차차 소개하도록 한다.
데이터 출처
[1] Eduardo Fonseca, Manoj Plakal, Frederic Font, Daniel P. W. Ellis, Xavier Favory, Jordi Pons, Xavier Serra. General-purpose Tagging of Freesound Audio with AudioSet Labels: Task Description, Dataset, and Baseline. In Proceedings of DCASE2018 Workshop, 2018. URL: https://arxiv.org/abs/1807.09902
[2] Eduardo Fonseca, Jordi Pons, Xavier Favory, Frederic Font, Dmitry Bogdanov, Andrés Ferraro, Sergio Oramas, Alastair Porter, and Xavier Serra. Freesound datasets: a platform for the creation of open audio datasets. In Proceedings of the 18th International Society for Music Information Retrieval Conference (ISMIR 2017), pp 486-493. Suzhou, China, 2017.
[…] https://inforience.net/2021/01/28/bias-ai/ […]