반응형

 

Precision@k, Recall@k, MAP는 랭킹 성능평가에서 많이 쓰입니다. Precision@k, P@k, Prec@k, Precision-at-k 등 다양하게 사용됩니다. 간단히 말하면 @k의 의미는 k 번째까지의 예측을 가지고 지표를 산정하는 것을 말합니다. 물론  MRR(Mean Reciprocal, Rank), nDCG(Normalized Discounted Cumulative Gain), DCG 등 다른 Ranking 지표도 있습니다. 이번에는 Precision@k, Recall@k, MAP에 대해서 알아보도록 하겠습니다.

Presion@3라면 3개까지의 예측/제안 결과 중에서 몇 개의 TP(특징 발견이 있다고-관련문서라고 맞춘 경우의 수)와 FP(특징이 발견되었다고-관련문서라고 예측했지만 실제로는 없는 경우의 수)를 가지고 계산할 수 있습니다.  Precision = TP / (TP+FP) 이니까요.

검색 엔진을 예로 들어 보겠습니다. 검색창에 '베이징 올림픽 대한민국'(질의1) 이라고 입력했을 때와 '대한민국 베이징 올림픽'(질의2)이라고 입력했을 때(2가지 질의에 대해서) 관련된 검색 결과를 잘 보여주는지 아닌지 평가한다고 가정해보겠습니다. 예를 드는 것이니 관련된 문서가 5개만 있다고 가정하겠습니다.

다시 말하면 질의에 적합한 문서들과 모델에서 순서대로 제안한 문서들을 가지고 계산할 수 있습니다. 정밀도(Precision)는 가져온 것 중에 얼마나 정확한 것이 많은가 를 측정하는 것이고 재현률(Recall)은 가져와야 할 문서 중에 얼마나 많이 가져왔는가를 측정하는 것입니다.

관련된 문서의 id = 1, 2, 3, 4, 5

질의1이 가져온 문서 id = 9, 2, 1

질의2가 가져온 문서 id = 1, 7, 8

 

@1에 대해서(즉, 가져온 1개까지에 대해서) 정말도와 재현율을 구해보겠습니다.

질의 1이 가져온 문서 id = 9

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 0 / 1 = 0 = 0%

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 0 / 5 = 0 = 0%

그럼 질의2에 대해서 계산해 보겠습니다.

질의 2가 가져온 문서 id = 1

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1 / 1 = 1 = 100%

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2 = 20%

 

@2에 대해서(즉, 가져온 2개까지에 대해서) 정말도와 재현율을 구해보겠습니다.

질의 1이 가져온 문서 id = 9, 2

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1 / 2 = 0.5

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2

그럼 질의2에 대해서 계산해 보겠습니다.

질의 2가 가져온 문서 id = 1, 7

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1 / 2 = 0.5

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2

 

마지막으로 @3에 대해서(즉, 가져온 3개까지에 대해서) 정말도와 재현율을 구해보겠습니다.

질의 1이 가져온 문서 id = 9, 2, 1

Precision@3 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 2(2하고 1) / 3 = 0.6

Recall@3 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 2 / 5 = 0.4 

그럼 질의2에 대해서 계산해 보겠습니다.

질의 2가 가져온 문서 id = 1, 7, 8

Precision@3 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1(1번 문서) / 3 = 0.3 

Recall@3 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2 = 20%

 

@k의 숫자에 따라, 즉, @1, @2, @3에 따라 Precision과 Recall 값이 바뀌는 것을 볼 수 있습니다. 3개 중에서 관련된 문서를 몇 개 가져왔는지 계산하는 것과 10개 중에서 관련된 문서를 몇 개 가져왔는지를 계산하는 것은 당연히 달라져야겠습니다. 이 문서 개수는 기본적으로 검색 결과 첫 화면에 몇 건이 보일 것이냐에 따라 기준이 달라질 것 같습니다.

설명의 편의를 위해서 관련 문서가 동일한 경우로 가정했지만 실제로는 질의별로 관련 문서가 다를 수 있으니 변경해서 산출하면 됩니다.

 

 

Average Precision

위 내용을 이용해서 각 질의에 대한 Average Precision을 구해보면 아래와 같습니다.

Average Precision = (정확한 문서를 가져왔을 경우 Precision 값)의 모든 합 / 정확한 문서를 가져온 횟수

질의 1의 Average Precision => ( 0 + 0.5 + 0.6 ) / 맞은 개수 = 1.1 / 2 = 0.55

질의 2의 Average Precision => (1 + 0.5 + 0.3 ) / 맞은 개수 = 1 / 1 = 1

 

Mean Average Precision(MAP)

mAP는 모델에 대한 성능을 나타냅니다. 즉 모든 테스트 질의 별 Average Precision을 가지고 계산합니다.

질의 별 Average Precision의 총합 / 질의 건수 = (0.55 + 1) / 2 = 0.775

 

같은 방법으로 다른 모델의 테스트 결과를 계산함으로써 다른 모델과 성능을 비교할 수 있습니다.

 

반응형
반응형


지난 포스팅에서는 인공지능/기계학습에 대한 기본적인 정의와 이해에 대해서 알아보았습니다. 학습방법에 따라 지도 학습, 비지도 학습, 강화 학습으로 나눌 수 있다고 말씀드렸었습니다.
https://bigdatamaster.tistory.com/108?category=990312

인공지능 기계학습 용어 상식 - 지도학습/비지도학습/강화학습

인공지능 쉽게말하면, 말 그대로 인공적인 지능을 말한다. 지능이란 인간이 지니는 지적인 능력으로, 합리적으로 생각하고 처리하는 능력이라고 할 수 있다. 인간이 가지는 특징인 지능을 인공

bigdatamaster.tistory.com

이번에는 가벼운 마음으로 인공지능의 역사와 연구분야에 대해 알아 보고자 합니다. 결론부터 말씀드려보면, 인공지능이 처음부터 인기가 많았던 것은 아니었지만 혁신적인 기술과 노력으로 인해 전환점이 되는 계기가 있었습니다. 연구분야의 경우 여러 가지의 방법으로 나눌 수 있겠지만 보통 시각인지 분야(Computer Vision/Multimedia), 언어인지 분야(Natural Language Processing), 그리고 음성/신호 처리 분야로 나눌 수 있을 것 같습니다. 먼저 개괄적인 내용과 인공지능의 역사, 그리고 학회를 통해 알아본 연구분야를 살펴보겠습니다. 이러한 역사와 연구 분야를 알아봄으로써 배경지식을 넓히고 이를 통해 인공지능과 기계학습을 사용할 수 있는 영역을 찾는데 도움이 되길 바랍니다. 물론 창의력을 발휘하여 새로운 영역은 언제든지 만들 수 있습니다. 다만 조금 어려울 뿐이지요.

인공지능 혁신의 시작

인공지능은 1940년대부터 연구된 분야이고 중간에 많은 우여 곡절도 있었고 기호 처리, 전문가 시스템 등 꼭 신경망이 아니라도 다른 여러 가지의 방법으로 인공지능을 만들기 위해 연구해 왔습니다. (너무 내용이 많아서 이 내용은 별도로 이야기하겠습니다.) 현재 우리가 보고 있는 인공지능 혁신의 시작점은 2012년 AlexNet이라는 모델과 2015년 ResNet이라는 모델이라고 할 수 있겠습니다.
먼저 최근 인공지능관련 연구에서 빼놓을 수 없는 분들이 있습니다. 그들은 2018년 튜링 어워드를 수상한 제프리 힌튼(Geoffrey Hinton), 얀 르쿤(Yann LeCun), 조슈아 벤지오(Yoshua Bengio) 입니다. AlexNet은 바로 제프리 힌튼 교수님이 쓴 "ImageNet classification with deep convolutional neural networks" 논문에서 2012년에 발표된 모델입니다. 이 모델이 놀라웠던 이유는 먼저, 기존에 사용되던 모델과 비교해서 우수한 성능 향상을 가져왔다는 것과 또 하나는 신경망의 특징을 찾아냈다는 것일 것 같습니다. 성능은 기존 모델 대비 10.8%의 에러를 줄였고 신경망의 깊이가 깊을수록 좋은 성능을 낼 수 있다는 것을 밝혀냈습니다. 깊은 학습(Deep Learning)을 발견한 것이지요. 그리고 기술적으로는 처음은 아니지만 GPU의 사용과, 얀 르쿤 교수님이 제안한 역전파(Backpropagation) 알고리즘, Max-pooling, ReLU 등을 이용했습니다.
2015년에 ResNet은 더 놀라운 성과를 이루어 냅니다. 바로 사람보다 이미지 분류를 더 잘해 낸 것이지요. 사람은 5%의 에러로 분류했는데 ResNet 모델은 3.57%의 에러로 분류했습니다. 그러니 많은 사람들이 놀랄 수 밖에 없었지요. 그래서 이후에 많은 사람들에게 관심을 받기 시작했습니다. 기술적으로는 말 그대로 딥~네트워크(무려 152층의 신경망 네트워크)를 만들었습니다. 그리고 스킵 컨넥션(Skip-connection), ReLU, Batch normalization을 적용했습니다.

ImageNet Large Scale Visual Recognition Challenge (ILSVRC)
이미지 데이터를 가지고 모델을 학습시켜서 이미지 내 물체를 분류해내고 위치를 찾는 문제를 위한 모델 성능을 평가하는 챌린지

이후로 딥러닝이 여러 분야와 문제에 적용되면서, 그리고 새로운 기술이 적용되면서 많은 확산이 이루어졌습니다. 더불어, 2016년 다보스포럼에서 클라우스 슈바프가 4차산업혁명의 핵심 기술로서 인공지능을 발표하여 세계 많은 사람들의 관심을 증가시켰고, 2016년 3월에는 딥마인드에서 개발한 알파고와 이세돌 기사의 대국으로 인해 국내에서는 더 많은 관심과 주목을 받았습니다. 그래서 더욱 많은 사람들이 인공지능에 대해서 생각하게 되었고 정부나 학계, 그리고 기업에서도 지원을 늘리기 시작했습니다. 현재에는 대학과 기업의 많은 연구소에서 많은 사람들이 많은 연구분야에 대해 활발하게 연구하고 있습니다.

인공지능 연구분야와 지능

인공지능이 해결하고자하는 문제나 연구분야를 고민하기 전에 일반적인 사람의 지능을 어떻게 나눌 수 있는지 생각해보면 좋을 것 같습니다. 인공지능 연구가 지능 연구와 비슷할 수 있으니까요. 위키에서는 지능을 아래와 같이 말하고 있습니다.
지능(智能) 또는 인텔리전스(영어: intelligence)는 인간의 지적 능력을 말한다. 지능은 심리학적으로 새로운 대상이나 상황에 부딪혀 그 의미를 이해하고 합리적인 적응 방법을 알아내는 지적 활동의 능력으로 정의할 수 있다.[1]

지능 - 위키백과, 우리 모두의 백과사전

지능(智能) 또는 인텔리전스(영어: intelligence)는 인간의 지적 능력을 말한다. 지능은 심리학적으로 새로운 대상이나 상황에 부딪혀 그 의미를 이해하고 합리적인 적응 방법을 알아내는 지적 활동

ko.wikipedia.org

핵심을 보면 지능을 "새로운 대상이나 상황에 부딪혀 그 의미를 이해하고 합리적인 적응 방법을 알아내는 지적 활동의 능력"라고 정의할 수 있겠네요.

나무 위키에서는 아래와 같이 나와 있어서 정확히 정의할 수 없겠네요.

"지능이라는 개념은 이 복잡한 현상을 확인하고 명확화하려는 시도이다. 일부 영역에서 상당한 명확성이 달성되었지만, 아직 모든 중요한 질문에 대한 답을 찾은 것은 아니며 완전히 의견 일치가 이루어진 것도 아니다." <미국 심리학 협회의 1995년 보고서>


(위의 정의들을 보고 나니 인공지능이라는 말은 정말 정의하기 어려운 말인 것 같습니다. ^^)

 

나무 위키 말고 그냥 위키의 내용을 기반으로 한번 생각해보시지요. 사람이 새로운 대상이나 상황에 부딪혀 그 의미를 이해하기 위해서 어떻게 하나요? 직설적으로 말씀드리면 보고, 듣고, 느끼고 생각하는 것을 통해 그 의미를 이해할 수 있다고 하겠습니다. 즉, 감각기관을 통해 외부 현상을 받아들이고 과거의 경험, 지식 등을 통해 그 의미를 알 수 있게 되는 것이지요. 아주 간단한 예로는 고양이를 보고 (강아지가 아니라) 고양이인 것을 알고, 휴대폰 벨소리를 듣고 (초인종이 아니라) 전화가 온 것을 알 수 있는 것이지요. 따라서 지능이 있다는 것은 인지능력이 있는 것을 의미한다고 할 수 있겠습니다. '인지'라는 말은 간단히 말하면 고양이와 휴대폰 예에서 처럼 '안다'는 것입니다. (설명하다 보니 '안다'라는 게 참 애매한 의미인 것 같습니다. 말장난 같이 들린 수 있지만 안다는 것은 깊이와 넓이의 한계로 결국에는 정확히(?) 알 수 있는 것은 아무것도 없을 것 같다는 생각이 드네요.^^) 사람에게는 너무나 당연한 예를 들어서 오히려 이상할 수 있겠지만 컴퓨터가 이러한 일을 (사람 수준으로) 할 수 있게 된 것은 불과 10년도 안됩니다. 그럼 이러한 인지영역에는 어떤 것들이 있을까요? 시각을 통해 알아내는 시각인지, 언어를 통해 그 의미를 알 수 있는 언어인지, 소리를 통해 의미를 알 수 있는 사운드인지 등이 있을 것 같습니다. 촉감을 통한 인지도 있을 수 있겠네요.

학회를 통해 알아본 영역

인공지능 관련 주요 학회로는ICCV(International Conference of Computer Vision), CVPR(Conference on Computer Vision and Pattern Recognition), ECCV(European Conference on Computer Vision) 등 시각인지를 다루는 Multimedia(Computer vision) 관련 학회가 있습니다. 그리고 ACL(Association for Computational Linguistics (ACL)), NeurIPS(Neural Information Processing Systems), 등 언어인지를 주로 다루는 NLP(Natural Language Processing) 관련 학회가 있습니다. 기계학습과 관련해서는 ICML(International Conference on Machine Learning), ICMI(International Conference on Multimodal Interaction)등의 학회가 있습니다. 음성/신호 처리 관련해서는 ICASSP(International Conference on Acoustics, Speech, and Signal Processing)가 있습니다. 물론 인공지능과 조금 거리가 있는, 이전부터 있었던 WWW, KDD, SIGMOD 등 인터넷, 데이터 마이닝, 데이터베이스와 관련된 학회도 있습니다. 인공지능이 'AI'라는 단어에 대한 불신이 팽배했던, 그래서 연구에 지원을 못 받았던, 그래서 연구가 활발하지 못했던 시기인 'AI Winter' 시절을 마치고 인기를 끌게 된 시작점이 Computer Vision 분야이기 때문에 관련된 연구와 학회가 가장 먼저 많이 확산되었다고 할 수 있습니다. 이후 자연어 처리나 신호처리 등으로 관련 연구와 실험이 확대되어 많은 성과물은 만들게 되지요.

이제는 연구소에서만 인공지능을 만드는 것이 아닌 상황입니다. 잘 아시는 것처럼 연구뿐만 아니라 이미 실생활에서도 많이 쓰이는 제품/서비스들이 만들어지고 있습니다.(물론 말만 인공지능이라고 가져다 붙인 제품/서비스도 많지만요.) 특히, 오픈 소스 프로젝트의 발달에 따라서 많은 개발과 관리가 더욱 적은 비용과 노력으로 가능하게 되고 있습니다. (물론 발달은 끝이 없을 것 같습니다.) 이러한 움직임은 특히 소프트웨어 거대 기업의 주도로 더욱 활발하게 이루어지고 있습니다. Facebook(Meta), Amazon, Apple, Netflex, Google, Microsoft 등이 대표적인 기업입니다. 아, 하드웨어 기업이긴 하지만 엔비디아(Nvidia)의 역할도 언급을 안 할 수는 없겠군요. GPU(Graphics processing unit)라는 반도체 칩을 생산하는 회사로 이 칩의 대중화로 인해 딥러닝을 실제로 만들 수 있게 되었다고 할 수 있겠습니다. GPU가 없었다면 딥러닝 훈련에 몇 달, 몇 년이 소요됐을 텐데 GPU를 통해 많은 시간을 혁신적으로 단축할 수 있게 되었습니다.

인공지능의 혁신을 불러온 AlexNet과 ResNet을 포함한 간단한 인공지능의 역사에 대해서 이야기했고 주요 학회들을 통해 Computer Vision, NLP, 음성/신호 처리 등의 연구분야가 있다는 것을 알아보았습니다.

기계학습에 대한 분류는 아래 스탠포드 강의를 참고해주세요.
https://bigdatamaster.tistory.com/142

스탠포드 기계학습 강의 Lecture 1 - Stanford CS229: Machine Learning - Andrew Ng (Autumn 2018)

오래된(?) 강의지만 다시 봐도 참 좋은 강의입니다. 앤드류 응 교수님의 스탠포드 컴퓨터 사이언스 과목의 299번 과목의 첫 번째 강의입니다. 앤드류 응 교수는 MIT에서 석사, UC버클리에서 박사를

bigdatamaster.tistory.com

반응형
반응형

ML 실무(Work, Life, Future)

이 글의 목적은 ML 엔지니어가 현업에서 일하면서 겪게 되는 일과 주변 환경, 마주하게 되는 문제, 그리고 해결방법 등의 다양한 경험과 노하우를 공유함으로써 ML 분야에 관심 있는 사람들이 실무에 대한 이해도를 높이고 업무에 적응하는데 도움이 되는 정보를 제공하는 것입니다. 최대한 쉽게 설명할 수 있도록 노력하겠습니다. (이해가 잘 안 되는 부분이나 잘못된 부분이 있으면 댓글, 메일로 알려주세요.)

왜 ML Metric(성능지표)가 필요한가?

이미지 안에 고양이가 들어있는지 아닌지를 구분하는 모델을 만들었다고 생각해봅시다. 잘 만들었다고 자랑하고 싶은데 어떻게 자랑해야 할까요? 쉽게 생각나는 방법이 다른 모델과 비교하는 것입니다. 100 장의 이미지 중에 10장의 고양이 사진이 있는데 내가 만든 모델에서는 10장 모두 찾았고 다른 사람의 모델에서는 9장만 찾았다면 내가 만든 모델이 더 좋은 모델이라고 할 수 있을 것입니다. 내 모델은 10개 중에 10개를 다 찾아서 100%이고, 다른 사람의 모델은 10개 중에 9개만 찾았으니 90% 맞추었다고 할 수 있으니까요. 동의하시나요?
그런데
만약에 내가 만든 모델에서는 100장 중에서 고양이가 있다고 판단한 이미지가 20장이고 다른 사람의 모델에서는 9장이라면 어떨까요? 즉, 내 모델에서는 20장이 고양이가 들어가 있다고 판단했지만 실제로는 10장만 있었고 다른 사람의 모델에서는 9장을 고양이가 들어있다고 판단했고 실제로 9장이 고양이가 들어가 있던 것입니다. 내 모델은 20번 있다고 했는데 10번만 있었으니 50% 맞추었다고 할 수 있고 다른 사람의 모델에서는 9번 있다고 했는데 9번 모두 있었으니 100% 맞추었다고 할 수 있겠네요. 이렇게 생각해보니 다른 사람의 모델이 더 좋은 것 같습니다.
위에서 설명드린 것처럼 단순히 있다/없다로 분류하는 문제에서도 여러 종류의 지표로 그 성능을 평가할 수 있습니다. 이것은 어떤 모델을 선택해서 사용하는 것이 더 좋은지 판단 기준이 되기 때문에 적합한 성능 지표를 산출하고 비교하는 것은 매우 중요합니다. 따라서 분류 문제에 있어서 많이 쓰이는 다양한 성능평가 지표를 알아보고 언제 어떤 지표로 평가/비교하는 게 좋은지 알아보도록 하겠습니다. 그리고 마지막으로는 이해 내용을 확인하는 퀴즈를 풀어보겠습니다. 자 그럼 먼저, 실제 데이터 분류 유형(고양이 있음/없음)과 모델의 추정 분류 경우(고양이가 있다고 추정/없다고 추정한 경우)를 기반으로 각각 발생한 결과수를 정리해서 혼돈 행렬(Confusion Matrix)을 만들어보고 이를 이용한 다양한 성능지표에 대해서 알아보겠습니다.

혼돈 행렬(Confusion Matrix)

위에서 말씀드린 것처럼 혼돈 행렬은 실제 데이터의 분류 유형과 모델의 추정 분류 유형으로 구분됩니다. 그래서 아래와 같은 행렬/표를 만들 수 있습니다.

  추정 분류(고양이 있음) 추정 분류(고양이 없음)
실제 분류(고양이 있음) TP: True Positive FN: False Negative
실제 분류(고양이 없음) FP: False Positive TN: True Negative

내가 만든 모델의 경우에서 Positive의 의미는 "고양이가 있다"를 나타 냅니다.
TP: True Positive는 모델이 있다고 판단해서 맞은 개수입니다.(실제로 고양이가 있는 이미지를 모델이 있다고 판단한 경우)
FN: False Negative는 모델이 없다고 판단해서 틀린 개수입니다.
FP: False Positive는 모델이 있다고 판단해서 틀린 개수입니다.
TN: True Negative는 모델이 없다고 판단해서 맞은 개수입니다.
"맞추었다"를 True로, "틀렸다"를 False로, "있다"를 Positive로, "없다"를 Negative로 기억하면 좋을 것 같습니다.
위의 표를 앞에서 설명한 '내가 만든 모델'의 결과로 혼돈 행렬을 만들어 보면 아래와 같습니다.

전체 테스트 데이터수 100 건 추정 분류(고양이 있음) 추정 분류(고양이 없음)
실제 분류(고양이 있음) 10 (모델이 있다고 판단해서 맞은 갯수) 0 (모델이 없다고 판단해서 틀린 갯수)
실제 분류(고양이 없음) 10 (모델이 있다고 판단해서 틀린 갯수) 80 (모델이 없다고 판단해서 맞은 갯수)

처음에 예를 설명하면서 했던 내용들이 깔끔하게 정리되어 보이는 것 같습니다.
(잠시 아래를 보지 말고 '다른 사람이 만든 모델'의 혼돈 행렬을 직접 만들어 보세요.)
'다른 사람이 만든 모델'의 결과로 채워 보면 아래와 같습니다. 9건만 고양이로 분류하고 나머지는 모두 고양이 없음으로 분류한 경우이지요.

  추정 분류(고양이 있음) 추정 분류(고양이 없음)
실제 분류(고양이 있음) 9 1
실제 분류(고양이 없음) 0 90

자, 지금까지 모델의 출력 결과에 따른 혼돈 행렬을 만들어 보았습니다. 그럼 이제부터는 이 행렬을 이용하여 다양한 성능 지표를 만들어 보겠습니다.

정확도(Accuracy)

말 그대로 모델의 정확도를 나타내는 지표입니다. 그래서 True 부분에 집중해서 계산됩니다. 모델이 맞춘 숫자와 실제 데이터 숫자의 비율로 계산할 수 있습니다. 즉, True로 시작하는 TP와 TN의 합을 전체 추정 개수(또는 총 실제 분류 건수:위의 예시에서는 총 데이터 수 100건)로 나누어 주면 됩니다. 아래는 내가 만든 모델에 대한 Accuracy를 계산한 내용입니다.
내가 만든 모델의 Accuracy = (TP + TN) / 총 실제 분류 건수 = (10 + 80) / 100 = 0.9 (= 90%)
(아래를 보지 말고 다른 사람이 만든 모델의 Accuracy를 계산해 보시지요.)
다른 사람이 만든 모델의 Accuracy = (TP + TN) / 총 실제 분류 건수 = (9 + 90) / 100 = 0.99 (= 99%)
Accuracy 관점에서 보면 다른 사람이 만든 모델이 더 좋은 성능으로 나타납니다.

정밀도(Precision)

모델이 얼마나 정밀하게 Positive를 찾아내는지 평가하는 지표입니다. 그래서 이 지표는 모델의 Positive 결과에 집중해서 계산됩니다. 즉, 전체 Positive라고 추정한 건수 중에 얼마나 맞추었는지를 평가합니다. 다시 말하면, TP 값을 전체 Positive건수(TP + FP)로 나누어서 계산합니다.
내가 만든 모델의 Precision = TP / (TP + FP) = 10 / (10+10) = 0.5 (= 50%)

(아래를 보지 말고 다른 사람이 만든 모델의 Precision를 계산해 보시지요.)
다른 사람이 만든 모델의 Precision = TP / (TP + FP) = 9 / (9 + 0) = 1 (= 100%)
Precision 관점에서 보면 다른 사람이 만든 모델이 더 좋은 성능으로 나타납니다.

재현율(Recall)

모델이 얼마나 많은 Positive Case를 찾아내는지 평가하는 지표입니다. 그래서 이 지표는 실제 분류 Case 중 Positive를 집중해서 계산됩니다. 즉, 실제 분류 Positive 건수 중에서 얼마나 많은 건수를 맞추었는지를 평가합니다. 다시 말하면, TP 값을 전체 실제 분류 Positive건수(TP + FN)로 나누어서 계산합니다.
내가 만든 모델의 Recall = TP / (TP + FN) = 10 / (10+0) = 1 (= 100%)
(아래를 보지 말고 다른 사람이 만든 모델의 Recall을 계산해 보시지요.)
다른 사람이 만든 모델의 Recall = TP / (TP + FN) = 9 / (9 + 1) = 0.9 (= 90%)
Recall 관점에서 보면 내가 만든 모델이 더 좋은 성능으로 나타납니다.

F1 Score

일반적으로 정밀도와 재현율이 모두 중요한 경우가 많이 있습니다. 즉, 모델이 정밀하게 Positive를 찾아내는 것도 중요하고 많은 최대한 많은 Positive Case를 찾아내는 것도 중요한 경우이지요. 이러한 경우 사용하는 성능지표가 F1 Score입니다. F1 score는 조화 평균의 일종으로 Precision과 Reacall 값을 이용하여 산출됩니다. 공식은 F1 Score = 2 * (Precision * Recall) / (Precision + Recall)입니다. 이를 바탕으로 각 모델의 F1 Score 값을 만들어 보겠습니다.
내가 만든 모델의 F1 score = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (0.5 * 1) / (0.5+1) = 0.66 (= 66%)
(잠시 아래를 보지 말고 '다른 사람이 만든 모델'의 F1 score를 직접 계산해 보세요.)
다른 사람이 만든 모델의 F1 score = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (1 * 0.9) / (1+0.9) = 0.94 (= 94%)
F1 score 관점에서 보면 다른 사람이 만든 모델이 더 좋은 성능으로 나타납니다.

성능 지표 선택

위의 지표들을 보면 어떤 것은 '내가 만든 모델'의 성능이 더 좋고 어떤 것은 '다른 사람이 만든 모델'의 성능이 더 좋게 나옵니다. 이런 경우 어떤 모델을 사용해야 할까요? 중간에 F1 Score 설명할 때 말씀드린 것처럼 모델을 사용하는 목적에 맞는 성능 지표를 사용하는 것이 좋습니다. 직설적으로 말씀드리면 무조건 고양이가 있는 사진을 최대한 많이 찾고 싶으면 Recall을, 고양이가 있는 사진만 잘 골라내고 싶은 경우(즉, 고양이가 없는 사진을 있는 것으로 잘못 찾아내는 것을 최소화하는 경우) Precision을, 두 경우 모두 중요할 경우 F1 score를 사용하는 것이 좋겠습니다.
모두 이해하셨나요? 그럼 질문드려보겠습니다. 아래의 질문을 읽고 어떤 성능지표가 적합한지 맞추어 보세요.

1. 제품 생산 라인에서 품질 이상을 발견하는 정상/불량 판정 모델을 만들었다고 가정하겠습니다. 고객의 품질 요구 수준이 많이 높습니다. 그래서 모델이 불량품을 판별하면 생산 라인이 멈추고 해당 불량품과 관련된 라인에서 1시간 전 이후로 생산된 제품에 대해서 전체 수작업 검사를 진행합니다. 이후 불량품을 제거하고 공정을 재시작합니다. 이러한 경우 어떤 성능 지표로 평가하는 것이 좋을 까요? 그 이유는 무엇인가요?
2. 보험 사기를 적발하는 사기 탐지 모델(Frud Detection Model)을 만들었다고 가정하시죠. 이미 고객센터에서 사기로 의심되는 경우 고객에게 전화하거나 데이터 검토를 통해 사기 여부를 검토하는 업무를 하고 있습니다. 그리고 평균 사기 금액이 크기 때문에 회사는 사기로 인한 잘못된 보험금 지출을 최대한 막기 위해 핵심 사업/과제로 추진하는 상황입니다. 이러한 경우 만들어진 모델을 어떤 성능 지표로 평가하는 것이 좋을 까요? 그 이유는 무엇인가요?
3. X-ray, CT 등 이미지 데이터를 분석해서 암 발생(보유) 유무를 판단하는 모델을 만들었다고 가정하시죠. 이 모델을 평가하는데 적합한 성능 지표는 무엇일까요? 선택하신 성능지표가 적합한 이유가 무엇인가요?
힌트: 활용과 해석이 중요합니다.
각 질문에 대한 답과 이유를 이메일이나 댓글로 남겨주시면 제가 생각한 답을 알려드리겠습니다.
theyellowlionking@gmail.com

마지막으로 AUC/Roc Curve에 대해서 알아보겠습니다.

위키 이미지

위의 그림에서 처럼 True Positive rate 와 False Positive rate를 가지고 그려진 그래프를 Roc Curve(Receiver operating characteristic curve)라고 합니다.
Roc Curve 를 그리게 되면 오른쪽아래 지역과 왼쪽 위 지역으로 나누어지는대 이때 오른쪽 아래 지역을 AUC(Area under the curve)라고 합니다. 이 지역이 넓으면 넓을 수록 모델의 성능이 좋은 것을 알 수 있습니다.

https://en.wikipedia.org/wiki/Receiver_operating_characteristic#/media/File:Roc_curve.svg



감사합니다.

1. 높은 품질 수준을 원하기 때문에 모두 찾아내야 하는 Recall이 중요하고요, 잘못 찾아낸 경우 막대한 손해가 있으니 Precision 도 중요합니다. 따라서 F1 Score를 쓰는 게 좋겠네요.
2. 이미 고객센터에서 고객에게 전화를 걸어 확인하는 단계가 있으므로 모델에서 잘못 찾아내도(정상 고객을 사기라고 찾아내도) 고객센터에서 거를 수 있어서 현재는 Precision 이 낮아도 문제가 되지는 않을 것 같습니다. 그리고 사기 보험금 지출을 최대한 막는 것이 핵심 사업이라고 했으니 모든 사기를 탐지해내는 것이 중요합니다. 따라서 Recall을 사용하는 것이 좋겠네요.
3. 이유만 잘 맞으면 모두 정답입니다.

반응형
반응형

본 내용은 아래의 링크 내용을 번역한 내용 임을 밝힘니다.
The Best Open Source Chatbot Platforms in 2021

최고의 오픈소스 챗봇을 찾고 계신가요? 이글에서 그들이 정한 기능을 가지고 Top8개의 챗봇을 찾을 수 있습니다. 들어가 보시지요.

오픈소스는 인터넷 없이는 불가능한 초월적인 단계들 중에 하나이다. 이것은 "Nyan Cat은 문화적 혁명이다" 라는 문구와 비슷하다.
(Nyan Cat : 미국에서 만들어진 캐릭터 관련 밈. 몸통이 팝 타르트로 되어있는 회색 고양이가 우주에서 무지개를 그리며 날아다니는 GIF 이미지다.) 엄청인기 있었던 것 같음)
오픈소스 소프트웨어는 오랫동안 우리에게 정말 보석과 같은 것을 주어왔습니다.
모질라의 파이어폭스, 리눅스의 워드프레스, VLC, Apache, LaTex 그리고 우분투(Ubuntu), 이런 것들은 그저 눈에 띄는 몇개 중에 하나입니다.

처음에 언급한 것처럼 챗봇은 최근에 가장 우세한 기술 혁명중 하나입니다.
그리고 당연히 챗봇은 오픈소스 프레임웍의 영향을 받아왔습니다.
솔루션 제공자는 마이크로소프트와 같은 거대 기업으로부터 깃허브의 영웅인 개인 개발자까지 다양합니다.

그래서 이번 글에서는
A. 오픈소스 챗봇은 무엇인가
B. 2021년에 최고의 오픈소스 챗봇에는 어떤것이 있는가
C. 시장에서 오픈소스가 아닌 것들과의 차이를 만드는 것은 무엇인가
에 대해서 이야기 하겠습니다.

오픈소스 챗봇은 무엇인가

챗봇은 "특히 인터넷을 통해, 사람과 대화하는 것을 흉내내기 위해 설계된 프로그램"이 라고 정의 됩니다.
아마 당신은 살면서 당연하게도 이러한 많은 컴퓨터 프로그램들과 상호작용하고 보아왔을 것 입니다.
아마 당신은 챗봇을 이용해서 피자를 주문해봤을 수도 있고, 아니면 화장품을 사는 것에 도움을 받기위해 챗봇을 사용했을 수도 있습니다.
어쩌면 심지어 당신은 이러한 챗보중에 하나와 심리치료 시간을 가져왔을 수도 있습니다.(Stanford Woebot)
상상할 수 있는 거의 모든 사용 방법에 해당하는 챗봇이 있고, 대부분은 아래와 같이 둘중 하나의 방법으로 만들어졌습니다.
1. 최고 수준의 플랫폼을 사용하거나
2. 챗봇을 사용할 회사에 의해 독립적으로 만들어 졌습니다.
그래서 인도에서 가장큰 커머스 중에 하나인 Nykaa는 더 좋고, 보다 효율적인 방법으로 그들의 고객에게 서비스 하기 위해 고객 지원 챗봇을 사용합니다.
그럼에도 불구하고 세번째 방법이 있는데 이것이 바로 오픈소스 챗봇을 사용하는 것입니다.
오픈소스 챗봇은 현대의 웹 어플리케이션과 매우 유사합니다.
오픈소스 챗봇은 인터넷에서 이용되고, 데이터베이스와 메시지를 보내고 받기위한 API를 이용하고, 파일을 읽고 쓰고, 보통의 일들을 처리합니다.
오픈소스 봇들은 대게 아래와 같은 몇 개의 핵심 요소들로 구성됩니다.

  • 웹 서버, 대부분은 인터넷에서 사용가능한 웹서버
  • 봇을 개발하기위해 인터페이스를 제공하는 툴과 봇 빌더 SDK
  • 지능적인 알고리즘 서비스
  • 저장 서비스

 

2021년에 최고의 오픈소스 챗봇에는 어떤 것이 있는가

1. 마이크로소프트 봇 프레임웍(Microsoft Bot Framework).

아마도 비즈니스에서 가장 많이 사용되는 툴중에 하나인 마이크로소프트의 봇 프레임웍(MBF)은 당신이 필요한 모든 것을 가지고 있습니다.
사실, 마인드브라우저의 연구에 따르면 비즈니스의 41%이상이 MBF를 산업의 대안으로 선호합니다.
SMS, Skype, Slack, Email, Office 365, Twittter, Telegram 등은 MBF가 제공하는 여러 플랫폼중에 그저 일부입니다.
이 프레임웍은 두가지로 구성되는데, 즉, 봇 빌더 SDK루이스(LUIS)라고 불리우는 그들의 NLU시스템으로 구성됩니다.
볼빌더SDK는 .NET과 Node.js를 지원 합니다. 그리고 자동번역기능을 가지고 있는 루이스는 30개 이상의 언어를 지원합니다.
마이크로소프트의 넓은 리소스 지원 때문에 당신은 거의 모든 대화 유형을 자동화 할 수 있습니다.
당신은 루이스를 이용해서 자연어 이해를 이용할 수 있고, 보이스 봇인 코타나(Cortana), 그리고 검색 API인 Bing을 이용할 수 있습니다.
MBF는 이러한 이유로 인기 많은 툴입니다. 개발자들이 더 빠르고, 더 좋은 봇을 만들수있게 도와주는 탬플릿과 예시를 가지고 있습니다.
이것은 또한 비즈니스가 옵니 채널적인 접근을 취하려할 때 이상적 입니다.

2. Rasa Stack

라사 스텍은 엄청난 성장을 보여준 플랫폼 입니다. 단 2년만에 라사가 30만회 이상 다운로드 됬습니다. 이것은 거의 매1분마다 다운로드 된 것 입니다.
라사 스택은 오픈소스 기계학습 툴의 모음입니다. 개발자들은 이러한 툴들을 이용햐서 챗봇과 어시스턴트를 만들 수 잇습니다.
라사 스택은 두가지의 콤포넌트를 가지고 있는데 이들 각각은 독립적입니다. 바로 'Core'와 'NLU' 입니다.
NLU는 사전에 정의된 의도에 기반하여 사용자의 메시지를 이해 합니다. 기계학습으로 만들어진 Core는 (이번 메시지 이후) 그 다음에 무엇이 일어날지를 결정합니다.
라사는 독립적인 서비스 입니다. 즉, 데이터를 주입하거나 받기 위한 제 3의 API를 사용할 필요가 없습니다. 그냥 온프레미스 서버나 프라이빗 클라우드에 배포할 수 있습니다.
이것은 확장할 수 있는 자연어 대화와 유연하게 제공할 수 있게 제품화가 준비된 유일한 플랫폼 입니다.

3. Botpress

봇프레스는 스스로를 오픈소스 봇빌딩 플랫폼에 있어는 '챗봇의 워드프레스'라면서 판매 합니다. 이것은 모듈화된 청사진을 가지고 개발 합니다. 당신은 조각들을 떼어내가나 코드 프레임에 있는 새로운 조각을 붙일 수 있습니다.
봇프레스는 3단계 설치 절차를 운영합니다. 개발자가 봇 빌딩을 시작하고, 선호하는 플랫폼에 그 봇을 배포하고 그리고 접근을 넘겨주고나면 이것은 관리 될 수 있습니다.
개발자 친화적인 환경을 사용하는 볼 프레스는 직관적인 대시보드를 가지고 있고, 유연한 기술에 의해 구동됩니다. 그리고 이것은 몇 개의 미리 설치된 컴포넌트들이 제공됩니다.

  • NLU 엔진
  • 관리자 대시보드
  • 시각적 흐름 작성도구
  • 대화 에뮬레이터 / 디버거
  • 여러 메세징 채널 지원

라사와 마찬가지로 봇프레스는 온프레미스에서 운영되기 때문에 들어오고 나가는 데이터에 대한 모든 제어를 할 수 있습니다.

4. Ana.Chat

Ana 는 세상에서 최초의 오픈 소스 챗봇인 것에 대해 스스로 자부심을 느낍니다.
Ana는 개인적이거나 상업적인 용도로도 무료이기 때문에 당신의 챗봇 개발 기간을 줄일 수 있습니다.
Ana는 Ana Studio, Server, Simulator, 그리고 SDK와 같은 내장된 서비스들이 묶음으로 제공됩니다.
이 Studio를 이용해서 텍스트를 만들고 수정하고, 시각적인 입력 항목과 버튼을 만들 수 있습니다.
시뮬레이터를 이용하면 화폐 표시와 같은 기능을 가지고 봇 사용 경험을 제어할 수 있습니다.
서버로는 확장에 대한 걱정없이 당신의 챗봇을 플랫폼에 배포할 수 있도록 합니다.
그리고 SDK로는 몇분 안에 당신의 엡을 Ana와 통합 할 수 있게 합니다.

5. OpenDialog

OpenDialog는 오픈소스 챗봇 프레임웤 중에서 가장 인기있는 것중에 하나입니다. 설비가 완비된 툴킷은 큰 노력없이 설계, 개발 그리고 배포를 할 수 있게 합니다.
GreenShoop Labs는 2018년에 개발을 쉽게 만드는 사용자 중심의 화면을 새롭게 만들면서 이 프레임웤을 만들었습니다. 이것은 훌륭한 대화 엔진과 처음 사용하는 사용자를 주눅들게 만들지 않는 대화 형태에서의 유연성을 하나로 합쳤습니다.
OpenDialog 실시간 음성-문자 변환 처리를 실행 할 수 있는 능력을 자랑합니다. 이것은 N-best/word graph 결과물을 제공하는 것 뿐만 아니라 하나의 서버 유닛으로 작동할 수 있습니다.
이 프레임웍의 USP는 당신이 어떠한 코딩 경험도 필요 없이 완전히 발달된 대화 에이전트를 만들 수 있게 합니다.

6. Tock

NLP를 근본적으로 지원하는 오픈소스 챗봇 개발 프레임웤을 원한다면 Tock은 또 다른 최고의 선택입니다. 이것은 3rd party APIs가 필요없고 독립적으로 동작할 수 있습니다. 그럼에도 불구하고, 사용자가 어떤 컴포넌트를 대화 에이전트에 집어 넣어야 하는지 고르는 것이 얼마나 쉬운지를 고려해보면 통합은 문제될 것이 없습니다.

7. DeepPavlov

DeepPavlov는 TensorFlow, Keras, 그리고 PyTorch 를 기반으로하는 인기있는 오픈소스 챗봇 개발 프레임웍이다 이러한 기반 프레임웍은 개발자들이 다기능 어시스턴트와 같이 파워플한 대화 에이전트를 개발하기 위해 필요한 유연한 도구를 제공합니다.
이 프레임웤은 NER, Q&A 그리고 다른 복잡한 NLP처리를 위해 사용되는 BERT 와 같은 최신의 딥러닝 모델과 호환됩니다.
DeepPavlov의 중요한 기능중 하나는 얼마나 쉽게 이것이 배포될 수 있는가 입니다.(쉽게 배포됩니다) 이러한 기능들은 Nvidia NGC와 Docker Hub에 있는 컨테이너에서 호스팅됩니다.

8. Wit.ai

개발자들은 개인용이거나 상업용 대화 에이전트를 만드는데 이 오픈소스 챗봇 개발 프레임웤을 사용할 수 있습니다.
이것은 페이스북이 2015년에 인수했습니다. Wit.ai 는 (특히 페이스북 메신저와 같은) 메세징 서비스와 쉽게 연동할 수 있는 오픈소스 챗봇을 만들기위해서 필요한 사용자 친화적인 SDK를 제공합니다.
Wit.ai의 NLP 엔진은 IBM, Microsoft, Amazon과 같은 경쟁사의 엔진을 능가합니다.

Wit.ai은 오늘날 가장 포괄적인 오픈 소스 챗봇 개발 프레임워크 중 하나임에 틀림없습니다. 이것의 SDK는 파이썬, NodeJS, 그리고 iOS와 같은 언어로 제공되기 때문에 넓은 범위의 개발자들에게 이상적입니다. Wit.ai는 웹사이트, 앱, 페이스북 메신저, 슬랙, 웨어러블 기술 및 자동화에 쉽게 연동 됩니다.
 

 

What are the key features of open-source chatbots?

오픈소스 챗봇의 주요 기능은 무엇인가?
오픈소스 챗봇 개발 프레임웤은 약간의 코딩 방법을 알고있는 누구나가 그들의 웹페이지를 위해서 그들이 직접 NLP기능이 있는 챗봇을 만들수 있게 합니다. 오픈소스 챗봇이 제공하는 주요 특징을 알아보겠습니다.. 이를 통해서 오픈소스챗봇을 즉시 적용할 수 있는지 아니지를 당신이 선택할 수 있습니다.

1. Customisability
오픈소스 챗봇은 당신의 대화 에이전트에 들어갈 각각의 컴포넌트들을 원하는대로 수정할 수 있게 합니다. 당신은 사용하기를 원하는 메시지 템플릿으로부터 NLP 엔진까지 그리고 당신의 챗봇과 연동하기위한 API까지 모든 것을 선택할 수 있습니다. 유연성은 그들의 사업을 위해서 오픈소스 챗봇 구축을 고려하는 주된 이유중 하나입니다.
2. 24/7 availability
당신은 동시에 다양한 메세징 플랫폼에서 24시간 가능한 당신의 챗봇을 만들 수 있습니다. 연중무휴의 사용성과 무정지 서비스는 당신의 고객지원 운영에 대한 지원을 도울 수 있고 당신의 지원 인력이 더 효율적으로 일하도록 도울 수 있습니다. 챗봇 그 자체로도 대부분의 질의에 응답할 수 잇습니다. 이러한 챗봇은 사용자와 최접점에 있습니다. 즉, 봇에 의해서 해결되지 못한 모든 요청은 처리할 수 있는 사람에게 전달 됩니다.
3. Choice of Natural Language Processing engine
당신의 웹페이지를 위해서 맞춤 챗봇을 개발할때, 알맞은 NLP엔진을 선택하는 것은 필수적입니다. 오픈소스챗봇으로는 당신의 선택에 따라 NLP엔진을 선택하는것이 자유롭고, 어떤 엔진이 그들에게 최고의 성과를 내는지 보고 싶은 이들에게 매우 적합합니다.

4. Data privacy

비즈니스가 당신의 웹사이트에서 데이터 기반 기술을 사용함에 따라서, 사용자 데이터를 보호하는 보안 서비스를 사용하는 것과 사용자 데이터를 위험에 빠트리는 빈틈을 없게 하는것에 관심이 있습니다. 오픈소스챗봇을 가지고 당신은 데이터가 어떻게 처리되고 사용되는지에 대한 완벽한 통제를 갖습니다. 이것은 당신이 사용자 데이터를 안전하게 보호하고 있다는 편안한 마음을 가지게 만들면서도 동시에 챗봇이 고객을 돕게 만듭니다.

What makes them different from non-open-source options on the market?

모든 오픈소스 기술의 가장큰 단점중 하나는 학습곡선이 가파르다는 것 입니다.(배우기 어렵다)
일반 사용자들에게 있어서 우분투는 윈도우처럼 사용자 친화적이거나, 직관적이거나 쉽지 않습니다.
오픈소스 커뮤니티에 개발자가 많고 디자인에 집중이 없다는 것은 놀라운 일이 아니다. 이것은 비 개발자 사용자들은 오픈소스 기술에 대해 자주 힘들어 한다는 의미입니다. 오픈소스 기술은 또한 아주 많은 지원을 제공하지 않습니다. 그래서 만약 당신이 문제를 가지고 있다면 단지 약간의 문서들을 가지고 당신이 직접 수정해야만 한다는 것이 기회입니다.
오픈소스 소프트웨어는 또한 거의 무료입니다. 독립 서비스를 위해서 당신은 지불할 필요가 없지만, 당신이 내야하는 다양한 비용들이 있습니다.
당신이 서버, 훈련, 하드웨어, 그리고 개발 비용을 고려하지 않았다면 이 비용들이 합쳐져야 합니다.
그럼에도 불구하고, 이러한 것들이 당신을 단념시키게 하지 마세요.
설립된 회사로부터 많은 합법적인 솔루션들도 같은 문제들에 대해서 다양한 심도에서 어려움을 격고 있습니다.
당신이 챗봇을 만드는데 도움을 주는 쉽고, 싸고, 더 도움이 되는 툴을 좋아한다면 다양한 옵션들이 있습니다.
회사들은 자주 당신이 무료로 챗봇을 만들 수 있도록 허락해 줍니다. 아래와 같은 방법과 같이 챗봇 만드는 것을 시작할 수 있습니다.
여기


(이상한 내용의 번역이 있으면 알려주시고, 질문을 남겨주세요..)

감사합니다.

반응형

+ Recent posts