GloVeによる単語ベクトル、SCDVによる文章ベクトルを活用し、類義語検索や類義文検索を行う。 環境はJupyter Lab、DBはElasticsearchを使用している。
- ホスト環境
| 環境 | バージョン |
|---|---|
| Ubuntu | 18.04 |
| Docker | 19.03.5 |
| Docker Compose | 1.25.0 |
- Dockerイメージ
| 環境 | バージョン |
|---|---|
| Jupyter Lab | jupyter/datascience-notebook |
| Elasticsearch | docker.elastic.co/elasticsearch/elasticsearch:7.5.0 |
| Kibana | docker.elastic.co/kibana/kibana:7.5.0 |
-
Jupyter Lab
- 機械学習用の各種ツールを導入
- Sudachi、Ginzaを導入
- matplitlib用の日本語フォントを導入
-
Elasticsearch
- analysis-sudachi-elasticsearchを導入
-
Dockerをインストールする。
$ sudo apt update $ sudo apt install docker docker-compose -
初期設定を行う。ホスト側で以下を実行する。
必要なディレクトリの作成やツールのダウンロードを行う。
$ ./init.sh -
docker-composeでコンテナを起動する。
JupyterLab、Elasticsearch、Kibanaのコンテナが起動する。
$ sudo docker-compose up
各コンテナへのアクセスは以下の通りである。
| コンテナ | ホストからのアクセス | コンテナ間のアクセス |
|---|---|---|
| Jupyter Lab | http://[ホスト]:8888 | - |
| Kibana | http://[ホスト]:5601 | http://kibana:5601 |
| Elasticsearchコンテナ | http://[ホスト]:9200 | http://elasticsearch:9200 |
各コンテナのデータはホスト側に永続するように設定しており、以下のディレクトリに保存される。
| コンテナ | ホスト側の保存場所 |
|---|---|
| Jupyter Lab | ./jupyter/data/ |
| Elasticsearch | ./elasticsearch/es-data |
基本的にJupyter Lab上での作業となる。
- Jupyter Labコンテナにアクセスする。
- nlp_book.ipynbを開く
- セルの先頭から順番に実行する
主な処理は以下の通り。
- データクローリング
- データの前処理
- Elasticsearchへの登録
- Elasticsearchによる文章のトークナイズ
- GloVeによる単語ベクトルの生成
- SCDVによる文章ベクトルの生成とElasticsearchへの登録
GloVeによる単語ベクトルを使い、類似語を抽出する。
- Similarity.ipynbを開く。
- 最初のセルに類似語を抽出したい単語と、上位何件を取得するか変数に記述する。
- word : 類似語を抽出したい単語
- top_k : 上位何位まで取得するか
- セルを実行する。
トークナイズした単語を使い、LDAトピックモデルによる分類を行う。
- LDA_topic_model.ipynbを開く。
- セルを上から順に実行する。
- LDAトピックモデルの学習
- 学習したトピック毎に特徴的な単語をWordCloudで可視化
- pyLDAvisによるトピックの分布を可視化
GloVeを使用したSCDVによる類似文書検索を行う。Elasticsearchのvectorフィールドを使用したcosineSimilarityによる類似検索の例である。
- Elasticsearch_sim_search.ipyを開く。
- セルを上から順に実行する。