Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/update snippet title #14

Open
wants to merge 24 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 17 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,33 @@
# 推薦システム実践入門
# 추천 시스템 입문

---

<img src="cover.jpg" width="50%">
<img src="./cover.jpg" width="50%">

---

本リポジトリはオライリー・ジャパン発行書籍『[推薦システム実践入門](https://www.oreilly.co.jp/books/9784873119663/)』のサポートサイトです。
이 저장소는 한빛미디어에서 발행한 [추천 시스템 입문(Recommender Ssystem)]()의 샘플 코드를 제공하기 위한 저장소입니다.

## 샘플 코드에 관하여

## サンプルコード
이 책은 독자의 업무를 돕기 위해 쓰여진 책이며 책에서 제공하는 코드의 일부를 사용해 프로그래밍에 활용해도 좋습니다.

本書の目的は、読者の仕事を助けることであり、一般に本書に掲載しているコードは読者のプログラムやドキュメントに使用してかまいません。コードの大部分を転載する場合を除き、我々に許可を求める必要はありません。たとえば、本書のコードの一部を使用するプログラムを作成するために許可は必要ありません。本書のコード例を販売、配布する場合には、許可が必要です。
블로그에 책으로 공부하신 과정을 남기실 수 있으며 예제도 쓰셔도 됩니다.
다만 저작권 이슈가 있을 수 있으니 요약의 경우 책 내용의 30% 이상이 넘지 않도록 부탁드립니다(비공개 포스팅은 제약이 없습니다).

本書や本書のコード例を引用して質問などに答える場合、許可は必要ありません。本書のコード例のかなりの部分を製品マニュアルに転載するような場合には、許可が必要です。
더불어 <추천 시스템 입문> 도서의 내용을 정리했다는 내용과 함께 출처(책 제목, 한빛미디어 홈페이지 도서 소개 페이지, 표지 이미지)를 표기해 주시면 감사하겠습니다.

出典を明記することを求めたりはしませんが、していただけるとありがたいです。出典には、通常、タイトル、著者、出版社、ISBNを入れてください。たとえば、「風間正弘、飯塚洸二郎、松村優也著『推薦システム実践入門』(オライリー・ジャパン、ISBN978-4-87311-966-3)」のようになります。
### 파일의 구성

### ファイル構成
|파일명|설명|
|:---|:---|
|`chapter5`|5장에서 사용하는 코드와 데이터[[설명](./chapter5/README.md)]|
|`chapter7`|7장에서 사용하는 코드|

|フォルダ名 |説明 |
|:-- |:-- |
|chapter5 |5章で使用するコードやデータ |
|chapter7 |7章で使用するコード |
코드 또는 데이터에 관한 설명은 책 본문을 참조하기 바랍니다.

コードやデータの解説は本書籍をご覧ください。
## 정오표

## 正誤表
정보표는 아래 URL에서 제공됩니다.

まだありません。誤植など間違いを見つけた方は、japan@oreilly.co.jpまでお知らせください。
[https://www.hanbit.co.kr/store/books/look.php?p_code=B7471666713](https://www.hanbit.co.kr/store/books/look.php?p_code=B7471666713)
129 changes: 82 additions & 47 deletions chapter5/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
# 5章 推薦アルゴリズムの詳細
書籍の第5章では、各種推薦アルゴリズムを紹介しました。
そこで紹介した各種アルゴリズムをjupyter notebookで実行する方法を説明します。
# 5장 추천 알고리즘 상세

ご自身のPCで実行する方法と、Google Colabのnotebookで実行する方法があります。
環境構築をせずに手っ取り早くアルゴリズムをお試ししたい方は、Google Colabをご利用ください。
ご自身のPCで、環境構築する場合は、poetryを利用して構築する方法と、Dockerを利用して構築する方法の2通りを紹介しますので、ご参考ください。
이 책의 5장에서는 각종 추천 알고리즘을 소개합니다. 5장에서 소개한 각종 알고리즘을 jupyter notebook으로 실행하는 방법을 설명합니다.

로컬 PC에서 실행하는 방법과 Google Colab의 notebook에서 실행하는 방법이 있습니다. 별도의 환경을 구축하지 않고 빠르게 알고리즘을 실행하고 싶다면 Google Colab을 사용하기 바랍니다. 로컬 PC에서 환경을 구축할 때는 `poetry`를 사용하는 방법과 도커(Docker)를 사용하는 방법을 설명했으므로 참고하기 바랍니다.

## フォルダ構成
## 폴더 구성
```
chapter5
├─── src
Expand All @@ -28,99 +25,137 @@ chapter5
├── BPR.ipynb
└── etc...
```
`chapter5`フォルダ配下には、`src`, `notebook`, `util`,`colab`の4つのフォルダがあります。

`src`, `notebook`, `util`は、統一モジュールを利用して、アルゴリズムを実行するコードが格納されています。`src`には、`base_recommender.py`のクラス設計に沿って、各種アルゴリズムが実装されています。`util`には、データの読み込みや評価の統一モジュールが実装されています。`notebook`には、`src`で実装したアルゴリズムを利用して、アルゴリズムの動作確認をするコードが記述されています。一部のnotebookには、アルゴリズムのパラメーターを変えて、予測精度の変化を確認しているものもありますので、ご参考ください。
`chapter5` 폴더 아래에는 `src`, `notebook`, `util`,`colab`라는 4개의 폴더가 있습니다.

`colab`には、Google Colabで動くnotebookが格納されています。
書籍の中では、データの読み込みや評価をするのに統一モジュールを利用したり、各種推薦アルゴリズムをクラス設計したりしていました。統一フォーマットがあることで、推薦アルゴリズムをシステムに組み込むときに便利です。しかし、初学者にとっては、とっつきにくいところもあります。
そこで、統一モジュールを利用せずに、1枚のnotebookにデータの読み込みとアルゴリズムのコードを記述し、その中だけで完結するnotebookを用意しました。notebook内では、各種ステップごとに、データを表示するようにしてますので、推薦アルゴリズムの理解の手助けになるかと思います。
`src`, `notebook`, `util`은 공통의 모듈을 사용해서 알고리즘을 실행하는 코드가 저장되어 있습니다. `src`에는 `base_recommender.py` 클래스 설계에 맞춰 각종 알고리즘이 구현되어 있습니다. `util`에는 데이터 읽기와 평가 공통 모듈이 구현되어 있습니다. `notebook`에는 `src`에 구현한 알고리즘을 사용해서, 알고리즘의 동작을 확인하는 코드가 기술되어 있습니다. 일부 notebook에는 알고리즘의 파라미터를 바꾸어, 예측 정확도의 변화를 확인할 수 있도록 되어 있으므로 참고하기 바랍니다.

## Google Colabで動かす
`chapter5/colab`というフォルダに入っています。
github上から、notebookを開くと、Colabへのリンクが表示されるので、それをクリックするとcolab上で実行することができます。(Colabではなく、ご自身のPCで実行も可能です。その際には、ご自身のPCで環境構築する必要があります。)
まずは、`Association.ipynb`や`Item2vec.ipynb`などを見ていただくと、レコメンドアルゴリズムのイメージが掴みやすいです。
`colab`에는 Google Colab에서 동작하는 notebook이 저장되어 있습니다. 책에서는 데이터 읽기 또는 평가를 할 때 공통 모듈을 사용하거나, 각종 추천 알고리즘을 클래스로 설계했습니다. 공통 포맷을 사용하면 추천 알고리즘을 시스템에 조합할 때 편리합니다. 하지만 초보자에게는 다소 어려운 부분도 있습니다. 그래서 공통 모듈을 사용하지 않고 하나의 notebook에 데이터 읽기와 알고리즘 코드를 기술해, 그 자체로 완결되도록 구성했습니다. notebook 안에서는 각 단계 별로 데이터를 표시하도록 했으므로, 추천 알고리즘을 이해하는 데 도움이 될 것입니다.

## Google Colab에서 동작시키기

`chapter5/colab` 폴더에 들어있습니다. github에서 notebook을 열면 Colab 링크가 표시됩니다. 해당 링크를 클릭하면 colab 상에서 실행할 수 있습니다.(Colab이 아닌 로컬 PC에서도 실행할 수 있습니다. 이 때는 로컬 PC에 환경을 구축해야 합니다.) 먼저 `Association.ipynb`, `Item2vec.ipynb` 등을 보면 추천 알고리즘에 관한 이미지를 잡기 쉬울 것입니다.

## 5장 샘플 파일 설명(장/절 순)

5장의 `colab`, `notebook` 디렉터리 안의 노트북(`.ipynb`) 파일은 다음과 같이 구성되어 있습니다.

|파일명|분석/알고리즘|관련 장/절|관련 페이지|
|:--|:--|:--|:--|
|`data_download.ipynb`|MovieLens 데이터셋 다운로드|5.2|p.103|
|`Random.ipynb`|무작위 추천<sup>Random Recommendation</sup>|5.3|p.118|
|`Popularity.ipynb`|인기도순 추천|5.4|p.120|
|`Association.ipynb`|연관 규칙(어소시에이션 분석) - Apriori 알고리즘|5.5|p.127|
|`UMCF.ipynb`|사용자-사용자 메모리 기반 방법 협조 필터링<sup>User-User Memory Based Collaborative Filtering, UMCF</sup>|5.6|p.131|
|`RF.ipynb`|회귀 모델, 랜덤 포레스트<sup>Random Forest, RF</sup>|5.7|p.137|
|`SVD.ipynb`|특잇값 분해<sup>Singular Value Decomposition, SVD</sup>|5.8.2|p.144|
|`NMF.ipynb`|비음수 행렬 분해<sup>Non-negative Matrix Factorization, NMF</sup>|5.8.3|p.148|
|`MF.ipynb`|행렬 분해<sup>Matrix Factorization, MF</sup>|5.8.4|p.150|
|`IMF.ipynb`|암묵적 행렬 분해<sup>Implicit Matrix Factorization, IMF</sup>|5.8.5|p.154|
|`BPR.ipynb`|개인화된 랭킹 문제<sup>Bayesian Personalized Ranking, BPR</sup>|5.8.6|p.158|
|`FM.ipynb`|Factorization Machines, FM|5.8.7|p.160|
|`LDA_content.ipynb`|잠재 디리클레 할당<sup>Latent Dirichlet Allocation, LDA</sup>|5.9.1|p.165|
|`LDA_collaboration.ipynb`|LDA를 행동 데이터에 적용|5.9.3|p.169|
|`Word2vec.ipynb`|`word2vec`|5.9.5|p.172|
|`Item2vec.ipynb`|`word2vec`을 사용한 협조 필터링 추천(`item2vec`)|5.9.6|p.176|


## 로컬 PC에서 환경 구축하기

### 데이터 다운로드

알고리즘 학습에 사용하는 MovieLens 데이터를 `https://files.grouplens.org/datasets/movielens/ml-10m.zip`에서 다운로드한 뒤, 압축을 풀어서 `chapter5/data`에 저장합니다. 또는 다음 코드를 실행해서 다운로드한 뒤, 압축을 풉니다.

## ご自身のPCで環境構築
### データのダウンロード
アルゴリズムの学習に使用するMovielensのデータを`https://files.grouplens.org/datasets/movielens/ml-10m.zip`から手動でダウンロードして、解凍したものを`chapter5/data`に格納してください。
または、下記のコードでダウンロードして解凍ください。
```
# MovieLensのデータセットをdataディレクトリにダウンロードして展開
# MovieLens 데이터셋을 data 디렉터리에 다운로드한 뒤, 압축을 푼다
$ wget -nc --no-check-certificate https://files.grouplens.org/datasets/movielens/ml-10m.zip -P chapter5/data
$ unzip -n chapter5/data/ml-10m.zip -d chapter5/data
```

### Poetryを利用した環境構築
pythonのバージョンは、python3.7.8を利用します。
python3.7.8のインストールには、[pyenv](https://github.com/pyenv/pyenv)などのバージョン管理ツールをご利用ください。
また、今回、[poetry](https://python-poetry.org/)をパッケージ管理ツールとして利用しますので、インストールください。
ご参考に、macOS Montereyに、`pyenv`と`poetry`をインストールした手順を示します。windowsやlinuxの方は、ご自身のOSのコマンドに置き換えいただくか、Dockerを利用した環境構築をご参考ください。
### Poetry를 사용해서 환경 구축하기

python 버전은 python3.7.8을 사용합니다. python3.7.8 설치에는 [pyenv](https://github.com/pyenv/pyenv) 등의 버전 관리 도구를 사용하십시오. 또한, 여기에서는 [poetry](https://python-poetry.org/)를 패키지 관리 도구로 사용하므로 설치하기 바랍니다. 참고로 MacOS Monterey에 `pyenv`와 `poetry`를 설치하는 순서를 설명합니다. Windows나 Linux의 경우에는 여러분이 사용하는 OS에 해당하는 명령어로 변경하거나, 도커를 사용한 환경 구축하기를 참조하기 바랍니다.

#### python3.7.8 설치

pyenv를 설치합니다.

#### python3.7.8のインストール
pyenvをインストールします。
```
$ brew install pyenv
```

pyenvの設定を普段使用しているシェルの設定に書き込みます。
`bash`をお使いの方は、`~/.bash_profile`に、`zsh`をお使いの方は、`~/.zshrc`に以下のコードを追加します。
`pyenv` 설정을 일반적으로 사용하는 셸의 설정에 추가합니다. `bash`를 사용한다면 `~/.bash_profile`, `zsh`를 사용한다면 `~/.zshrc`에 다음 코드를 추가합니다.

```
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
```

シェルの設定を読み込みます。
셸 설정을 읽습니다.

```
# bashの場合
# bash의 경우
$ source ~/.bash_profile

# zshの場合
# zsh의 경우
$ source ~/.zshrc
```
python3.7.8をインストールします。

python3.7.8을 설치합니다.

```
$ pyenv install 3.7.8
```
python3.7.8をローカルで使用するように設定します。

python3.7.8을 로컬에서 사용할 수 있도록 설정합니다

```
$ pyenv local 3.7.8
```

#### poetryとライブラリのインストール
poetryをインストールします。
#### poetry와 라이브러리 설치하기

poetry를 설치합니다.

```
$ brew install poetry
```

ライブラリをインストールします。
라이브러리를 설치합니다.

```
$ poetry install
```
※ macでxlearnライブラリのインストールに失敗し、`Exception: Please install CMake first`と表示された場合は、`xcode-select --install`や`cmake`のインストールをしてから、再度実行します。

※ mac에서 xlearn 라이브러리 설치 시 실패하면서 `Exception: Please install CMake first` 메시지가 표시될 때는, `xcode-select --install`이나 `cmake`를 설치한 뒤 재 실행합니다.

```
$ brew install cmake
```

#### jupyter notebookの起動
jupyter notebookの起動は以下になります。
#### jupyter notebook 기동하기

jupyter notebook을 다음과 같이 기동합니다.

```
$ poetry run jupyter notebook
$ poetry run jupyter lab # jupyter labが好みの方はこちらを
$ poetry run jupyter lab # jupyter lab을 선호한다면 이 명령어를 실행
```

### Dockerを利用した環境構築
dockerを利用したjupyter notebookの起動は以下になります。
(※ macOS: Monterey, docker: 1.29.2, docker-compose: 1.29.2で動作を確認しています。)
### Docker를 사용해 환경 구축하기

docker를 사용한 jupyter notebook은 다음과 같이 기동합니다(※ MacOS: Monterey, docker: 1.29.2, docker-compose: 1.29.2에서 동작을 확인했습니다).

```
$ docker-compose up -d
$ docker-compose exec app poetry run jupyter notebook --allow-root --ip=0.0.0.0
$ docker-compose exec app poetry run jupyter lab --allow-root --ip=0.0.0.0 # jupyter labが好みの方はこちらを
$ docker-compose exec app poetry run jupyter lab --allow-root --ip=0.0.0.0 # jupyter lab을 선호한다면 이 명령어를 실행
```
dockerのプロセスは次のコマンドで停止できます。

docker 프로세스는 다음 명령어로 정지할 수 있습니다.

```
$ docker-compose stop
```
Loading