-
Notifications
You must be signed in to change notification settings - Fork 0
/
acyn_발표.txt
94 lines (94 loc) · 6.94 KB
/
acyn_발표.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
prezi url : https://prezi.com/view/qjvxcbToUDDBtGhJszJk/
[1]
발표 시작할게요!
안녕하세요.
All contents you need, 줄여서 ACYN 프로젝트의 발표를 맡은 박지현입니다.
[2]
ACYN, 잘 감이 안오시죠?
저희는 주어진 주제가 아닌 자율 주제로 진행을 했는데요,
간단하게 말하면 저희 서비스는 사용자가 원하는 콘텐츠를 추천해주는 서비스입니다.
넷플릭스나, 네이버 웹툰에서 이미 이걸 제공하고 있는데 이게 왜 필요해? 라고 생각하신 분들 있으실 거에요.
[3]
하지만 저희 프로젝트는 조금 다른 측면에서 접근했습니다.
[4]
다들 한 번씩 어떤 것에 '꽃혀'본 적 있으신가요? 고양이라던가, 아니면 하이틴이라던가 하는 것 말이에요,
[5]
근데
[6]
우리가 꽃힌 것에 대한 컨텐츠를 찾아보려면 굉장히 귀찮습니다.
유튜브 가서 검색해보고, 관련 웹툰 있는지도 보고, 이런 것들, 사실 상당히 귀찮습니다.
그래서 어떤 분들은 지식인에 아예 올리시기도 하죠
~~ 관련 영화, 웹툰 추천해주세요 하고 내공 빵빵하게요ㅎㅎ
분명 여러 플랫폼에서 추천 시스템을 운영하는데 왜 이런 일이 지금까지도 꾸준히 일어나고 있는걸까요?
[7]
저는 그 해답이 콘텐츠 중심적인 플랫폼들이기에 생겼다고 생각했어요,
다들 자신의 플랫폼 내에서 존재하는 작품을 추천하기 바쁘기에
유저 중심적인 서비스는 부재합니다.
내가 '학교' 관련한 컨텐츠를 보고 싶으면 힘들게 발품 팔아서 하나하나 플랫폼을 돌며 찾아야하는 실정이죠.
뿐만 아니라 해당 플랫폼 내에서도 장르, 제목 등으로 분류하는 게 일반적이어서 사용자가 찾는 걸 정확히 찾는 것은 어렵습니다.
예를 들어 학교 관련 웹툰을 보고 싶은데 네이버 웹툰인 '인생존망'은 제목에 학교가 들어있지 않아 줄거리까지 보지 않으면 학교 관련 컨텐츠인지 확인하기 어렵죠.
[8]
게다가 요즘, 얼마나 집에만 있습니까?
심심해 죽겠잖아요,
오늘 나온 웹툰도 다 봤고, 유튜브 추천영상은 이제 하도 봐서 추천 영상들도 다 본거고,
[9]
그래서 저는 이 많은 시간들로 사람들이 놀 거리를 '찾아'다니는 것을 보며
자신이 원하는 단어 하나만 입력하면 관련된 콘텐츠를 플랫폼에 상관없이 모두 보여주는
[10]
말 그대로 All Contents You Need 서비스를 기획하게 되었습니다.
저희는 일단 프로토를 만든다는 느낌으로 넷플릭스와
여기까지 해서 혹시 질문 있으실까요? 채팅창에 질문 부탁드립니다! 실시간으로 보고있어요ㅎㅎ
[11]
없으신가요?? 네 그럼 진행할게요.
사실 말은 좋은데 어떻게 구현했는지가 더 중요하죠.
저희는 시간적, 그리고 물리적 한계로 정말 코어 기능만을 구현해서 UI, UX부분은 아직 손대지 못했습니다.
코어 기능에는 크게 크롤링과 모델링이 있는데요,
[12]
크롤링은 크게 네이버 웹툰, 다음 웹툰, 네이버 웹소설, 넷플릭스 이렇게 4개를 진행했었는데 다른 것이 js로 막아져 있어서 네트워크 단에서 가져온 반면, 네이버 웹툰은 html로 바로 접근할 수 있어서 네이버 웹툰 크롤링 부분만 설명하겠습니다.
[13]
웹 크롤링 시간에 배웠던 것과 아주 동일하게 이뤄졌고, 7번에서 보시다 시피, 각 웹툰의 고유 id, 연재 요일, 이름을 긁어왔습니다.
[14]
이후 그것을 가지고
[15]
웹툰 상세 페이지에 접근하여 웹툰 내에 있는 소개 문구를 긁어왔습니다. 소개 문구를 긁어온 동시에 그 안에 든 html을 없애는 전처리를 거쳤고
11번에서 보듯 웹툰 이름, 소개문, url을 하나의 dictionary로 묶어서 12번처럼 csv 파일로 만들었습니다.
[16]
시간 관계상 크롤링은 이정도에서 마치고
[17]
모델링 부분을 보면
[18]
다음과 같이 여러 부분으로 나눠져있는데 이것도 시간 관계상 주요한 부분만 짚고 넘어가겠습니다.
[19]
우선 컨텐츠 이름이 대부분 한글이었기에 konply모듈을 사용했고,
[21]
각 csv에서 콘텐츠를 가져온 뒤 이를 dataframe으로 만들었는데 주목할 점은 제일 위쪽에 네이버 웹툰 가져오기 부분을 보면 dataframe을 만들 때 intro부분에 원래는 웹툰 소개만 들어있었는데 좀 더 정확한 처리를 위해 제목 + 웹툰 소개를 한번에 intro로 만들었습니다.
이를 통해 이름에 컨텐츠의 아이덴티티가 나타나있는 경우, 나타나있지 않고 소개에만 나타나있는 경우 모두 가져올 수 있게 됩니다.
[23]
그 후 intro에서 stopword를 제거해주고 토큰화한 것으로 intro를 바꿔줍니다.
메모리 공간을 최소화하기 위해 따로 토큰화한 column을 만들지 않고 기존 column에 덮어씌우는 방법을 택했습니다.
[27]
그 후 사용자의 입력을 받고
[29]
아까 토큰화해놓았던 각 플랫폼의 intro들과 입력에 공통 토큰이 있으면 찾는 방식으로 진행하였습니다.
[33]
결과적으로 맨 위에 '학교'라는 단어를 입력을 치면 네이버 웹툰, 다음 웹툰, 네이버 웹소설, 넷플릭스의 관련된 컨텐츠와 url이 출력되게 하였습니다.
(함께 한 번 직접 보시겠습니다. -> 시연)
[35]
이 과정을 저흰 정말 철저한 팀워크로 수행하였습니다.
[36]
경지님, 승구님 그리고 저 3명이서 git과 sourcetree를 이용해 작업했는데요,
[37]
오늘 최주원 강사님이 말씀하셨던 그대로 git에 branch를 만들어 진행하였고,
경지님, 승구님이 commit을 하시면 제가 소스를 검토해서 master에 merge하는 체계적인 방식으로 진행했습니다.
[39]
그 과정에서 소스트리를 쓰신 분도 있었습니다.
[42]
네, 그렇게 저희 프로젝트는 진행되었습니다.
짧은 시간에 프로젝트를 수행하다보니 조금 아쉬운 점들도 있었는데요,
사용자 중심적인 서비스이기에 사용자에 맞는 UI, web을 제공하고 싶어서 django를 연동할까 생각도 해봤지만,
토큰화할 때 썼던 konply 모듈을 깔 수가 없어 그냥 colab으로 진행한 점이 조금 아쉬웠습니다.
또 저희 서비스의 목표에 맞게 더 많은 플랫폼에서 정보를 가져왔으면 더 좋았을 거 같다는 생각을 했습니다.
마지막으로 단지 토큰의 유무만을 판단하는 것이 아닌각 토큰들을 임베딩하여 벡터 공간 안에서 단어의 의미의 유사성까지 평가하여 추천했다면 더 깔끔한 서비스가 될 수 있었을 거 같은데 조금 아쉬움이 남습니다.
[43]
하지만 저희 팀은 acyn을 만들며 진정한 '협업'을 느끼며 웹과 자연어의 관계를 지어가는 과정을 통해 많은 것을 배울 수 있었습니다.
감사합니다.