이 글은 제가 작업했던 내용을 정리하기 위해 수기 형식으로 작성 된 글입니다.
2022.12.09 - [[신.만.추]] - 신입이 만드는 추천시스템-1(개요)
2022.12.09 - [[신.만.추]] - 신입이 만드는 추천시스템-2(데이터 수집, 스크래핑)
2022.12.09 - [[신.만.추]] - 신입이 만드는 추천시스템-3(셀레니움 최소화)
- 텍스트 데이터 수집(크리에이터 컨텐츠, 광고주 제안서)
- 텍스트 데이터 전처리 및 키워드화
- 키워드로 워드임베딩 모델 학습
- 아이템 벡터화
저번에 작성했던 글에서 셀레니움의 비율을 최소화하고 requests라이브러리를 추가적으로 사용하여 크롤링 시간을 단축하였다. 이번 글에서는 수집한 데이터를 전처리하고 해당 데이터를 키워드로 만들고 해당 키워드를 워드임베딩 모델에 학습시키겠다.
2. 텍스트 데이터 전처리 및 키워드화
저번 글에서 크롤링 한 데이터는 아래와 같다.
크롤링 결과 이미지
1부에서 적었던 것 과같이 크리에이터 및 광고주 제안서의 데이터는 FastText 모델을 활용하여 벡터화를 진행할 예정이다.
FastText모델은 아무것도 학습되지 않은 모델을 사용할 수도 있지만, 박규병님이 학습을 하셨던 Pre-trained 모델을 가지고 추가학습을 진행하여 사용할 예정이다.
그럼 추가학습을 위해서 데이터를 정제해야하는데 이를 위해서 필요한 라이브러리가 있다.
바로 한국어 자연어처리 라이브러리이다.
한국어 자연어처리 라이브러리는 여러가지 종류가 있는데 이 중 은전한잎의 mecab을 사용해 명사만을 추출하고, 영상 더보기 텍스트에 있는 해쉬태그(’#브이로그’와 같은)나 영상 제목 위의 태그를 추가하여 학습하려 한다.
(mecab을 설치하는 과정은 참조링크 참고)
명사만을 추출하는 이유는 다양한 텍스트 데이터 전부를 활용하기에는 데이터의 양이 너무 많고, 실제 크리에이터를 검색할 때는 먹방, 브이로그 등과 같이 문장이 아닌 단어(키워드)로 검색하기 때문이다.
마찬가지로 해쉬태그나 영상 제목 위의 태그를 추가해 학습하는 이유도 동일하다.
전처리 코드
import pandas as pd
import numpy as np
from konlpy.tag import Mecab
mecab = Mecab()
result_df = pd.DataFrame(creator_data,columns=['채널명','구독자수','영상링크','영상제목','더보기내용', '조회수','업로드날짜'])
total_keyword = []
for i in result_df.index:
temp = ''.join(str(result_df.loc[i]['영상제목'])+' '+str(result_df.loc[i]['더보기내용']))
total_temp = ''.join(str(result_df.loc[i]['영상제목'])+' '+str(result_df.loc[i]['더보기내용']))
temp = temp.replace('None','')
temp = re.sub(r"[^가-힣]",' ',temp)
temp = ' '.join(re.split(r"\\s+", temp))
temp = temp.strip()
temp = temp.split(' ')
total_temp = total_temp.replace('None','')
total_temp = re.sub(r"[^가-힣]",' ',total_temp)
total_temp = ' '.join(re.split(r"\\s+", total_temp))
total_temp = total_temp.strip()
total_temp = mecab.nouns(total_temp)
temp += total_temp
temp = [word for word in temp if len(word)>1]
temp = list(set(temp))
total_keyword.append(temp)
위의 코드로 수집된 데이터를 정제하면 아래와 같은 결과물이 나오게 된다.
전처리 결과
3. 키워드로 워드임베딩 모델 학습
전처리 된 결과물은 Pre-trained FastText모델에 추가학습 데이터로 사용한다.
해당 모델의 워드임베딩 차원은 200차원이다.
따라서 학습후에 나오는 임베딩 벡터 또한 200차원의 벡터임을 알 수 있다.
학습 과정은 생각보다 간단하다. 키워드를 모델에 추가 학습하면 끝이다.
학습진행 코드
from gensim.models import fasttext as ft
from sklearn.metrics.pairwise import cosine_similarity
model = ft.load_facebook_model('ko.bin')
model.build_vocab(total_keyword, update=True)
model.train(total_keyword,total_examples=len(total_keyword), epochs=2000)
<학습전 단어 간 유사도>
유사도 결과 이미지
<학습후 단어 간 유사도>
유사도 결과 이미지
참조링크
박규병님의 워드임베딩 깃허브
https://github.com/Kyubyong/wordvectors
mecab 설치(우분투)
'[신.만.추]' 카테고리의 다른 글
신입이 만드는 추천시스템-6(웹서버 구축) (0) | 2022.12.10 |
---|---|
신입이 만드는 추천시스템-5(아이템 벡터화) (0) | 2022.12.10 |
신입이 만드는 추천시스템-3(셀레니움 최소화) (0) | 2022.12.09 |
신입이 만드는 추천시스템-2(데이터 수집, 스크래핑) (2) | 2022.12.09 |
신입이 만드는 추천시스템-1(개요) (0) | 2022.12.09 |