Path: blob/master/site/ko/lite/android/tutorials/text_classification.md
25118 views
Android๋ฅผ ์ด์ฉํ ํ ์คํธ ๋ถ๋ฅ
์ด ํํ ๋ฆฌ์ผ์ TensorFlow Lite๋ฅผ ์ฌ์ฉํ์ฌ ์์ฐ์ด ํ ์คํธ๋ฅผ ๋ถ๋ฅํ๋ Android ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๋ถ์๊ฒ ๋ณด์ฌ์ค๋๋ค. ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ Android ๊ธฐ๊ธฐ๋ฅผ ์ํด ์ค๊ณ๋์์ง๋ง ๊ธฐ๊ธฐ ์๋ฎฌ๋ ์ดํฐ์์๋ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค.
์์ ์ ํ๋ฆฌ์ผ์ด์ ์ TensorFlow Lite๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ๊ธ์ (positive) ๋๋ ๋ถ์ (negative)์ผ๋ก ๋ถ๋ฅํ๊ณ , ์์ฐ์ด(NL)๋ฅผ ์ํ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ํ ์คํธ ๋ถ๋ฅ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์คํํ ์ ์๋๋ก ํฉ๋๋ค.
๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ค์ด๋ผ๋ฉด ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐธ์กฐ ๋๋ ํ ํ๋ฆฟ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธ ๋ถ๋ฅ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํธ ๋ฐ ์์ ์ ์ฐธ์กฐํ์ธ์.
ํ ์คํธ ๋ถ๋ฅ ๊ฐ์
ํ ์คํธ ๋ถ๋ฅ๋ ์ผ๋ จ์ ์ฌ์ ์ ์๋ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ฐ๋ฐฉํ ํ ์คํธ์ ํ ๋นํ๋ ๋จธ์ ๋ฌ๋ ์์ ์ ๋๋ค. ํ ์คํธ ๋ถ๋ฅ ๋ชจ๋ธ์ ๋จ์ด ๋๋ ๊ตฌ์ ์ด ์๋์ผ๋ก ๋ถ๋ฅ๋ ์์ฐ์ด ํ ์คํธ ๋ง๋ญ์น์์ ํ๋ จ๋ฉ๋๋ค.
ํ๋ จ๋ ๋ชจ๋ธ์ ํ ์คํธ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๊ณ ๋ถ๋ฅ๋ฅผ ์ํด ํ๋ จ๋ ์๋ ค์ง ํด๋์ค์ ์งํฉ์ ๋ฐ๋ผ ํ ์คํธ๋ฅผ ๋ฒ์ฃผํํ๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์ ์ ๋ชจ๋ธ์ ํ ์คํธ์ (์ฝ๋)์กฐ๊ฐ์ ๋ฐ์๋ค์ด๊ณ ํ ์คํธ์ ๊ฐ์ฑ์ด ๊ธ์ (positive)์ธ์ง ๋ถ์ (negative)์ธ์ง ๊ฒฐ์ ํฉ๋๋ค. ๊ฐ ํ ์คํธ (์ฝ๋)์กฐ๊ฐ์ ๊ฒฝ์ฐ, ํ ์คํธ ๋ถ๋ฅ ๋ชจ๋ธ์ ๊ธ์ (positive) ๋๋ ๋ถ์ (negative)์ผ๋ก ํ ์คํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ถ๋ฅ๋์๋์ง ์ ๋ขฐ๋๋ฅผ ๋ํ๋ด๋ ์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ด ํํ ๋ฆฌ์ผ์ ๋ชจ๋ธ์ด ๋ง๋ค์ด์ง ๋ฐฉ๋ฒ์ ๋ํ ๋ ์์ธํ ์ ๋ณด๋ TensorFlow Lite Model Maker๋ฅผ ์ด์ฉํ ํ ์คํธ ๋ถ๋ฅ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ธ ๋ฐ ๋ฐ์ดํฐ์ธํธ
์ด ํํ ๋ฆฌ์ผ์ SST-2(Stanford Sentiment Treebank) ๋ฐ์ดํฐ์ธํธ๋ฅผ ์ฌ์ฉํด ํ๋ จ๋ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. SST-2์๋ ๊ฐ ๋ฆฌ๋ทฐ๊ฐ ๊ธ์ (positive) ๋๋ ๋ถ์ (negative)์ผ๋ก ๋ฒ์ฃผํ๋ ํ๋ จ์ ์ํ 67,349๊ฐ์ ์ํ ๋ฆฌ๋ทฐ์ ํ ์คํธ๋ฅผ ์ํ 872๊ฐ์ ์ํ ๋ฆฌ๋ทฐ๊ฐ ์์ต๋๋ค. ์ด ์ฑ์ ์ฌ์ฉ๋ ๋ชจ๋ธ์ TensorFlow Lite Model Maker ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ํ๋ จ๋์์ต๋๋ค.
์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.
Average Word Vector (
NLClassifier
) - ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์NLClassifier
๋ ์ ๋ ฅ ํ ์คํธ๋ฅผ ์ฌ๋ฌ ๋ฒ์ฃผ๋ก ๋ถ๋ฅํ๋ฉฐ ๋๋ถ๋ถ์ ํ ์คํธ ๋ถ๋ฅ ๋ชจ๋ธ์ ๋ค๋ฃฐ ์ ์์ต๋๋ค.MobileBERT (
BertNLClassifier
) - ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์BertNLClassifier
๋ NLClassifier์ ์ ์ฌํ์ง๋ง, ์ฒ ์ ์ธ Wordpiece๋ฐ Sentencepiece ํ ํฐํ๊ฐ ํ์ํ ๊ฒฝ์ฐ์ ๋ง์ถฐ ๋ง๋ค์ด์ก์ต๋๋ค.
์ค์น ๋ฐ ์์ ์ฑ ์คํ
ํ ์คํธ ๋ถ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ๋ ค๋ฉด GitHub์์ ์์ ์ฑ์ ๋ค์ด๋ก๋ํ๊ณ Android Studio๋ฅผ ์ฌ์ฉํ์ฌ ์คํํฉ๋๋ค.
์์คํ ์๊ตฌ ์ฌํญ
Android Studio ๋ฒ์ 2021.1.1(Bumblebee) ์ด์
Android SDK ๋ฒ์ 31 ์ด์
๊ฐ๋ฐ์ ๋ชจ๋๊ฐ ํ์ฑํ๋ ์ํ๋ก ์ต์ OS ๋ฒ์ ์ SDK 21(Android 7.0 - Nougat)๊ฐ ์ค์น๋ Android ๊ธฐ๊ธฐ ๋๋ Android Emulator.
์์ ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ
์์ ์ฝ๋์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ๋ง๋ญ๋๋ค. ์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ Android Studio์์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํฉ๋๋ค.
์์ ์ฝ๋๋ฅผ ๋ณต์ ํ๊ณ ์ค์ ํ๋ ค๋ฉด:
git ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํฉ๋๋ค.
git clone https://github.com/tensorflow/examples.git
์ ํ์ ์ผ๋ก, ์คํ์ค ์ฒดํฌ์์์ ์ฌ์ฉํ๋๋ก git ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํ ์คํธ ๋ถ๋ฅ ์์ ์ฑ์ ๋ํ ํ์ผ๋ง ๋จ๊ฒ ๋ฉ๋๋ค.
cd examples git sparse-checkout init --cone git sparse-checkout set lite/examples/text_classification/android
ํ๋ก์ ํธ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์คํํ๊ธฐ
๋ค์ด๋ก๋ํ ์์ ์ฝ๋์์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ ํ ์คํํฉ๋๋ค.
์์ ์ฝ๋ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋น๋ํ๋ ค๋ฉด:
Android Studio๋ฅผ ์์ํฉ๋๋ค.
Android ์คํ๋์ค์์ **File(ํ์ผ) > New(์๋ก ๋ง๋ค๊ธฐ) > Import Project(ํ๋ก์ ํธ ๊ฐ์ ธ์ค๊ธฐ)**๋ฅผ ์ ํํฉ๋๋ค.
build.gradle ํ์ผ(
.../examples/lite/examples/text_classification/android/build.gradle
)์ด ํฌํจ๋ ์์ ์ฝ๋ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ์ฌ ํด๋น ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค.Android Studio์์ Gradle ๋๊ธฐํ๋ฅผ ์์ฒญํ๋ฉด OK(ํ์ธ)๋ฅผ ์ ํํฉ๋๋ค.
Android ๊ธฐ๊ธฐ๊ฐ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด ์๊ณ ๊ฐ๋ฐ์ ๋ชจ๋๊ฐ ํ์ฑํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. ๋ น์
Run
ํ์ดํ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ํํ๋ฉด Android Studio์์ ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ๋น๋ํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ์ปดํจํฐ ์๋์ ๋ค๋ฅธ ํ๋ก์ ํธ์ Android Studio๋ฅผ ์ฌ์ฉํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ช ๋ถ์ด ์์๋ ์ ์์ต๋๋ค. ๋น๋๊ฐ ์๋ฃ๋๋ฉด Android Studio๊ฐ ๋น๋ ์ถ๋ ฅ ์ํ ํจ๋์ BUILD SUCCESSFUL
๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์คํํ๋ ค๋ฉด:
Android Studio์์ **Run(์คํ) > Run(์คํ)โฆ**์ ์ ํํ์ฌ ํ๋ก์ ํธ๋ฅผ ์คํํฉ๋๋ค.
์ฐ๊ฒฐ๋ Android ๊ธฐ๊ธฐ(๋๋ ์๋ฎฌ๋ ์ดํฐ)๋ฅผ ์ ํํ์ฌ ์ฑ์ ํ ์คํธํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ฉํ๊ธฐ
{: .attempt-right width="250px"}
Android Studio์์ ํ๋ก์ ํธ๋ฅผ ์คํํ ํ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ฒฐ๋ ๊ธฐ๊ธฐ ๋๋ ๊ธฐ๊ธฐ ์๋ฎฌ๋ ์ดํฐ์์ ์๋์ผ๋ก ์ด๋ฆฝ๋๋ค.
ํ ์คํธ ๋ถ๋ฅ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
ํ ์คํธ ์์์ ํ ์คํธ (์ฝ๋) ์กฐ๊ฐ์ ์ ๋ ฅํ์ธ์.
Delegate(๋๋ฆฌ์) ๋๋กญ๋ค์ด์์
CPU
๋๋NNAPI
๋ฅผ ์ ํํ์ธ์.AverageWordVec
๋๋MobileBERT
๋ฅผ ์ ํํ์ฌ ๋ชจ๋ธ์ ์ง์ ํฉ๋๋ค.**Classify(๋ถ๋ฅ)**๋ฅผ ์ ํํ์ธ์.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธ์ (positive) ์ ์์ ๋ถ์ (negative) ์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์ด๋ฌํ ๋ ์ ์๋ ํฉ๊ณ๊ฐ 1์ด ๋๋ฉฐ ์ ๋ ฅ ํ ์คํธ์ ๊ฐ์ ์ด ๊ธ์ (positive) ๋๋ ๋ถ์ (negative)์ธ์ง ๊ฐ๋ฅ์ฑ์ ์ธก์ ํฉ๋๋ค. ๋์ ์ซ์๋ ์ ๋ขฐ๋ ์์ค์ด ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ด์ ์๋ํ๋ ํ ์คํธ ๋ถ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ต๋๋ค. ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ํ๋ ๋ฐฉ๋ฒ๊ณผ ํ ์คํธ ๋ถ๋ฅ ๊ธฐ๋ฅ์ ์ฌ๋ฌ๋ถ์ ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ์ ์ดํดํ๊ธฐ ์ํด ๋ค์ ์น์ ์ ์ฌ์ฉํ์ธ์.
์ ํ๋ฆฌ์ผ์ด์ ์๋ ๋ฐฉ๋ฒ - ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด ๊ตฌ์กฐ ๋ฐ ์ฃผ์ ํ์ผ์ ๋ํ ๊ฐ๋ตํ ์ค๋ช ์ ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์์ - ๊ธฐ์กด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธ ๋ถ๋ฅ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ํ ์ง์นจ์ ๋๋ค.
์์ฌ ์ฑ ์๋ ๋ฐฉ๋ฒ {:#how_it_works}
์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฐ์ด(NL)๋ฅผ ์ํ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ ๋ถ๋ฅ ๋ชจ๋ธ์ ๊ตฌํํฉ๋๋ค. Average Word Vector์ MobileBERT ๋ ๋ชจ๋ธ์ TensorFlow Lite Model Maker๋ฅผ ์ฌ์ฉํด ํ๋ จ๋์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ NNAPI ๋๋ฆฌ์๋ฅผ ์ฌ์ฉํ๋ ํ๋์จ์ด ๊ฐ์ ์ต์ ์ ํตํด ๊ธฐ๋ณธ์ผ๋ก CPU์์ ์คํ๋ฉ๋๋ค.
๋ค์ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ๋ ์ด ํ ์คํธ ๋ถ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ฃผ์ ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค.
TextClassificationHelper.kt - ํ ์คํธ ๋ถ๋ฅ์๋ฅผ ์ด๊ธฐํํ๊ณ ๋ชจ๋ธ ๋ฐ ๋๋ฆฌ์ ์ ํ์ ์ฒ๋ฆฌํฉ๋๋ค.
MainActivity.kt -
TextClassificationHelper
๋ฐResultsAdapter
ํธ์ถ์ ํฌํจํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํฉ๋๋ค.ResultsAdapter.kt - ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๊ณ ํฌ๋งทํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์์ {:#modify_applications}
๋ค์ ์น์ ์ ์์ ์ฑ์ ํ์๋ ๋ชจ๋ธ์ ์คํํ๋๋ก ์์ ์ Android ์ฑ์ ์์ ํ๋ ์ฃผ์ ๋จ๊ณ๋ฅผ ์ค๋ช ํฉ๋๋ค. ์ด๋ฌํ ์ง์นจ์ ์์ ์ฑ์ ์ฐธ์กฐ ํฌ์ธํธ๋ก ์ฌ์ฉํฉ๋๋ค. ์์ ์ ์ฑ์ ํ์ํ ํน์ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ์ฑ๊ณผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
Android ํ๋ก์ ํธ ์ด๊ธฐ ๋๋ ๋ง๋ค๊ธฐ
๋๋จธ์ง ์ง์นจ์ ๋ฐ๋ฅด๋ ค๋ฉด Android Studio์ Android ๊ฐ๋ฐ ํ๋ก์ ํธ๊ฐ ํ์ํฉ๋๋ค. ์๋ ์ง์นจ์ ๋ฐ๋ผ ๊ธฐ์กด์ ํ๋ก์ ํธ๋ฅผ ์ด๊ฑฐ๋ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋์ธ์.
๊ธฐ์กด Android ๊ฐ๋ฐ ํ๋ก์ ํธ ์ด๊ธฐ
Android Studio์์ *File(ํ์ผ) > Open(์ด๊ธฐ)*๋ฅผ ์ ํํ๊ณ ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
๊ธฐ๋ณธ Android ๊ฐ๋ฐ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
Android Studio์ ์ง์นจ์ ๋ฐ๋ผ ๊ธฐ๋ณธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค.
Android Studio๋ฅผ ์ฌ์ฉ์ ๋ํ ๋ ์์ธํ ์ ๋ณด๋ Android Studio ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ๋ก์ ํธ ์ข ์์ฑ ์ถ๊ฐ
์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ TensorFlow Lite ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์คํํ๊ณ ๋ฌธ์์ด๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ ์ค์ธ ๋ชจ๋ธ์์ ์ฒ๋ฆฌํ ์ ์๋ ํ ์ ๋ฐ์ดํฐ ํ์์ผ๋ก ๋ณํํ๋ ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฅ์ ์ก์ธ์คํ๋ ค๋ฉด ํน์ ํ๋ก์ ํธ ์ข ์์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋ค์ ์ง์นจ์ ํ์ํ ํ๋ก์ ํธ ๋ฐ ๋ชจ๋ ์ข ์์ฑ์ ์์ ์ Android ์ฑ ํ๋ก์ ํธ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
๋ชจ๋ ์ข ์์ฑ์ ์ถ๊ฐํ๋ ค๋ฉด:
TensorFlow Lite๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋์์ ๋ชจ๋์
build.gradle
ํ์ผ์ ๋ค์ ์ข ์์ฑ์ ํฌํจํ๋๋ก ์ ๋ฐ์ดํธํ์ธ์.์์ ์ ํ๋ฆฌ์ผ์ด์ ์์, ์ข ์์ฑ์ app/build.gradle์ ์์ต๋๋ค.
ํ๋ก์ ํธ๋ ํ ์คํธ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(
tensorflow-lite-task-text
)๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.์ด ์ฑ์ ๊ทธ๋ํฝ ์ฒ๋ฆฌ ์ฅ์น(GPU)๊ฐ ์คํ๋๋๋ก ์์ ํ๋ ค๋ฉด, GPU ๋ผ์ด๋ธ๋ฌ๋ฆฌ(
tensorflow-lite-gpu-delegate-plugin
)๋ GPU์์ ์ฑ์ ์คํํ ์ ์๋ ์ธํ๋ผ๋ฅผ ์ ๊ณตํ๊ณ ๋๋ฆฌ์(tensorflow-lite-gpu
)๋ ํธํ์ฑ ๋ชฉ๋ก์ ์ ๊ณตํฉ๋๋ค. GPU์์ ์ด ์ฑ์ ์คํํ๋ ๊ฒ์ ์ด ํํ ๋ฆฌ์ผ ๋ฒ์๋ฅผ ๋์ด์ญ๋๋ค.Android Studio์์ **File(ํ์ผ) > Sync Project with Gradle Files(ํ๋ก์ ํธ๋ฅผ Gradle ํ์ผ๊ณผ ๋๊ธฐํ)**๋ฅผ ์ ํํ์ฌ ํ๋ก์ ํธ ์ข ์์ฑ์ ๋๊ธฐํํฉ๋๋ค.
ML ๋ชจ๋ธ ์ด๊ธฐํํ๊ธฐ {:#initialize_models}
Android ์ฑ์์, ๋ชจ๋ธ๋ก ์์ธก์ ์คํํ๊ธฐ ์ ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํด TensorFlow Lite ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ด๊ธฐํํด์ผ ํฉ๋๋ค.
TensorFlow Lite ๋ชจ๋ธ์ *.tflite
ํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ๋ชจ๋ธ ํ์ผ์ ์์ธก ๋
ผ๋ฆฌ๊ฐ ํฌํจ๋๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์์ธก ํด๋์ค ์ด๋ฆ๊ณผ ๊ฐ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ํด์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก, ๋ชจ๋ธ ํ์ผ์ ์ฝ๋ ์์ ์ ๊ฐ์ด ๊ฐ๋ฐ ํ๋ก์ ํธ์ src/main/assets
๋๋ ํฐ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค.
<project>/src/main/assets/mobilebert.tflite
<project>/src/main/assets/wordvec.tflite
์ฐธ๊ณ : ์์ ์ฑ์ [download_model.gradle](https://github.com/tensorflow/examples/blob/master/lite/examples/text_classification/android/app/download_model.gradle)
ํ์ผ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ ์ Average Word Vector์ MobileBERT ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ๋ฒ์ ํ๋ก๋์
์ฑ์ ํ์ํ์ง ์๊ฑฐ๋ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
ํธ์์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ์ํด ์ด ์์ ์์๋ ๋ชจ๋ธ์ ๋ํ ์ค์ ์ ์ ์ํ๋ ์ปดํจ๋์ธ ๊ฐ์ฒด๋ฅผ ์ ์ธํฉ๋๋ค.
์ฑ์์ ๋ชจ๋ธ์ ์ด๊ธฐํํ๋ ค๋ฉด:
๋๋ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ชจ๋ธ์ ๋ํ ์ค์ ์ ์ ์ํ์ธ์. ์์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด ๊ฐ์ฒด๋ TextClassificationHelper.kt์ ์์ต๋๋ค.
๋ถ๋ฅ์ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ถํด ๋ชจ๋ธ์ ๋ํ ์ค์ ์ ๋ง๋ค๊ณ
BertNLClassifier
๋๋NLClassifier
๋ฅผ ์ฌ์ฉํ์ฌ TensorFlow Lite ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.์์ ์ ํ๋ฆฌ์ผ์ด์ ์์, ์ด๊ฒ์ TextClassificationHelper.kt์
initClassifier
ํจ์์ ์์ต๋๋ค.์ฐธ๊ณ : ํ ์คํธ ๋ถ๋ฅ๋ฅผ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ํ๋ก๋์ ์ฑ์
BertNLClassifier
๋๋NLClassifier
๋ฅผ ์ฌ์ฉํฉ๋๋ค(๋ ๊ฐ์ง ๋ชจ๋๋ ์๋).
ํ๋์จ์ด ๊ฐ์ ์ฌ์ฉ(์ ํ ์ฌํญ) {:#hardware_acceleration}
์ฑ์์ TensorFlow Lite ๋ชจ๋ธ์ ์ด๊ธฐํํ ๋ ํ๋์จ์ด ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ์์ธก ๊ณ์ฐ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. TensorFlow Lite ๋๋ฆฌ์๋ GPU(๊ทธ๋ํฝ ์ฒ๋ฆฌ ์ฅ์น) ๋๋ TPU(ํ ์ ์ฒ๋ฆฌ ์ฅ์น)์ ๊ฐ์ ๋ชจ๋ฐ์ผ ์ฅ์น์ ํน์ ์ฒ๋ฆฌ ํ๋์จ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์คํ์ ๊ฐ์ํ๋ ์ํํธ์จ์ด ๋ชจ๋์ ๋๋ค.
์ฑ์์ ํ๋์จ์ด ๊ฐ์ ์ฌ์ฉํ๊ธฐ
๋ณ์๋ฅผ ๋ง๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉํ ๋๋ฆฌ์๋ฅผ ์ ์ํ์ธ์. ์์ ์ ํ๋ฆฌ์ผ์ด์ ์์, ์ด ๋ณ์๋ TextClassificationHelper.kt์ ์ด๊ธฐ์ ์์ต๋๋ค.
๋๋ฆฌ์ ์ ํ์๋ฅผ ๋ง๋ญ๋๋ค. ์์ ์ ํ๋ฆฌ์ผ์ด์ ์์, ๋๋ฆฌ์ ์ ํ์๋ TextClassificationHelper.kt์
initClassifier
ํจ์์ ์์ต๋๋ค.
์ฐธ๊ณ : ์ด ์ฑ์ ์์ ํ์ฌ GPU ๋๋ฆฌ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ๋ถ๋ฅ์๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ ์ค๋ ๋์์ ์์ฑ๋ ๋ถ๋ฅ์๊ฐ ํ์ํฉ๋๋ค. ์ด๊ฒ์ ์ด ํํ ๋ฆฌ์ผ์ ๋ฒ์์์ ๋ฒ์ด๋ฉ๋๋ค.
TensorFlow Lite ๋ชจ๋ธ ์คํ์ ๋๋ฆฌ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋์ง๋ง ํ์๋ ์๋๋๋ค. TensorFlow Lite์์ ๋๋ฆฌ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ TensorFlow Lite ๋๋ฆฌ์๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ธ์ ๋ํ ๋ฐ์ดํฐ ์ค๋นํ๊ธฐ
Android ์ฑ์์ ์ฝ๋๋ ๋ก์ฐ ํ ์คํธ์ ๊ฐ์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์์ ์ฒ๋ฆฌํ ์ ์๋ ํ ์ ๋ฐ์ดํฐ ํ์์ผ๋ก ๋ณํํ์ฌ ํด์์ ์ํํ ์ ์๊ฒ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋ธ๋ก ์ ๋ฌ๋๋ ํ ์์ ๋ฐ์ดํฐ์๋ ๋ชจ๋ธ ํ๋ จ์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ํ์๊ณผ ์ผ์นํ๋ ํน์ ์ฐจ์ ๋๋ ํ์์ด ์์ด์ผ ํฉ๋๋ค.
์ด ํ ์คํธ ๋ถ๋ฅ ์ฑ์ ์ ๋ ฅ์ผ๋ก ๋ฌธ์์ด์ ๋ฐ์๋ค์ด๊ณ ๋ชจ๋ธ์ ์์ด ๋ง๋ญ์น์์ ์ ์ ์ผ๋ก ํ๋ จ๋ฉ๋๋ค. ํน์ ๋ฌธ์์ ๋น์์ด ๋จ์ด๋ ์ถ๋ก ์ค ๋ฌด์๋ฉ๋๋ค.
๋ชจ๋ธ์ ํ ์คํธ ๋ฐ์ดํฐ ์ ๊ณตํ๊ธฐ
initClassifier
ํจ์๊ฐ ML ๋ชจ๋ธ ์ด๊ธฐํ ๋ฐ ํ๋์จ์ด ๊ฐ์ ์ฌ์ฉ ์น์ ์์ ์ค๋ช ๋ ๋๋ก ๋๋ฆฌ์์ ๋ชจ๋ธ์ ๋ํ ์ฝ๋๋ฅผ ํฌํจํ๋๋ก ํฉ๋๋ค.init
๋ธ๋ก์ ์ฌ์ฉํดinitClassifier
ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ์์ ์ ํ๋ฆฌ์ผ์ด์ ์์,init
์ TextClassificationHelper.kt์ ์์ต๋๋ค.
์์ธก ์คํํ๊ธฐ
Android ์ฑ์์, BertNLClassifier ๋๋ NLClassifier ๊ฐ์ฒด๋ฅผ ์คํํ๋ฉด ๋ชจ๋ธ์ ์ ๋ ฅ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๊ธฐ ์์ํ์ฌ "๊ธ์ (positive)" ๋๋ "๋ถ์ (negative)"์ผ๋ก ๋ชจ๋ธ์ ๋ฒ์ฃผํํ ์ ์์ต๋๋ค.
์์ธก ์คํํ๊ธฐ
์ ํ๋ ๋ถ๋ฅ์ (
currentModel
)์ ์ฌ์ฉํ๊ณ ์ ๋ ฅ ํ ์คํธ๋ฅผ ๋ถ๋ฅํ๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ(inferenceTime
)์ ์ธก์ ํ๋classify
ํจ์๋ฅผ ๋ง๋์ธ์. ์์ ์ ํ๋ฆฌ์ผ์ด์ ์์,classify
ํจ์๋ TextClassificationHelper.kt์ ์์ต๋๋ค.classify
์ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์ค๋ ๊ฐ์ฒด๋ก ์ ๋ฌํ์ธ์.
๋ชจ๋ธ ์ถ๋ ฅ ์ฒ๋ฆฌํ๊ธฐ
ํ ์คํธ ์ค์ ์ ๋ ฅํ๋ฉด, ๋ชจ๋ธ์ '๊ธ์ (positive)'๊ณผ '๋ถ์ (negative)' ๋ฒ์ฃผ๋ก 0๊ณผ 1 ์ฌ์ด์์ ๋ถ๋์ผ๋ก ํํํ๋ ์์ธก ์ ์๋ฅผ ์์ฑํฉ๋๋ค.
๋ชจ๋ธ์์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด:
๋ฆฌ์ค๋ ๊ฐ์ฒด์ ๋ํ
onResult
ํจ์๋ฅผ ๋ง๋ค์ด ์ถ๋ ฅ์ ์ฒ๋ฆฌํ์ธ์. ์์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฆฌ์ค๋ ๊ฐ์ฒด๋ MainActivity.kt์ ์์ต๋๋ค์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด
onError
ํจ์๋ฅผ ๋ฆฌ์ค๋ ๊ฐ์ฒด์ ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐํฉ๋๋ค.
๋ชจ๋ธ์ด ์ผ๋ จ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๊ฑฐ๋ ์ถ๊ฐ ๋ ผ๋ฆฌ๋ฅผ ์คํํ์ฌ ์ด๋ฌํ ์์ธก์ ๋ฐ๋ผ ์กฐ์น๋ฅผ ์ทจํ ์ ์์ต๋๋ค. ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์์ ์์ธก ์ ์๋ฅผ ๋์ดํฉ๋๋ค.
๋ค์ ๋จ๊ณ
TensorFlow Lite Model Maker๋ฅผ ์ด์ฉํ ํ ์คํธ ๋ถ๋ฅ ํํ ๋ฆฌ์ผ์ ํตํด ์ฒ์๋ถํฐ ๋ชจ๋ธ์ ํ๋ จํ๊ณ ๊ตฌํํ์ธ์.
TensorFlow๋ฅผ ์ํ ํ ์คํธ ์ฒ๋ฆฌ ๋๊ตฌ๋ฅผ ๋ ์ดํด๋ด ๋๋ค.
TensorFlow Hub์์ ๊ธฐํ BERT ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
์์ ์์ TensorFlow Lite์ ๋ค์ํ ์ฉ๋๋ฅผ ์ดํด๋ด ๋๋ค.
๋ชจ๋ธ ์น์ ์์ TensorFlow Lite์ ํจ๊ป ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ด ๋๋ค.
TensorFlow Lite ๊ฐ๋ฐ์ ๊ฐ์ด๋์์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋จธ์ ๋ฌ๋์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ด ๋๋ค.