このプロジェクトは、機械学習を利用して、テキストデータを処理し、感情分析を行うシステムです。以下のモジュールがあります:
- 与えた文章データの感情を判定する(メイン)(predict_polarity.py)
- 教師データや訓練データおよび感情を判定したい対称データの前処理を行う(preprocess_data.py)
- 前処理されたデータから機械学習によりモデルを作成する(train.py)
- 機械学習により作成された複数のモデルから前処理された検証データを用いて最良のモデルを判定する(validate.py)
- 訓練データと辞書を受け取り、各文についてベクトル化したものとその感情の評価値を返す機能などを持つクラス(my_library/Data_preprocessor.py)
- 感情の特徴量(ベクトル)と評価値と指定したパラメータに応じて、機械学習を行いモデルを作成し、モデルを保存する機能などを持つクラス(my_library/Trainer.py)
- 学習したモデルを検証データで検証し、最良のモデルを保存する機能などを持つクラス(my_library/Validator.py)
- janomeライブラリを利用して文を感情のベクトル化をして返す関数(my_library/count_statistics.py)
- 辞書を読み込む関数(my_library/load_dictionary.py)
- 教師データなどのデータを読み込む関数(my_library/load_input_data.py)
my_project/
── README.md
├── requirements.txt
├── data/
│ ├── data.txt
│ ├── dictionary1.txt
│ ├── dictionary2.txt
│ ├── train.txt
│ ├── validation.txt
│ ├── examples/
│ │ ├── data_preprocessed.pkl
│ │ └── train_preprocessed.pkl
│ └── results/
│ └── data01.txt
├── logs/
├── models/
├── src/
│ ├── predict_polarity.py
│ ├── preprocess_data.py
│ ├── train.py
│ ├── valaidate.py
│ └── my_library/
│ ├── Data_preprocessor.py
│ ├── Trainer.py
│ ├── Validator.py
│ ├── count_statistics.py
│ ├── load_dictionary.py
│ └── load_input_data.py
└── tests/
└── test_~~~~.py
python3、pip3が使えることを確認してください。
data/ディレクトリに以下のファイルを配置してください:
dictionary1.txtdictionary2.txtdata.txt
プロジェクトを独立した環境で実行できるようにするために仮想環境を作成します。これは、homebrewなどでpythonを外部管理している場合や(外部ライブラリのシステム全体へのインストールが禁止されている場合がある)、他のプロジェクトでライブラリをインストールしてたりする場合に(このプロジェクトの環境と衝突しうる)、次の手順で行うpythonのパッケージのインストールのでエラーが生じうるためです。 以下のコマンドを実行して仮想環境を作成します。
$ cd [project root]
$ python3 -m venv computer-programming-emotion-machine-learningつづいて、作成した仮想環境をactivateします。
Linux, Mac
$ source computer-programming-emotion-machine-learning/bin/activateWindows
$ .\computer-programming-emotion-machine-learning\Scripts\activateこれで以下のように表示が変わり、仮想環境が起動しました。
(computer-programming-emotion-machine-learning)$ 以下のコマンドを実行して、必要なPythonパッケージを仮想環境にインストールします:
(~~~)$ pip install -r requirements.txt(~~~)$ cd src以下のコマンドを実行して、データの前処理を行います:
preprocess_data.pyの実行にはかなりの時間がかかるため、それぞれの実行結果として得られるファイルを/data/example/ディレクトリに入れてあります。
この手順をスキップする場合、以下のコマンドによりファイルを複製してください。
$ cp ../data/example/data_preprocessed.pkl ../data/data_preprocessed.pkl
$ cp ../data/example/train_preprocessed.pkl ../data/train_preprocessed.pkl
$ cp ../data/example/validation_preprocessed.pkl ../data/validation_preprocessed.pkl(~~~)$ python3 preprocess_data.py
# プロジェクトルートパスが表示される
/Users/~~~~~~/computer-programming-emotion-machine-learning
# 教師データのsrcディレクトリからの相対パスを入力する
Enter the path for the data file: ../data/train.txt
# 辞書データのsrcディレクトリからの相対パスを入力する
Enter the path for the dictionary file: ../data/dictionary1.txt
# 前処理したデータを保存するsrcディレクトリからの相対パスを入力する
Enter the path to save the preprocessed data: ../data/train_preprocessed.pkl
# 教師データはラベル付きの文章なのでYと入力
Enter if the data is labeled (Y/N):Y
# /data/train_processed.pklが生成される(~~~)$ python3 preprocess_data.py
# プロジェクトルートパスが表示される
/Users/~~~~~~/computer-programming-emotion-machine-learning
# 教師データのsrcディレクトリからの相対パスを入力する
Enter the path for the data file: ../data/validation.txt
# 辞書データのsrcディレクトリからの相対パスを入力する
Enter the path for the dictionary file: ../data/dictionary1.txt
# 前処理したデータを保存するsrcディレクトリからの相対パスを入力する
Enter the path to save the preprocessed data: ../data/validation_preprocessed.pkl
# 検証データはラベル付きの文章なのでYと入力
Enter if the data is labeled (Y/N):Y
# /data/validation_processed.pklが生成される# preprocess_data.pyを実行
(~~~)$ python3 preprocess_data.py
# プロジェクトルートパスが表示される
/Users/~~~~~~/computer-programming-emotion-machine-learning
# 教師データのsrcディレクトリからの相対パスを入力する
Enter the path for the data file: ../data/data.txt
# 辞書データのsrcディレクトリからの相対パスを入力する
Enter the path for the dictionary file: ../data/dictionary1.txt
# 前処理したデータを保存するsrcディレクトリからの相対パスを入力する
Enter the path to save the preprocessed data: ../data/data_preprocessed.pkl
# 検証データはラベルなしの文章なのでNと入力
Enter if the data is labeled (Y/N):N
# /data/data_processed.pklが作成される# train.pyを実行
(~~~)$ python3 train.py
# 前処理した教師データを保存した場所のsrcディレクトリからの相対パスを入力
Enter the path for the preprocessed data:../data/train_preprocessed.pkl
# 機械学習により作成したモデルを保存する場所のsrcディレクトリからの相対パスを入力
Enter the path for the directory to save the models:../models/
# /models/にSVM_0.1.pkl, SVM_1.pkl, SVM_10.pkl, SVM_100.pkl, SVM_1000.pklなどが作成される# validate.pyの実行
(~~~)$ python3 validate.py
# Evaluating SVM_0.1.pkl:
# Accuracy: 0.6440625
# Precision: 0.41887417218543044
# Recall: 0.2430355427473583
# Evaluating SVM_10.pkl:
# Accuracy: 0.6471875
# Precision: 0.4087136929460581
# Recall: 0.18924111431316043
# Evaluating SVM_100.pkl:
# Accuracy: 0.64875
# Precision: 0.4133611691022965
# Recall: 0.19020172910662825
# Evaluating SVM_1000.pkl:
# Accuracy: 0.6465625
# Precision: 0.4089068825910931
# Recall: 0.19404418828049952
# Evaluating SVM_1.pkl:
# Accuracy: 0.64
# Precision: 0.41148325358851673
# Recall: 0.2478386167146974
# The best model is saved as 'best_model.pkl' with accuracy: 0.64875
# /models/best_model.pklが作成される(~~~)$ python3 predict_polarity.py >> ../data/results/data01.txt
# /data/results/data01.txtが作成される
# data01.txtの数字は適宜変えて良い
# 各文について、1がポジティブ、-1がネガティブであるプロジェクトにはユニットテストが含まれています。以下のコマンドを実行してテストを実行できます:
python -m unittest discover -s testsこの`README.md`は、プロジェクトの基本的な情報を提供し、セットアップや使用方法を明確にするためのものです。また、このプロジェクトは未完成です。必要に応じて、プロジェクトの詳細に合わせて修正してください。
現時点ではユニットテストは作成されていませんので、テストのコマンドを実行してもテストされません。