MLOps-Label and Organize Data

Label and Organize Data


Obtaining Data

dia

Data를 수집하는데에 얼만큼의 기간을 할당해야 적절한걸까? 각 단계에서 많은 시간을 쏟는 것 보다는, 최대한 전체적인 반복 과정에 빨리 들어가는것이 개발에 더 효율적일 수 있다.

m개의 example data를 모으는데에 몇일이 걸릴까? 라고 생각하기 보다는 k일 안에 얼마나 data를 모을 수 있을까? 라고 대략적인 시간을 정한 뒤 data를 수집하면 좋을것이다.

물론, 개발하려는 서비스와 비슷한 프로젝트 경험이 있어서 Model을 제대로 훈련시키려면 대략 어느정도의 Data가 있어야한다 라는 Insight가 있으면 Data의 양을 기준으로 생각하는것이 더 좋을것이다.


inv

Data를 모을 때는, Data를 어떻게 모을것인지 어디서 모을것인지에 대한 source들을 팀원과 함께 Brainstorming 하는것이 매우 중요하다. 막상 이거해보자 저거해보자 라고 랜덤하게 approach하는것보다 시간과 자원을 적절히 선택하는데에 많은 도움이 될 수 있다.


Data Pipeline

example

user info로부터 해당 user가 직업을 찾고있는지 예측하는 Service를 개발한다고 생각해보자.

Model을 학습시키기 위해서 우리는 Raw data를 Data cleaning이라는 일종의 pre-processing과정을 거친다. 그리고 이 pre-processing은 또다른 Machine learning, python, etc.. 등의 scripting으로 진행된다고 해보자.

핵심은 실제로 서비스가 Production 될 때, Machine Learning model로 들어갈 data가 development 할때랑 같은 분포에서 오게 하기 위해 어떻게 scripting을 재현(replicate) 할 것이냐이다.

물론 scripting을 production 상황에서 어떻게 재현할까에 대한 고민은 중요하지만, 처음부터 그것에 얽매일 필요는 없다. 우선 POC pahse를 거치고 Production phase로 가면서 생각해보자.

우선 POC phase에서는 이 application이 잘 작동하고, 상용화할 가치가 있는지 판단하는데에 중점을 둔다. 따라서 prototype을 잘 작동시키는것에 많은 힘을 쏟고, 때로는 pre-processing이 다소 수동적으로 진행되어도 괜찮다. 물론 이러한 부분은 추가적으로 메모해놓고 후에는 해결해야할 문제일 것이다.

이후에 POC phase가 끝나면 Production phase로 들어간다. 여기서 더 정교한 tool등을 이용해 Data pipeline이 재현가능(replicable) 한지 정확히 판단하고 구현해본다.

이 때 사용할 수 있는 tool에는 Tensorflow Transform, Apache Beam, Airflow 등이 있다.


Meta-data, data provenance and lineage

pipe

위에서 나온 직업을 찾고있는지 예측하는 모델의 pipeline을 나타내면 이와 같다.

우선 spam dataset으로 부터 시작해 spam을 구분하는 모델을 만들고, 이 모델을 이용해 User data를 de-spam 한다.

거기에 ID를 merge하는 모델을 만들어 User ID를 merge하여 Clean user data를 만들어낸다.

이렇게 pre-processing된 Data를 가지고 최종적으로 예측을 하게 된다.

만약 이런 복잡한 시스템에서 Spam dataset이 잘못되었다는것을 알게되어 뒤로 돌아가 수정을 해야한다면 어떻게 할까?

각각의 Model을 만든 사람도 다를것이고, 파일 또한 여러 컴퓨터에 있을 수 있다. 이러한 상황에서 시스템을 Maintainalbe하게 만들기 위해서 Data provenance and lineage를 Tracking하는것은 매우 도움이 된다.

Data provenance는 어디서 그 Data가 왔는지를 나타내며 Lineage는 pipeline의 끝까지 가기 위한 step의 순서를 나타낸다. 그리고 앞서 소개한 Tool들을 사용해서 이러한 정보들을 체계적으로 관리할 수 있다.

Meta-data는 data 의 data를 뜻한다. 예를들어 핸드폰 액정의 흠집을 검사하는 시스템에서 data는 핸드폰의 사진이다. 그리고 meta-data는 그 사진의 정보 즉, 언제 그 사진이 찍혔는지, 어느 공장에서 찍혔는지, 그 공장의 어느 생산라인에서 찍혔는지, labeling 한 사람이 누군지 등의 세부적인 정보다.

이러한 Meta-data는 Error analysis에서 매우 좋은 정보를 제공한다. 특정한 error가 자주 발생하여 조사를 해보니 어떤 공장의 특정 생산 line에서 문제가 자주 발생한다는것을 알아낼 수 있고, 조치를 취할 수 있다. 반면 이런 Meta-data를 기록하지 않았을 경우 문제를 Tracking하기 매우 어려울 것이다.


Balanced train/dev/test splits

보통 우리는 비율 안에서 랜덤하게 Train / Dev / Test set을 나눈다. 비교적 작은 규모의 Data set을 가지고 있을 때, 적절히 balanced 하게 data set를 구성하는 것은 ML development process를 크게 향상시킬 수 있다.

간단한 예를 들어 Image 인식에서 100개의 example data가 있고, 그 중 30개가 positive한 data라고 하자.

우리가 Train/dev/test set을 60/20/20의 비율로 나누기로 정했다고 할 때 보통은 그 비율로 example을 random하게 split할 것이다.

Random split을 한 결과, 각 Data set내에서 Positive data의 개수가 21/2/7개가 되었다고 해보자. 각 data set에서 positive의 비율은 35%, 10%, 35%가 되고 이는 Dev set가 representative 하지 못하다고 말할 수 있다.

이런 구성 대신 Positive의 개수를 18/6/6 개로 balanced 분배하게 되면 같은 규모의 Data라도 Learning algorithm의 결과에 큰 변화를 줄 수 있다.

물론 Data의 규모가 충분히 크면 그냥 random하게 split해도 각 Data set는 충분히 representative할것이므로 고려하지 않아도 된다. 하지만 작은 규모의 Data를 가지고 있다면, 이런 간단한 테크닉으로 큰 변화를 기대해 볼 수도 있을 것이다.



연관글

Label ambiguity

https://arxiv.org/pdf/1706.06969.pdf

Data pipelines

Data lineage

MLops

Geirhos, R., Janssen, D. H. J., Schutt, H. H., Rauber, J., Bethge, M., & Wichmann, F. A. (n.d.). Comparing deep neural networks against humans: object recognition when the signal gets weaker∗. Retrieved May 7, 2021, from Arxiv.org website: