티스토리 뷰

Study/AI

[MLY] 데이터 불일치 해결하기

생각많은 소심남 2018. 10. 5. 10:17

 음성 인식 시스템을 개발하고 있는데, 학습 데이터나 학습 개발 데이터 상에서는 잘 동작하는데, 개발 데이터 상에서는 잘 동작하지 않는다고 가정해보자. 그러면 데이터 불일치(data mismatch) 현상이 있는 것인데, 이 때 어떻게 해야 할까?

 본인이 추천하는 방법은:

1) 학습 데이터와 개발 데이터 사이에 어떤 데이터 특성이 다른지를 이해할 것

2) 알고리즘 상에서 문제가 발생하는 개발 데이터에 조금 더 적합한 학습 데이터를 조금 더 수집할 것[각주:1]

 예를 들어, 음성 인식의 개발 데이터에서 오류 평가를 수행하고 있다고 가정해보자: 아마 처음에는 100개의 데이터에 대해서 일일이 평가를 수행할 것이고, 알고리즘이 어디서 문제가 생기는지를 이해하려고 할 것이다. 아마 개발 데이터에 포함되어 있는 대부분의 음성 데이터가 차 안에서 생성되어 시스템이 잘 동작하지 않는 것이고, 이에 반해 학습시키고 있는 데이터의 대부분은 조용한 배경음이 있는 환경에서 생성된 것 임을 알 수 있을 것이다. 이때 엔진 소리나 거리의 소음이 시스템의 성능을 급격하게 저하시킬 것이다. 이런 경우에는 차 안에서 측정된 음성 데이터를 학습 데이터로 조금더 활용할 수 있을 것이다. 위와 같이 오류 평가의 목적은 학습 데이터와 개발 데이터 간의 중요한 차이점을 이해하기 위함이고, 이런 차이가 결국 데이터 불일치(data mismatch)를 야기하는 것이다.

 만약 학습 데이터와 학습 개발 데이터가 모두 차안에서 녹음된 데이터를 포함하고 있다면  해당 데이터 상에서의 시스템 성능을 다시한번 확인해볼 필요가 있다. 만약 학습 데이터 상에서의 차안 음성 데이터에서는 잘 동작하고, 학습 개발 데이터 상에서의 차안 음성 데이터에서는 잘 동작하지 않는다면, 이 경우에는 차안 음성 데이터를  더 수집해서 가설(hypothesis)를 검증하는 것이 도움이 된다. 이것이 바로 이전 장에서 다뤘던 개발/테스트 데이터에서 일부를 학습 데이터로 포함시켜야 할 가능성에 대해서 다뤘던 이유이다. 이렇게 하면 학습 데이터 상에서 차안 데이터에 대한 성능과 개발/테스트 데이터 상에서 차안 데이터의 성능을 비교할 수 있게 해준다.

 사실 이런 과정에 대한 확실한 보장은 없다. 예를 들어, 개발 데이터에 더 알맞은 데이터를 학습 데이터로 획득하기 어렵다면, 시스템의 성능을 향상시키는데 있어 방법을 찾기가 어려울 것이다.

< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 42. Addressing data mismatch를 번역한 내용입니다.>

  1. "domain adaptation"과 관련한 연구가 있다. domain adaptation이란 하나의 데이터 분포에서 알고리즘을 학습시키고, 다른 데이터 분포 상에 일반화 시키는 방법을 말한다. 이런 방법은 사실 특별한 문제 상에서만 적용되는 편이고, 이 포스트에서 소개하는 방법 보다는 덜 쓰이는 방법이다. [본문으로]
댓글