<aside> 💡 스크립트는 파이프라인이 돌기 전, 사용을 하고 있는 데이터와 동기화를 하기 위해 기존에 있던 데이터를 파이프라인 로직에 맞게 먼저 스크립트로 진행하도록 한다.
</aside>
set_inverted_index
역인덱스를 만들어 키워드 추출 작업에 필요한 데이터를 쌓는 과정이다.
순서는 link → category → pik 순서로 진행되며 테이블의 구조는 모두 id, created(modified), term, indexes로 동일하다.
indexes 필드에는 해당 단어를 포함하는 콘텐츠의 pk 값이 들어있다.
디버깅 및 테스트를 위해서 created(modified) 필드응 default 값으로 넣어 주도록 하자
공통적으로 다음과 같은 구조를 가진다.
set_keyword_table
역인덱스가 갖추어졌다고 가정하고 스코어 알고리즘을 이용해서 term과 score를 key-value로 설정하여 JSON 형식으로 넣어주는 작업이다.
set_pik_vector
각 콘텐츠에 정의한 키워드를 바탕으로 임베딩을 하여 최종적으로 픽 벡터를 만드는 과정이다. 생성되는 테이블은 픽을 벡터화한 테이블 하나만 생성이 된다.
<aside> ❓ 기존에는 링크와 카테고리 모두 벡터를 생성하여 테이블에 저장을 하였지만 이 방법은 먼저, 업데이트가 어렵고, 비효율적인 용량을 차지하며 실제로는 픽에 대한 벡터가 가장 중요하기 때문에 기존의 방식에서 픽 벡터만 저장하는 방식을 선택하였다.
</aside>
각 콘텐츠의 벡터들은 TF-IDF 스코어를 바탕으로 가중치 평균을 낸 벡터를 각 콘텐츠의 벡터로 정의하였으며 픽 벡터는 임의로 정한 계수를 바탕으로 가중치 평균을 낸 벡터를 대표 백터로 정의하였다.
기본적인 가중치를 적용한 모습이다.
set_pik2pik
계산된 벡터를 기준으로 유사도를 판단하여 선택한 픽에 대해서 가장 유사한 픽을 구하는 과정이다. 이미 계산된 벡터를 기준으로 다음과 같은 과정을 거친다.
후보 선출
먼저 해당 픽에 대한 키워드를 역인덱스에서 검색하여 같은 단어를 가지고 있는 픽, 카테고리, 링크 아이디를 모아서 후보 픽을 일차로 추려낸다.
예) 링크의 경우, 필터링된 링크를 가지고 있는 픽이 후보픽에 오르게 된다.
유사도 계산
후보 픽에 대해서 유사도를 계산하여 유사도가 입계 값보다 높은 픽 아이디와 유사도의 값을 key-value 형태로 만들어 JSON으로 저장을 한다.