Junction 2023 Asia

2023 Project

  • 프로젝트 깃허브 저장소 : 여기를 눌러 확인하세요
  • 날짜 : 2023.08.18 15:30 - 2023.08.20 18:00
  • 장소 : 벡스코, 부산, 대한민국
  • : Yuna Ji(Designer), DongGyu123(Developer), Yuseung Lee(Entrepreneur), 9tailwolf(Developer)
  • View in ENG

Junction 2023 Asia 소개

Junction 2023 Asia는 전 세계의 다양한 사람들이 모여 다양한 크리에이터 간의 경계를 허무는 3일간의 해커톤입니다. 300명의 개발자, 디자이너, 기업가가 해커톤에 초대됩니다. 그리고 각 팀에는 개발자 1명, 디자이너 1명, 기업가 1명(최대 5명)이 포함됩니다.


프로젝트 소개

현재 우리나라의 고령화는 급속도로 진행되고 있습니다. 이 프로젝트는 노인들이 겪는 어려움에 초점을 맞추고 있습니다. 우리는 정보격차로 인해 문화활동에 어려움을 겪는다는 문제점을 하나 파악했습니다. 이를 해결하기 위해, 공공데이터와 연계하여 해결할 수 있는 플랫폼을 설계했습니다. 이를 통해 어르신들이 쉽게 문화행사에 대한 정보를 얻고 참여할 수 있습니다.


프로젝트 작동 원리

노인들이 원하는 키워드를 입력하기만 하면 우리 플랫폼은 입력된 키워드를 바탕으로 관련 문화 활동 및 시설을 추천해 줍니다. 혹은 현재 시즌이나 트렌드에 맞춰 키워드와 문화행사를 추천해 줄 수도 있습니다. 축제, 문화행사 등은 공공데이터 API를 통해 수집됩니다.

개인 작업물

저는 개발자, 특히 AI 엔지니어로 해커톤에 참가했습니다. 이번 프로젝트에서 페스티벌 추천 시스템과 키워드 추천 시스템을 개발했습니다. 아래는 제가 작업하는 과정입니다. 이 외에 데이터베이스도 개발했습니다.

  • Festival Recommand System

SBERT(HuggingFace, Paper)는 관련된 문장을 찾는 과정에 쓰이는 Language Model입니다. 우리의 데이터에서 각 축제에는 소개글이 작성되어 있습니다. 해당 데이터를 통해 SBERT은 Cosine Similarity로 입력된 데이터와 축제를 비교할 수 있습니다. 결과적으로 튜닝 없이 SBERT를 사용하여 Festival Recommand System을 적용할 수 있습니다.

from sentence_transformers import SentenceTransformer
import numpy as np

def cos_sim(A, B):
    return np.dot(A, B)/(np.linalg.norm(A)*np.linalg.norm(B))
    
with open('database.pkl', 'rb') as f:
    database = pickle.load(f) # database is a datas with festival informations.
    
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') # SBERT

embedding = model.encode([database['rec'][i]['desc'] for i in range(len(database['rec']))]) # Embedding with datas
inp = model.encode([inp]) # Embedding with input datas
sens = [(i,cos_sim(inp[0],embedding[i])) for i in range(len(database['rec']))] # Calculate  similarity with cosine similarity
sens.sort(key=lambda x:-x[1]) # sort by similarity
  • Keywords Recommand System

위의 과정과 비슷하게 이 업무도 SBERT를 사용합니다. 다만, KeyBERT를 추가로 적용해야 합니다. KeyBERT도 cosine similarity를 이용하여 키워드 유사도를 비교합니다.

from sentence_transformers import SentenceTransformer
from keybert import KeyBERT
import numpy as np

def cos_sim(A, B):
    return np.dot(A, B)/(np.linalg.norm(A)*np.linalg.norm(B))
    
with open('database.pkl', 'rb') as f:
    database = pickle.load(f) # database is a datas with festival informations.
    
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') # SBERT
kw_model = KeyBERT(model)

input_datas = database['inputs']
if len(input_datas) > 100: # setting input datas as 100 recent input datas
    input_datas.pop(0)
input_datas.append(inp)
    
keywordData = ""
for i in input_datas:
    keywordData += " " + i
keywords = kw_model.extract_keywords(keywordData, keyphrase_ngram_range=(1, 1), stop_words=None, top_n=6) # calculate 6 related keywords

기대 효과

고령화 사회에서 우리의 플렛폼은 노인들의 문화 생활 참여를 증진시킬 수 있습니다. 문화생활의 증진은 곧 건강한 삶과 직결됩니다. 노인뿐만이 아니라, 다양한 사람들이 문화 생활 참여 기회를 얻으리라 기대합니다.


피드백

  • AI 경량화가 실패했습니다.
  • Python 모델은 실제 서비스 활용에 어렵습니다.
  • 유사한 서비스가 존재합니다.