[WWDC] CreateML에 대해서 알아보기
iOS이나 mac OS 관련 개발을 할 때 인공지능이나 머신러닝 기능을 탑재하고 싶은데 어떻게 해야 할까?
파이썬 코드를 하나하나 다 개발해서 프로젝트에 적용하지 않아도 CreateML이라는 프레임워크를 통해 모델을 훈련하고 프로젝트에 직접 적용할 수 있다
따라서 오늘은 apple의 firstparty인 CreateML에 대해서 알아보고
WWDC 2024에서 발표한 CreateML에 새로 추가된 내용까지 알아보도록 하자.
📚 CreateML
createML이란 apple에서 제공하는 firstparty인 머신러닝 모델 생성 도구로 별도의 코딩 없이 쉽게 모델을 훈련하고 평가할 수 있는 도구이다. 기본적으로 Mac OS에서 사용할 수 있지만 Core ML 모델을 통해서 iOS, watchOS, MacOS, VisionOS에서 사용할 수 있도록 한다.
CreateML의 기능은 주로 아래와 같다고 설명되어 있다.
- 다중 모델 학습
- 학습 제어
- 데이터 미리 보기
- 온디바이스 학습
- 모델 미리 보기
- 시각적 평가
이중에서도 관심 있게 본 것은 온디바이스(On-Device) 학습이다. apple의 모든 머신러닝 모델은 On-Device 방식을 따른다고 한다.
보통 우리가 알고 있는 머신러닝 훈련은 대용량의 데이터를 처리하기 위해서 AWS나 GCP, Azure 같은 클라우드 플랫폼에서 학습되는데, apple은 iphone, ipad, mac과 같은 디바이스 자체에서 직접 머신러닝 모델을 학습한다.
On-Device
On-Device 란 기기 자체에서 데이터를 처리하는 것을 의미한다.
클라우드 서버 없이 디바이스에서 직접 모델을 학습하기 때문에 개인정보 유출 위험이 없어서 데이터에 대한 개인 정보가 강화된다. (이런 거 보면 애플은 참 개인정보 관련해서 보안이 철저한 거 같다.)
예를 들어, 건강 관련 앱이나 프라이버시가 담긴 앱과 같은 경우 유출 위험이 없기 때문에 안전하게 사용할 수 있게 된다!
또한 iOS 앱을 다운로드하였을 때 사용자 행동 데이터 수집 팝업이 뜨는 걸 경험해 봤을 것이다. 이 팝업은 앱이 사용자의 행동 데이터를 클라우드 서버로 전송하여 분석한다는 의미인데, 애초에 기기 자체에서 패턴을 분석한다면 해당 팝업이 필요하지 않게 되어 개인정보 보호 정책을 준수하면서 개인화된 AI 기능을 제공할 수 있게 된다.
(개인정보 수집 관련해서는 앱 심사할 때 은근 까다롭기 때문에 온디바이스를 사용하게 된다면 스무스.. 해질 것)
apple에서 제공하는 기능 중에서는 Face ID나 Siri가 제일 대표적인 예시이다.
iOS 15 버전 이후에서부터는 서버가 아닌 사용자의 iphone에서 직접 학습하는 과정을 통해 네트워크 연결 없이도 일부 기능을 수행할 수 있게 되었다!
하지만 on-Device가 언제나 장점만 있는 것은 아니다.
클라우드 서버에서 제공해 주는 GPU나 TPU보다 기기 자체에서 실행하는 것은 성능이 부족해 복잡하거나 대규모 적인 모델 학습은 제한된다.
뿐만 아니라, 앱에서 제일 중요한 것은 배터리 소모가 크게 발생하지 않아야 하는 것인데 학습이 많거나 규모가 커질수록 배터리 소모가 크다는 것이다. 배터리 소모가 큰 앱은 아무도 사용하려 하지 않을 것이다..
따라서 대부분의 머신러닝 모델 학습은 클라우드에서 진행되며 적절한 상황에 따라서 온디바이스 학습을 사용하는 것이 중요하다.
apple에서는 CreateML 애플리케이션 아래에 주요 3가지 머신러닝 영역을 소개하고 있다.
- 이미지 분류 및 객체를 감지하는 vision 관련 모델 생성
- 텍스트 분류, 감정 분석 등 자연어 처리 모델
- 소리 분류, 음성 인식과 같은 오디오 분석 모델
예를 들어 카메라로 촬영한 이미지를 훈련시켜서 사물을 인식할 수 있도록 할 수도 있으며, visionkit와 같이 사용하여 영수증이나 명함을 인식하여 특정 키워드를 추출한다거나 할 수 있을 것이다.
특히 이번 WWDC 2024에서 CreateML에서 새로 추가된 기능은 아래와 같다.
Data source preview
Data Source PreView는 모델 훈련에 사용할 데이터를 시각적으로 검토하고 분석할 수 있도록 한다.
특히 데이터 셋의 구조와 내용을 학습 전에 검증할 수 있기 때문에 데이터 품질 문제를 초기에 발견할 수 있으므로 성능 저하를 방지하며, 이미지 분류 혹은 객체 감지하는 vision 관련 앱이라면 다양한 유형의 데이터를 미리 확인할 수 있기 때문에 데이터 준비 단계에서 발생하는 시간을 크게 절약할 수 있다.
위의 사진처럼 각 이미지가 coffee라는 레이블로 포함되어 있어도 컵의 각도와, 라떼아트 유무, 커피 종류등을 미리 보여줌으로써 모델 학습 목적에 따라 preview에서 해당 이미지만 식별한 후 새 데이터 셋을 구성할 수도 있다.
예를 들어 모든 커피 중에 라떼아트가 들어있는 커피만 선별해서 학습하려는 경우 Data source preview를 통해 모델 학습 전에 한번 더 데이터 셋을 재구성함으로써 데이터 품질을 확보하며 불필요한 비용 시간을 줄일 수 있다는 것이 장점이 될 것이다!
Object Tracking
visionOS에서 주로 사용될 Object Tracking은 객체의 움직임을 추적하도록 하여 시간에 따른 객체의 위치, 속도, 방향 변화를 감지한다.
vision Pro를 통한 개발을 하지 않는다면 굳이 몰라도 될 거 같은 기능이긴 하지만 AR이나, 자율주행 관련 앱이나, 모션감지 기능이 필요한 앱이라면 제스처 인식 같은 기능을 활용해 볼 수도 있을 거 같다.
Time series forecasting
세 번째로 추가된 기능은 시계열 예측 및 분류 기능(Time series forecasting)이다.
이 기능은 시간에 따라 수집된 데이터를 분석하여 미래의 값을 예측할 수 있도록 한다. 계절성이나 트렌드, 주기성 등 시계열 데이터의 패턴을 학습하여 분석하는 기능을 통해 예측하기 어려운 것들을 정량화할 수 있도록 한다.
Time series forecasting에는 DateFeatureExtractor를 도입하여 날짜/시간 데이터를 머신러닝 모델이 이해할 수 있는 수치형 특성으로 변환하며, 시간적/계절성 패턴을 추출하고 분석한다.
WWDC에서 예로 든 예시를 살펴보면 푸드 트럭 주인들이 주문을 받은 판매 실적을 요약하여 미래 판매 실적도 예측해 주도록 한다고 한다. 하지만 종류별로 어떤 푸드트럭은 주말에 판매실적이 높고, 어떤 푸드트럭은 평일에 판매실적이 높기 때문에 이를 시계열 예측 및 분류 기능을 통하여 학습시켜 요일, 월, 공휴일 판매에 미치는 영향을 자동으로 모델링할 수 있고 시간대, 요일, 계절에 따른 패턴을 분석하여 미래 판매 실적도 예측한다고 한다.
⚒️ 모델 학습 시켜보기
나는 텍스트 기반 분류 학습을 해보려고 한다!
예를 들어 영화 관람평을 남겼을 때 해당 평가가 긍정적인 평가인지, 부정적인 평가인지를 구별하는 예제를 통해 CreateML을 사용해보려고 한다.
1. 학습시킬 템플릿 정하기
CreateML은 앞에서 얘기했듯이 이미지 학습, 자연어 학습, 객체 추적 등 여러 가지 기능을 제공한다.
따라서 이미지면 이미지 학습, 텍스트면 텍스트 학습을 해야 하기 때문에 어떤 종류의 학습을 시킬 건지를 파악한 후 진행해야 된다.
경로 : xcode -> open Developer Tool -> CreateML - New Document
나는 텍스트 기반 분류 학습을 할 것이기 때문에 Text Classification를 선택하였다.
2. Model Metadata
1번에 학습할 템플릿을 고르고 나면 전체 창이 뜬다.
여기서 Model Metadata의 Description을 작성하면 나중에 여러 모델을 관리할 때 각 모델의 목적과 특성을 쉽게 구분할 수 있다.
Description에는 모델의 목적, 학습 데이터의 특성 등을 작성하면 된다.
그래서 나는 영화 관람에 대한 긍정적/부정적 평가를 기준으로 Description을 작성하였다.
3. Data를 준비하여 학습하기
이제 학습시킬 데이터를 넣어줘야 한다.
먼저 Train Data와 Test Data를 준비해야 한다. 두 데이터 파일 모두 Json형태 혹은 csv 형태여야 학습을 진행할 수 있다.
또한 과적합을 방지하고 실제 성능 평가를 잘 예측하기 위해서는, 두 데이터는 완전히 다른 데이터로 준비해야 한다.
> Training Data와 Testing Data
Training Data
[
{ "text": "스토리텔링 방식이 독특해서 끝까지 집중해서 봤다.", "label": "positive" },
{ "text": "감독의 전작들보다 퀄리티가 많이 떨어진다.", "label": "negative" },
{ "text": "상영 시간 내내 지루함 없이 흥미진진했다.", "label": "positive" },
{ "text": "캐릭터들의 동기 부여가 설득력이 없었다.", "label": "negative" },
{ "text": "영화의 메시지가 현대 사회를 잘 반영하고 있다.", "label": "positive" },
{ "text": "특수효과에만 의존한 허술한 스토리라인.", "label": "negative" },
{ "text": "중반부터 전개가 흥미로워지기 시작했다.", "label": "neutral" },
{ "text": "촬영 기법이 혁신적이고 시각적으로 아름다웠다.", "label": "positive" },
{ "text": "등장인물들의 성격이 일관성 없이 변했다.", "label": "negative" },
{ "text": "영화음악이 장면마다 완벽하게 어울렸다.", "label": "positive" }
]
Testing Data
[
{ "text": "원작을 너무 많이 각색해서 원작의 매력이 사라졌다.", "label": "negative" },
{ "text": "배우들의 감정 표현이 매우 섬세하고 자연스러웠다.", "label": "positive" },
{ "text": "제작비에 비해 영상 퀄리티가 실망스러웠다.", "label": "negative" },
{ "text": "아이들과 함께 보기에 교육적 가치가 있는 영화다.", "label": "positive" },
{ "text": "너무 많은 이야기를 담으려다 산만해졌다.", "label": "negative" },
{ "text": "이 감독의 작품 중에서는 평균적인 수준이다.", "label": "neutral" },
{ "text": "소소한 유머와 감동이 적절히 섞여 있었다.", "label": "positive" },
{ "text": "주연 배우가 캐릭터와 전혀 맞지 않았다.", "label": "negative" },
{ "text": "영화가 던지는 질문들이 오래도록 생각하게 만든다.", "label": "positive" },
{ "text": "시대 배경과 의상이 사실감 없이 어색했다.", "label": "negative" },
{ "text": "예술성과 대중성을 모두 갖춘 수작이다.", "label": "positive" }
]
이런 식으로 두 데이터의 내용이 다르게 구성해야 한다.
영화 관람평에 대한 긍정적 평가(Positive), 부정적 평가(negative), 중립적 평가(neutral) 3가지의 반응으로 분류를 하려고 하였기 때문에 3개의 classes로 분류되었음을 알 수 있다!
데이터 준비가 다 되었다면 Training Data, Testing Data 별로 넣어준 후 Train을 눌러주면 학습이 시작된다.
4. 학습한 모델 평가하기
모델 학습이 다 완료되었다면 학습한 모델에 대한 평가를 할 수 있다.
Testing Data에서 30개의 항목에 대한 긍정적 평가, 부정적 평가, 중립적인 평가로 나누어 평가된 것을 확인할 수 있다.
긍정적인 평가는 정밀도는 82%로 높지만 재현율이 64%로 낮아 긍정적인 표현을 놓치는 경우가 있고, 부정적인 평가는 재현율이 92%로 매우 높은 걸로 보아 부정적인 표현은 잘 찾아내지만 정밀도가 65%로 낮아 다른 표현을 부정적으로 잘못 분류하는 경향이 있다.
중립적인 평가는 데이터가 적기 때문에 정밀도와 재현율 모두 낮아 학습이 잘 되지 않고 있는 것을 확인할 수 있었다. 특히 neutral의 F1 score가 낮은 것을 보면 중립적인 평가에 대한 인식이 잘 되지 않고 있다.
5. preview 기능을 통해 학습된 모델 평가해 보기
preview 기능을 통해 학습된 데이터를 바로 사용하지 않고 잘 학습되었는지, 아닌지를 파악하여 데이터를 더 적용시켜 훈련할 건지 정도의 유무를 파악할 수 있다.
4번 모델의 성능 평가를 확인해 봤을 때 긍정적인 평가와 부정적인 평가에 대해서는 학습이 잘 된 줄 알았더니, 학습 데이터가 너무 부족해서 그런지 "너무 감동적인 내용이 많아서 훌륭한 작품이었다"에 대한 평가가 negative가 나왔다.
뭔가.. 단단히 학습이 잘못된 거 같다. 아마 25개의 데이터만 가지고 훈련했기 대문에 데이터 부족으로 인한 것 같다.
특히 긍정적인 평가에서 모델 평가를 봤을 때 형용사와 수식어의 표현을 놓치는 부분이 많다고 판단하였다.
그래서 더 많은 데이터를 추가하고 긍정/부정에 따른 형용사와 수식어 위주로 된 데이터를 다시 학습시켜 보았다.
아까보다 훨씬 많은 데이터를 통해 다시 훈련을 진행하였다.
이제 새로 훈련된 모델을 바탕으로 아까와 같은 문장을 적어보았을 때 긍정적인 평가가 82%나 되는 것을 확인할 수 있었다!
이렇게 CreateML에 대해서 알아봤다! 평소에 AI를 프로젝트에 적용시키는데 관심이 있긴 했지만 apple에서 이런 프레임워크가 있는지 몰랐다.. WWDC를 통해 어느 정도 알아보긴 했지만 이걸 어떻게 프로젝트에 적용시켜 볼 지에 대해서 더 공부해 봐야겠다!
그리고 이런 모델 학습은 잘 구성된 많은 데이터로 학습시키는 게 중요하지만 데이터를 얻는 게 참 쉽지 않다는 걸 한번 더 느꼈다 ㅎㅎㅎ..
틀린내용이나 개선할 점이 있다면 댓글 부탁드립니다!!
참고
https://velog.io/@oasis444/Create-ML
https://developer.apple.com/documentation/createml/creating-a-text-classifier-model