사용할 보드게임, 매커니즘 데이터 크롤링
보드게임 추천 알고리즘을 위한 Word2Vec 모델을 학습시키기 위해, Divedice, BoardGameGeek, Redbotton의 데이터를 크롤링했다..
전체 보드게임으로 학습시킬 경우 데이터가 많기도 하고, 실제 매장에 없는 게임이 추천으로 나올 수 있으므로 우선 Redbotton 강남점의 보드게임 리스트를 얻어와야 했다.
Redbotton 홈페이지에서 데이터를 가져오기 위해 검색창에 %%를 입력해서 데이터 전체를 가져왔다. 추가로 매장 내 메뉴얼과 음식 조리법 등도 같이 나왔다.,,
해당 쿼리로 튀어나온 보드게임들
그 후, 해당 페이지의 정적 페이지를 저장한 후, 파이썬의 beautifulsoup4 라이브러리로 보드게임의 한글 제목, 보드게임의 영문 제목, 보드게임의 최소,최대 인원수, 게임시간 을 크롤링했다.
크롤링된 보드게임 데이터를 csv 포맷으로 저장
그 후, 매커니즘의 경우 Divedice 홈페이지의 용어설명 페이지를 참조했다.
Divedice 홈페이지의 ‘용어설명’ 페이지
크롤링 결과.
보드게임 데이터 - 메커니즘 데이터 교차 테이블 생성
이제 보드게임 데이터와 메커니즘 데이터가 있으므로, 이 둘을 연결하는 교차테이블이 필요하다.
어떤 보드게임에 어떤 메커니즘들이 속하는지 알기 위해서, BoardGameGeek 사이트를 이용하기로 했다.
BoardGameGeek의 경우, Search란에 영문 게임명을 입력할 시, 해당 게임 및 관련 게임들을 전부 리스트로 반환해준다.
검색에 ‘7 Wonders Duel’을 검색한 결과
따라서, 현재 우리 데이터베이스의 Game 테이블의 영문 게임명을 반복하면서 Selenium을 사용하여 쿼리를 날린 후, 첫 번째 게임의 링크로 들어가서 게임 디테일 페이지로 들어가야 했다.
그 후, 게임 디테일 페이지에서 카테고리 및 메커니즘을 가져오기 위해, 게임 디테일 페이지의 링크에 /credits#boardgamefamily
를 추가하여 더보기 페이지로 들어갔다.
‘7 Wonders Duel’의 더보기 페이지. Categories 및 Mechanisms 리스트를 제공해 준다.
이 페이지에서 드디어 ‘7 Wonders Duel’ 게임의 태그들을 추출할 수 있었다!
이제 우리의 Game 테이블과 Tag 테이블을 참조해서 교차 테이블을 만들었다.
Word2Vec 모델 학습
이제 보드게임 데이터가 전부 갖춰졌으므로, 추천을 위해 우리가 사용 할 언어모델인 ‘Word2Vec’ 모델을 학습시켜야 했다.
처음엔 생성한 Word2Vec 모델에 ‘게임 태그와 그 설명’ 형식으로 이루어진 게임 문서를 학습시켰다.
그러나 이 방법은 모델에 존재하지 않는 단어의 경우 벡터 임베딩이 되지 않는다는 단점과, 태그만으로는 유의미한 추천이 되지 않을거라 생각해서 게임의 제목으로 해당 게임의 설명과 유저평을 요약한 두 개의 텍스트 데이터를 OpenAI API를 통해 생성해서 문서에 추가로 적용시켰다.
게임의 설명과 유저평 요약
진행중..