어떤 콘텐츠에서 어떤 키워드가 추출되었는지 모니터링하기가 쉽니 않다.
TFIDF를 이용하는데에 Pik, Category, Link를 같은 방식으로 계산하고 있다.
→ 길이를 고려한다든지(BM25)에 관련된 고려사항이 존재하지 않는다.
추출된 명사에 대한 inverted index를 만든다.
어떤 명사가 어떤 콘텐츠와 연관되어있는지 알 수 있다.
위의 내용을 바탕으로 콘텐츠의 키워드를 추출한 테이블을 새롭게 만든다.
추출된 키워드에 대한 모니터링도 중요하지만, 벡터와를 위해서 추출된 키워드의 TFIDF 점수까지 JSON으로 저장을 하는 것도 좋은 방법이라고 반단하였다.
→ 모델이 갱신되면서 개선될 수 있는 OOV 문제에 대해서 유연한 대처가 가능할 것으로 보임(기존의 방식은 모델이 바뀌면 다시 키워드를 추출하고 임베딩을 했어야 했다.)
어떤 컨텐츠가 어떤 키워드에 대해서 어떤 점수를 얻었는지 알 수 있다.
임베딩 과정을 모델에 따른 사상과정이라고 생각한다면 키워드를 미리 벡터화 시키지 않고 보관을 해놓는 것도 매우 적절한 대책이 될것이라고 판단하였다.
속도: line_profiler를 통해서 속도 측정 및 병렬, 분산 작업 활성화
pandas에서 병렬성을 제공하는 Dask와 Swifter를 사용하여 병렬화된 작업을 적극 활용할 수 있다. Dask의 경우 성능면에서는 우수하지만 코어의 수를 정하고 몇가지 발생하는 옵션의 수로 인해서 간단하게 한줄로 pandas를 사용하는 것처럼 사용할 수 있는 Swifter를 사용하였다.
메모리: memory_profiler를 베이스로 메모리 사용량 측정
피큐레잇의 프로젝트에서 배치작업에서 속도가 매우 중요한 부분을 차지하지는 않는다. 따라서 되도록 메모리에 집중하되 병렬성을 최대한 활용하여 개선을 하도록 해보자
기존의 방식
일단 loop와 .iloc
와 같은 방식은 Series
객체의 빈번한 생성과, 역참조에 의해서 속도측면에서 매우매우 좋지 않은 선택이다. apply를 사용하여 이러한 속도저하를 해결해보자
pandas raw=True
를 사용하여 Series
객체의 생성을 최소한으로 하여 메모리를 줄이자.
apply와 옵션을 사용하여 loop를 줄이고 메모리를 아껴보자