2018년 9월 초, 이 프로그램을 개발한 시점 기준으로, 세계적으로 인터넷 혹은 SNS에서 자해 이미지를 딥러닝으로 찾아내는 시도는 이 프로그램, SAFE가 최초인 것으로 보인다. 프로그램 이름은 SAFE (Suicidal Attempts Finding Engine)으로 정했지만, 사실 현재 프로그램으로는 자해 이미지만 검색할 수 있다는 점에서 Self-injury Attempts Finding Engine이어야 더 정확할 수 있겠다. 2018년 10월 초, 딥러닝 기반 사회관계망(SNS) 자해 이미지 탐색 프로그램의 개발을 완료한 시점에 GitHub에 소스코드를 공개했고, 페이스북 TensorFlow KR 그룹에 소개글을 써서 프로그램에 대해 소개를 했었기 때문에, 이 글에서는 개발 과정에서 있었던 개인적인 생각들과 이후 약 2개월 동안 프로그램을 실제 작동하면서 거둔 성과들을 정리하는 차원에서 다루어 보겠다.
2009년 말, 국내에서 아이폰 3G/3GS가 출시된 후 10여 년 간 가히 혁명이라고 할 정도의 변화들이 있었다. 이제 주머니 속의 스마트폰은 ‘생활’이 되었고, 2016년 알파고와 이세돌의 대결 이후, 인공지능, 특히 다층 신경망을 기반으로 한 ‘딥러닝(deep learning)’이 새로운 시대를 이끌어갈 테마로 주목 받았다. 초창기 딥러닝이 괄목할 만한 성과를 보여준 분야가 컴퓨터 비전(computer vision) 분야였고, 특히 이미지의 인식에서 인간을 능가하는 수준에 다다르게 되었다. 때문에, 의료에 있어서도 딥러닝의 적용이 주로 영상의학(radiology) 분야를 중심으로 이루어졌다. 국내 의료 인공지능 스타트업 중 유명한 Lunit이나 Vuno 역시 X-ray 이미지를 다룬다. 정신건강의학과 의사로서 딥러닝에 관심을 가지다 보니, 정신의학과 딥러닝의 접점에 있는 것이 주로 뇌 자기공명영상(Brain MRI)이었고, 딥러닝 기반으로 Brain MRI를 다루는 시도들에 관심을 가지게 되었다. 이 분야에 국내에 몇몇 업체들이 나타나기 시작했지만 여러 가지 이유로 아직 임상현장까지는 다다르지 못하고 있다.
2018년 8월, 네이버 Clova AI Research의 도움으로, 자연어처리 분야(Natural Language Processing; NLP)에 딥러닝을 적용한 Deep NLP 분야를 접할 수 있었다. 정신건강의학과 의사로서 치료 도구로 ‘언어’를 사용하는 경우가 많기 때문에, 자연스럽게 Deep NLP에 관심을 가지게 되어 정신치료 챗봇(Chatbots for Psychotherapy)을 개발하는 것까지 관심이 가게 되었다. 하지만 실제 데이터로 작업하면서, 치료자와 환자의 대화를 구별하여 학습시키는 문제, 치료자의 개성을 살리는 문제, 그리고 무엇보다도 데이터셋의 부재 등의 문제로 많은 한계를 느꼈다.
그랬기 때문에, 연구 단계가 아닌, ‘당장 사용할 수 있는 기술’을 가지고 ‘당장 가치를 만들어 낼 수 있는 문제’를 다루고 싶은 마음이 들었다. ‘당장 사용할 수 있는 기술’이라면, 당연히 딥러닝에서는 ‘이미지 인식’이었고, 이것을 적용할 수 있는 정신의학계의 문제로 청소년들 사이에서 사회관계망(SNS)에 자해 인증샷을 올리는 것이 2018년 초부터 유행처럼 번져나가는 것이 떠올랐다. 하지만, 정신건강의학과 의사 입장에서 이런 문제를 발견했을 때, 먼저 해당 게시물을 올린 사람에 대해 개입이 필요하다는 생각이 떠오른다. 그리고, 그 게시물에 노출된 사람들에 대한 개입 역시 필요할 것이라는 생각이 뒤따른다. 딥러닝으로는 이렇게 이후 개입 과정을 해결할 수는 없기에 고민이 되었다. 하지만, 리서치를 해보니 국가기관인 중앙자살예방센터에서 ‘지켜줌인(人)’이라는 이름으로 자살정보 모니터링단을 운영하고 있었고, 여기에 참가할 경우 중앙자살예방센터에 자살정보를 리포팅하면, 이후 개입은 센터에서 맡아서 해주고 있었다.

따라서, 사람 대신 신경망이 SNS에서 자살정보를 찾을 수만 있다면, 이를 프로그래밍으로 통해 중앙자살예방센터에 리포팅하여, 센터에서 개입할 수 있겠다는 생각이 들었다.
AvoMD 설립자인 학교 때 선배에게 자문을 구했더니, Apple에서 개발한 TuriCreate 패키지를 사용하면 데이터셋만 모으면 바로 신경망을 학습시켜서 사용할 수 있다고 하였다. 당장 Python의 Selenium 패키지를 사용해서 웹 크롤러, 특히 중앙자살예방센터 자료를 참고해 자해 사진이 많이 올라오는 인스타크램을 특정하여 인스타그램 크롤러를 작성하였다. #자해 혹은 #자살 해시태그를 달고 있는 이미지 8천여 장을 모았고, 이를 자해 이미지를 포함한 것과 그렇지 않은 것으로 나누어서 TuriCreate으로 생성한 ResNet 신경망에 학습시켰다. 데이터를 트레이닝셋과 테스트셋으로 나누어서 진행했는데, 90% 이상의 정확도로 자해 이미지를 분류할 수 있어, 이 정도 성능이면 실전에 투입해도 되겠다고 판단했다.
중앙자살예방센터에서는 자살정보(정확히는 자살 관련 게시물’들’을 가진 인스타그램 계정 주소)를 정해진 서식에 따라 엑셀파일(.xlsx) 형태로, 이메일로 접수 받고 있었다. 따라서 이미 제작한, 신경망이 판별할 새로운 데이터를 모을 웹 크롤러에 더해서, 신경망이 자해 게시물이라고 판별한 게시물에 대해, (1) 해당 게시물을 포함한 인스타그램 계정 주소를 엑셀파일에 정해진 서식에 맞게 작성할 프로그램, 그리고 (2) 그렇게 작성된 엑셀 파일을 중앙자살예방센터에 이메일로 보낼 프로그램을 작성하는 작업이 필요했다. 다행히 Python에서 엑셀파일을 다루는 openpyxl 모듈과 이메일을 다루는 email 모듈을 사용하여 이 프로그램을 작성할 수 있었다.

이후 약 2개월 정도 Google 클라우드 플랫폼의 리눅스 서버에서 이 프로그램을 실행하였고, 오류로 실행을 못한 날들을 제외하고, 총 61일 동안 자해게시물을 포함한 6,554개의 계정을 중앙자살예방센터에 리포팅하였다. 일평균 107.4개의 계정을 리포팅할 수 있었는데, 중복된 계정은 제외하고 리포팅하도록 프로그램을 작성하였으므로, 적지 않은 수였던 것 같다. 사람이 이 작업을 할 경우 1개 계정당 10분의 봉사활동 시간을 인정해주었는데(6건 당 1시간, 1일 최대 8시간=48건 인정), 이 수치로 환산하면 이 프로그램은 매일 약 17.9시간의 작업을 한 셈이 된다.
그리고 사실, 로그를 체크해보니 게시물을 크롤링하는데 대부분의 시간이 사용되었고, 신경망으로 자해 이미지인지 판별하는데는 굉장히 적은 시간이 소요되었다. 따라서, 이후에 게시물 크롤링과 자해 이미지 판별 과정을 병렬로 처리하면 프로그램의 성능을 한층 개선할 수 있을 것이다.
시작 날짜 | 시작 시각 | 프로그램 실행시간 | 자해게시물 게시 계정 수 |
2018-10-01 | 22:10:54 | 6:33:04 | 537 |
2018-10-02 | 23:59:29 | 3:17:53 | 112 |
2018-10-03 | 21:52:06 | 14:03:11 | 520 |
2018-10-06 | 1:15:15 | 9:25:09 | 437 |
2018-10-06 | 15:14:25 | 7:57:46 | 86 |
2018-10-07 | 15:00:15 | 14:45:59 | 391 |
2018-10-08 | 15:08:40 | 1 day, 4:05:07.806433 | 326 |
2018-10-09 | 15:08:43 | 1 day, 2:49:41.728879 | 99 |
2018-10-10 | 15:08:46 | 1 day, 12:18:16.328375 | 73 |
2018-10-11 | 15:08:48 | 1 day, 0:34:03.521588 | 70 |
2018-10-12 | 15:08:50 | 4:28:06 | 63 |
2018-10-13 | 15:08:52 | 1 day, 11:51:24.345548 | 66 |
2018-10-14 | 15:08:54 | 20:10:00 | 93 |
2018-10-15 | 15:08:56 | 10:34:09 | 96 |
2018-10-16 | 15:08:58 | 9:07:13 | 77 |
2018-10-17 | 15:09:00 | 15:19:38 | 67 |
2018-10-18 | 15:09:02 | 19:03:33 | 75 |
2018-10-19 | 15:09:04 | 1 day, 0:48:57.903649 | 72 |
2018-10-20 | 15:09:07 | 19:17:14 | 64 |
2018-10-21 | 15:09:09 | 13:54:04 | 100 |
2018-10-22 | 15:09:11 | 1 day, 1:58:40.543090 | 82 |
2018-10-23 | 15:09:14 | 5:24:25 | 59 |
2018-10-24 | 15:00:07 | 10:01:17 | 93 |
2018-10-25 | 15:00:10 | 1 day, 7:47:08.046715 | 65 |
2018-10-26 | 15:00:13 | 21:45:25 | 49 |
2018-10-27 | 15:00:24 | 21:00:13 | 43 |
2018-10-28 | 15:00:20 | 13:14:57 | 58 |
2018-10-29 | 15:00:22 | 22:39:38 | 70 |
2018-10-30 | 15:00:33 | 18:15:43 | 60 |
2018-10-31 | 15:00:41 | 18:32:21 | 41 |
2018-11-01 | 15:00:45 | 15:56:10 | 54 |
2018-11-02 | 15:00:41 | 17:05:26 | 61 |
2018-11-03 | 15:00:43 | 11:58:48 | 53 |
2018-11-05 | 15:01:01 | 1 day, 14:04:36.664968 | 120 |
2018-11-06 | 15:01:12 | 15:01:35 | 142 |
2018-11-07 | 15:09:38 | 17:48:19 | 61 |
2018-11-09 | 15:09:29 | 8:57:57 | 87 |
2018-11-10 | 15:09:31 | 20:18:59 | 67 |
2018-11-11 | 15:09:43 | 17:24:28 | 75 |
2018-11-12 | 15:09:51 | 9:25:47 | 73 |
2018-11-13 | 15:09:44 | 13:05:24 | 53 |
2018-11-14 | 15:09:47 | 6:52:32 | 66 |
2018-11-15 | 15:09:50 | 1 day, 8:45:03.459944 | 76 |
2018-11-16 | 15:10:04 | 1 day, 8:56:13.661084 | 60 |
2018-11-17 | 15:10:07 | 12:33:38 | 99 |
2018-11-18 | 15:10:12 | 13:35:15 | 60 |
2018-11-19 | 15:10:09 | 1 day, 4:06:12.826930 | 56 |
2018-11-20 | 15:10:12 | 14:14:56 | 57 |
2018-11-21 | 15:10:24 | 1 day, 15:57:41.605733 | 69 |
2018-11-23 | 15:10:41 | 1 day, 4:29:14.646639 | 98 |
2018-11-24 | 15:10:48 | 23:19:04 | 69 |
2018-11-25 | 15:10:50 | 20:24:21 | 74 |
2018-11-26 | 15:10:45 | 22:16:40 | 75 |
2018-11-27 | 15:11:00 | 1 day, 3:25:22.354534 | 73 |
2018-11-29 | 15:11:07 | 23:05:58 | 117 |
2018-11-30 | 15:11:12 | 13:19:04 | 61 |
2018-12-07 | 15:00:21 | 1 day, 2:50:30.894486 | 253 |
2018-12-09 | 15:00:29 | 1 day, 18:35:43.465943 | 108 |
2018-12-10 | 15:00:48 | 1 day, 2:08:51.208709 | 67 |
2018-12-11 | 15:00:54 | 20:48:43 | 59 |
2018-12-13 | 15:00:52 | 1 day, 6:39:47.265409 | 67 |
총 실행날짜(일) | 61 | 총 자해게시물 게시 계정 수(개) | 6554 |
평균 자해게시물 게시 계정 수(개/일) | 107.442623 |
정리하자면, (아마도) 세계 최초로 개발된 딥러닝 기반 사회관계망(SNS) 자해 이미지 탐색 프로그램 SAFE는 61일 간 실행되며 자해 이미지를 포함한 계정 6,554개(일 평균 107.4개)를 중앙자살예방센터에 리포팅하였다. 사람이 10분 당 1개를 처리하는 것으로 가정하면(중앙자살예방센터 기준), 이는 추가적 개선 없이 현재 프로그램으로도 61일 간 총 1092시간(일 평균 17.9시간)을 처리한 셈이 된다.
하지만 사실, 단순한 노동량으로 따지기는 힘든 것이, 자해 이미지를 검색하는 것은 이러한 작업을 하는 사람들에게 상당한 정신적 스트레스를 발생시키고, 심할 경우 외상후 스트레스 장애(PTSD) 등 정신질환까지 발생시킬 수 있다. 따라서 이런 작업은 가능하면 딥러닝을 통해 신경망에게 맡기는 것이 더 이롭지 않을까 하는 생각이다.
마지막으로, SAFE 프로그램의 실행 결과는 실제로 정신건강 분야에서도 기술이 도입이 얼마만큼 효과적으로 산재한 문제들을 해결하는 데 도움을 줄 수 있는지 보여준다. 하지만 동시에, 자해 게시물을 올림으로써 도움을 호소하는 사람들, 그리고 그 게시물들에 노출되어 도움이 필요해질 사람들을 돕기 위해서 어떠한 개입이 필요하고 또 가능할지, 실제 정신건강 분야에 있는 의료진으로서 고민이 남아 있다.
※ 이 프로젝트는 별도의 펀딩 없이 개인적으로 진행해왔는데, 현재 제 사정으로 위의 결과를 마지막으로 추가적 진행은 중단된 상태입니다.