You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
github로 공유하는 파일 외에 별도로 파일을 만들어 사용하고 싶다면, 파일명 변수도 수정해야 합니다.
136
-
```
137
-
user_file_name = 'API_test_users.csv'
148
+
users_file_name과 books_file_name은 사용자 정보와 책 정보가 담긴 .csv 형식 파일의 이름을 적어주시면 됩니다.
149
+
<ahref="https://github.com/osamhack2021/AI_APP_handylib_devlib/blob/main/LICENSE">example_file</a>의 API_test_users와 API_test_books를 참고하여, column 형식에 맞게 자신만의 사용자, 책 DB를 사용할 수 있습니다.
150
+
151
+
주의사항입니다.
152
+
+ 첫째, 파일의 절대경로를 path에 입력해야 오류를 줄일 수 있습니다.
153
+
+ 둘째, file_name을 입력하는 곳에는 directory를 제외한 이름만 적어야 합니다.
154
+
+ 셋째, file_name에는 확장자를 포함하셔야 오류가 발생하지 않습니다.
155
+
+ 넷째, 현재 프로젝트에서는 사용자가 like를 누른 책 정보를 기반으로 추천리스트와 취향이미지를 생성하였습니다. 다른 데이터를 사용하기를 원한다면 App(BE)의 <ahref="https://github.com/osamhack2021/AI_APP_handylib_devlib/blob/main/App(BE)/main/models/database.py">database.py</a>의 User 객체를 참고하시기 바랍니다.
156
+
157
+
158
+
## 사용법
159
+
test.py에서 함수 호출의 예시를 확인하실 수 있습니다.
160
+
161
+
api에서 request에 대응하는 함수를 호출함으로써 사용할 수 있습니다. 아래 예시는 마이페이지 api를 담당하는 mypage.py의 일부입니다.
162
+
163
+
```buildoutcfg
164
+
@mypage_page.route('/', methods=['GET'])
165
+
def mypage():
166
+
user_id = request.values.get('user_id')
167
+
if user_id:
168
+
user = database.User.objects(user_id=user_id).first()
169
+
if user:
170
+
# borrow_list 불러오기
171
+
borrow_list = []
172
+
for embook in database.Unit.objects(name=user.unit).first().books_list:
173
+
if embook['user_id']==user_id:
174
+
borrow_list.append(embook)
175
+
borrow_lists = read_borrow(borrow_list)
176
+
# recommend_list 불러오기(csv파일을 불러올 예정)
177
+
recommend_list = read_csv(user_id)
178
+
# user_data 불러오기
179
+
from main.recommendation import data_update
180
+
data_update.update() # data_update를 통해 먼저 사용자 정보를 DB에 맞게 최신화
181
+
from main.recommendation import wordcloud_maker
182
+
wordcloud_maker.exe_img(user_id) # 최신화된 사용자 정보를 바탕으로 wordcloud_maker를 통해 취향정보 이미지 생성
Follow the steps below to contribute this project.
186
+
주의사항입니다.
187
+
+ api와 recommeder system 파일의 경로가 다를 경우, api 파일에서 모듈을 import 할 때 경로에 유의하기 바랍니다. ex) ```from main.recommendation import data_update``` 등
188
+
+ wordcloud_maker.py의 exe_img(), update.py의 update(), data_update.py의 update()는 file_path와 save_path 등의 환경변수를 소스코드에서 직접 지정하였으므로, 함수를 호출할 때 path, name을 설정하는 것이 아닌, wordcloud_maker.py, update.py, data_update.py에서 원하는 경로로 수정해주어야 합니다.
189
+
190
+
# 5. 발전방향
191
+
192
+
이 프로젝트의 추천시스템이 사용한 알고리즘은 collaborative filtering 방식 추천 알고리즘 중 하나인 Matrix Factorization입니다.
193
+
194
+
collaborative filtering이란 자신과 비슷한 평점을 매긴 다른 사용자의 평점을 이용해 아직 평점을 매기지 않은 책의 평점을 예측하는 알고리즘이라는 뜻입니다. 예를 들어, A가 'aa'라는 책을 좋아하고, B가 'aa'와 'bb'를 좋아한다면, A와 B는 같은 'aa'를 좋아하므로, 비슷한 흥미도를 가질 것이고, A도 B가 좋아하는 'bb'를 좋아할 것이라고 예측하는 알고리즘입니다.
195
+
196
+
Matrix Factorization은 사용자의 like 유무에 따라 0과 1로 만들어진 사용자 평점 행렬을 분해하여 아직 like를 표기하지 않은 책에 대한 예측 점수를 계산하는 알고리즘을 말합니다.
197
+
198
+
collaborative filtering의 한계는 cold start problem입니다. 신간도서, 혹은 사용자 수가 적은 초기 배포단계에는 책에 대한 사용자의 like(평점) 데이터가 적기 때문에 사용자 간에 좋아하는 책 리스트가 겹치지 않는 상황이 빈번해지고, 결국 추천성능을 떨어뜨립니다.
199
+
200
+
이 문제를 해결하기 위해 같은 카테고리의 책만 읽은 사용자 데이터 dummy_user.csv를 생성하고, data_update.py가 DB의 사용자 정보를 API_test_users.csv에 최신화할 때 dummy_users를 포함시키도록 하였습니다. 이를 통해 사용자 수가 적은 초기 단계에도, 유사한 카테고리를 묶어줄 가상의 사용자 정보가 있어 자신이 좋아요를 누른 책과 유사한 책을 추천 받을 수 있게 하였습니다.
201
+
시간이 흘러 사용자 수가 많아지면 가상의 사용자 정보는 minor 해지고, 자연스럽게 실제 사용자 간의 좋아요에 기반하여 추천이 이루어집니다.
202
+
203
+
이러한 노력에도, 아직 recommender system이 사용하지 못한 meta data가 많습니다.
204
+
책의 카테고리와 저자, 소개글로부터 찾아낼 수 있는 책 사이의 연관성, 사용자의 부대정보나 댓글, 게시판 활동으로부터의 사용자 간 연관성을 아직 활용하지 못하고 있습니다.
205
+
이러한 meta data를 포함시킨다면 추천시스템은 더 우수한, 사용자가 더 만족할만한 추천 결과를 만들 것입니다.
206
+
207
+
AI 파트에서는 추천시스템이 meta data를 활용할 수 있도록 앞으로 발전시킬 예정입니다.
208
+
209
+
# 6. Contributing
210
+
다음 단계에 따라 이 프로젝트의 발전에 기여하실 수 있습니다!
142
211
143
-
Fork the Project
144
-
Create your Branch
145
-
Commit your Changes
146
-
Push to the Branch
147
-
Open a Pull Request
212
+
+ 프로젝트 fork
213
+
+ 개발자님만의 branch 만들기
214
+
+ 코드 수정 후 commit
215
+
+ 개발자님만의 branch에 push
216
+
+Pull Request 열기
148
217
149
-
# License
150
-
Distributed under the MIT License. See LICENSE.txt<TODO:add link> for more information.
218
+
# 7. License
219
+
MIT License에 따라 배포되고 있습니다. <ahref="https://github.com/osamhack2021/AI_APP_handylib_devlib/blob/main/LICENSE">LICENSE.txt</a>를 통해 더 자세한 license 정보를 확인하실 수 있습니다.
0 commit comments