Skip to content

Commit cd2605d

Browse files
committed
AI readme 수정
1 parent 0ecd4b8 commit cd2605d

1 file changed

Lines changed: 82 additions & 13 deletions

File tree

AI/readme.md

Lines changed: 82 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,19 @@ recommendation 경로는 github 상에서 AI 경로에 해당합니다.
123123
## 설정
124124
개발 환경에 맞추어 경로, 파일명 변수를 변경해주셔야 합니다.
125125

126+
개발환경에 맞추어 수정해야 하는 부분은 ```# 환경에 맞게 수정``` 이라는 주석으로 표기하였습니다. 아래 예시를 참고해주시기 바랍니다.
127+
주석에 있는 예시는 서버와 연동하기 전, C드라이브에서 작업했던 환경입니다.
128+
```buildoutcfg
129+
# wordcloud_maker.py 일부..
130+
def exe_img(user_id):
131+
file_path = '/var/www/python_flask/main/recommendation/' # 환경에 맞게 file_path 수정. ex) file_path = 'C:/Users/admin/Documents/handylib/'
132+
save_path = '/var/www/python_flask/main/static/img/' # 환경에 맞게 save_path 수정. ex) save_path = 'C:/Users/admin/Documents/handylib/img/'
133+
users_file_name = "API_test_users.csv" # 환경에 맞게 file_name 수정. ex) users_file_name = '1unit_users.csv'
134+
books_file_name = "API_test_books.csv" # 환경에 맞게 file_name 수정. ex) books_file_name = '2unit_books.csv'
135+
font_path = "/var/www/python_flask/main/recommendation/NanumFontSetup_TTF_BARUNPEN/NanumBarunpenR.ttf" # 환경에 맞게 path 수정. ex) font_path = 'C:/Users/admin/Documents/handylib/NanumBarunpenR.ttf'
136+
make_wordcloud(file_path, save_path, font_path, users_file_name, books_file_name, user_id)
137+
```
138+
126139
file_path는 recommendation에 해당하는 경로를 의미합니다.
127140
책, 사용자 정보를 담은 파일, 추천리스트와 취향분석 이미지를 생성하는 코드가 저장된 경로를 적어주시면 됩니다.
128141
```buildoutcfg
@@ -132,23 +145,79 @@ file_path = 'C:/Users/admin/Documents/osam_ai/book_dataset/'
132145
# 서버 venv에서 실행할 경우
133146
file_path = '/var/www/python_flask/recommendation/'
134147
```
135-
github로 공유하는 파일 외에 별도로 파일을 만들어 사용하고 싶다면, 파일명 변수도 수정해야 합니다.
136-
```
137-
user_file_name = 'API_test_users.csv'
148+
users_file_name과 books_file_name은 사용자 정보와 책 정보가 담긴 .csv 형식 파일의 이름을 적어주시면 됩니다.
149+
<a href="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)의 <a href="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를 통해 취향정보 이미지 생성
183+
user_data='https://www.projectlib.tk/image/{}.png'.format(user_id)
138184
```
139185

140-
# Contributing
141-
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+
다음 단계에 따라 이 프로젝트의 발전에 기여하실 수 있습니다!
142211

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 열기
148217

149-
# License
150-
Distributed under the MIT License. See LICENSE.txt<TODO:add link> for more information.
218+
# 7. License
219+
MIT License에 따라 배포되고 있습니다. <a href="https://github.com/osamhack2021/AI_APP_handylib_devlib/blob/main/LICENSE">LICENSE.txt</a>를 통해 더 자세한 license 정보를 확인하실 수 있습니다.
151220

152221

153-
# Contact
222+
# 8. Contact
154223
김승하(k2river) kstream35@gmail.com

0 commit comments

Comments
 (0)