Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[PyCon Korea 2024 Session] 우리 모두는 스팸에서 자유로울 권리가...

Beomi
October 26, 2024

[PyCon Korea 2024 Session] 우리 모두는 스팸에서 자유로울 권리가 있다 - Smart Spam Filter 개발기

In my PyCon Korea 2024 session, I introduce a "Smart Spam Filter" app that achieved a top ranking in the iOS utility section and has a high user rating. This app combines on-device models with LLMs to effectively block spam messages. I discuss the spam problem and how AI can help by automating what humans cannot handle alone. This session covers the process of developing a spam filter using LLMs, dealing with cost and performance issues, and employing fine-tuning and annotation methods. I also explain using open-source models like KcBERT and Llama-Ko, deploying models on-device to reduce server costs, and tips for maintaining an AI service as an independent developer.

이번 PyCon Korea 2024 세션에서는 iOS 유틸리티 섹션에서 상위권에 오른 고평점 스팸 차단 앱 '스마트 스팸 필터'를 소개합니다. 이 앱은 온디바이스 모델과 LLM을 결합하여 스팸 메시지를 효과적으로 차단합니다. 스팸 문제를 해결하는 과정에서, AI가 사람의 한계를 넘어 자동화를 어떻게 돕는지에 대해 이야기합니다. LLM을 활용한 스팸 필터 개발, 비용 및 성능 문제 해결, 파인튜닝과 라벨링 방법을 다루고, KcBERT와 Llama-Ko 같은 오픈소스 모델을 비롯해, 서버 비용을 줄이는 온디바이스 배포와 1인 개발자로서 AI 서비스를 운영하는 팁을 공유합니다.

Beomi

October 26, 2024
Tweet

More Decks by Beomi

Other Decks in Programming

Transcript

  1. 안녕하세요👋, 이준범/Beomi 입니다. - iOS 유틸리티 섹션 #2까지 올라간 스팸

    문자 차단 앱! - 전체 평점 4.6의 고평점을 받은 앱! - 온디바이스 모델과 오픈언어모델, 그리고 LLM을 합쳐 만든 서비스! - 다운로드는 여기서 → 스마트 스팸 필터를 소개할게요! 앱스토어 #2 ✌
  2. 하나 하나 차단하기 너무 피곤해..! "하나는 사람이 할 수 있고,

    10개도 사람이 할 수 있지. 하지만 1000개, 1만개는 할 수 없어. 그건 기계가 해야하는 영역이야." 사람같은 머신러닝 어떻게?
  3. 오늘 나눌 이야기 / 목차 "AI"를 사용해 현실의 문제를 풀어봅시다.

    # 0. 어떤 문제가 있는지 찾기 (= 스팸이 너무 많아요.) # 1. LLM으로 서비스를 만들기 # 2. LLM으로 서비스를 만들면 만나는 문제 # 3. 직접 학습시킨 모델로 문제를 풀어보기 # 4. 개인 개발자가 'AI' 서비스를 운영하기 위해 필요한 것들 # 5. 지속 가능한 AI 서비스를 위해 필요한 것들
  4. LLM은 비싼 해결책이다 System prompt 합쳐서 대략 103 tokens →

    $0.005 / 1K tokens → $0.0005 / 1 SMS → 0.7원 / 1문자 한사람: 10문자/day = 7원 나혼자(1) = 1달에 210원 가족+친구들(10) = 1달에 2,100원 일반사용자(1만) = 1달에 210만원 if 5만명 유저 → 1달에 1050만원(!!) 1년에 1억이 넘는 API 비용이 드는 GPT4o
  5. 성능이 부족하다면 → Fine Tuning! 큰-LLM API 고성능 비용 High

    Latency 작은-LLM API 데이터에 따라.. 장비에 따라.. 환경에 따라.. Open LLM 저성능 저렴 Low Latency
  6. V1.4 이후 Annotation: Multi-Class Classification "이건 얼마나 위험할까?" Very High

    Risk / High Risk / Medium Risk / Low Risk / No Risk(Zero Risk) 4 / 3 / 2 / 1 / 0 Multi-class Labeling
  7. Multi-class Annotation Voting Simple: Argmax Input GPT4o Gemini-Pro 1.5 Claude

    Sonnet 3.5 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 Method #1: Argmax 1 / 0 / 1 → 1
  8. Multi-class Annotation Voting Complex: Close-voting Input GPT4o Gemini-Pro 1.5 Claude

    Sonnet 3.5 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 Method #2: Close 1 / 0 / 2 → mean(1, 0, 2) = 1 *floor(1) = 1
  9. Llama-Ko 8B 🤔 - Local RTX 3090 w/ vLLM -

    Runpod.io Serverless - M1 max studio w/ Llama.cpp → 충분히 빠르지 않음… (Reasoning Token도 필요) → KcBERT로 먼저 → Low confidence → Llama-Ko 어디서 서빙하지?
  10. 지속가능한 1인개발 AI 서비스 만들기 학습 코드 자동 실행 →

    Google Colab → 학습 완료된 모델은 Hugging Face Hub에 Push → App 업데이트에 들어가는 모델은 데이터 분량 보고 결정 → CoreML 패키징도 자동으로 스케쥴링 (M1 max studio) → Github에 모델 포함 Push → Xcode Cloud Build → 직접 손으로 해줘야 하는 부분은 iOS 앱스토어 배포 자동화, 많이 자동화
  11. API 서버에는 한계가 있다. iOS가 제한하는 API Call timeout은 (개발문서에는

    명시되어있지 않지만) 2초 이내 LLM API에서 토큰당 생성하는 속도의 문제 → API 서버는 요청을 받고 토큰 생성을 마쳤지만 / iOS 기기에서는 Timeout으로 일반 문자 취급 → Total QPS(TPS)보다 request 당 TTFB(Latency)가 더 중요한 케이스 스팸 문자 / 프로모션 문자의 경우 → 중앙 서버에서 한번에 던지는 형태 → 한번에 API서버 요청 폭증 → Cache Server(REDIS)를 두어도 글자가 다르면 다른 Text가 되어서 Cache Miss Low latency가 필요한 LLM 서빙은 비싸다
  12. iOS는 버그가 있다. @: "문자가 안와요" → 대부분의 경우 정크함에

    있음 → 대부분의 유저는 '정크함'의 존재를 모른다! (앱 인트로 안내를 읽지 않는다) @: "문자가 없어요" → 통신사 차단 → 통신사 스팸 차단 서비스에서 걸린 경우를 앱 차단으로 오인하는 문제 @: "문자가 없어요" → iOS 버그 (iOS 18, 17 공통) → iOS가 정크함으로 보내는 경우 (알 수 없는 이유로) 수신함에 보이지 않는 문제 → 재현이 불가능함……. iOS 18.0, iOS 17.6/17.7
  13. 언어 모델은 내삽(Interpolation)이다. @: "이런 문자 안잡혔어요." @: "이런 문자

    스팸 아닌데 스팸으로 잡아요." → 알고 있는 / 제보 받은 문자는 다음 릴리즈에 반영 가능 하지만, 대부분은 개발자에게 리포팅 없이 비난 후 앱 삭제 제 휴대폰에 오지 않은 문자는 알수 없어요