大学院の自然言語処理に関する講義の最終課題で作成したオリジナルアプリケーションです. 初めて作成したWebアプリケーションなのでいろいろ修正ポイントなどがありますが,現状動くものをアップロードしています.
- フロント:HTML,CSS(+ Bootstrap4),Javascript(+ jQuery)
- サーバサイド:Python3 (+ Flask)
- Word2Vecの学習 : Gensim
実行に必要なPythonのモジュールなどはrequirements.txtにまとめていますので,参照していただければ幸いです.モジュールなどのインストールが終わった方は実行手順に従って実行してください.
Dockerコンテナ上で実行できるようにDockerfileとdocker-compose.ymlも同時にアップロードしています.
dockerやdocker-composeのインストールに関してはGet Dockerを参照ください.MacOSの場合はDocker Desktop on Mac
を入れた段階でdocker-composeも同時に入ります.Linuxの方は追加でインストールが必要かと思いますので,Install Docker Composeを参考にインストールしてください.
※ docker-composeを使わずにDockerfileをビルドして出来たイメージを実行していただいても構いません.その場合,実行時にvolume($PWD/app:/usr/src/app)の指定とポートの指定(自ポート:8888)を忘れずにしてください.
word2vec_game
ディレクトリ内で以下のコマンドを叩いていただけるとコンテナ上へ入ることができます.
また,コンテナ内での操作はローカル環境と同じになりますので,詳細は実行手順に従ってください.
$ docker-compose build
$ docker-compose up -d
$ docker-compose exec w2v_app /bin/bash
- python webserver.py でサーバ起動
- localhost:8888に接続
また,実際に実行するためにはWord2Vecのモデルが必要です.こちらはGoogleドライブ上にアップロードしていますので,詳細は/word2vec_game/app/data
のREADME.md
を見ていただけると幸いです.
このアプリケーションは,Word2Vecの特徴である「単語間の加減算ができる」という点に着目したゲームです.
具体的にはWord2Vecは単語をベクトル空間上で表現することで単語間の意味関係を表現します.そのため,有名な例として日本 - 東京 + パリ = フランス
といった単語の加減算ができます.
このような特徴を活かして,問題として与えられる2単語の加減算単語を当てましょうというゲームとなっています.
先ほどの例(日本 - 東京 + パリ = フランス
)で説明すると,日本(開始単語)とフランス(目標単語)の2単語がもし与えられた場合,その加減算単語「- 東京」と「+ パリ」
を当てる(考える)といったゲームとなります.
さらに,今回はアプリケーションに対して以下の理由からいくつか制約を与えています.
- ランダムに2単語生成するとその単語間の関係性がほとんど無く,ゲームとして成り立たない
- 開始単語のみランダムに生成し,開始単語に類似した単語を目標単語として選定する
- 類似度の閾値として類似度の高さが6番目から15番目の中から選定する(6番目からとしている理由はルールを参照してください.)
- 全く知らない単語が出てくるとその加減算単語を当てにくく,ゴールへ遠ざかる
- 分からない単語があるとその意味を調べるはずなので,Wikipediaの結果をあらかじめヒントとして与える
- Word2Vecの学習で構築した語彙の中からランダムでスタート単語が決定されます.
- 難易度が高すぎたため,スタート単語との類似度が上位6位から15位までの単語をゴール単語としてランダム選択しています.
- 加減算が行われた段階で現段階の類似度ランキングが表で出力されます.ランダムで出題されるため難しい単語があった場合のためにWikipediaAPIを用いて概要を抜き出したものがボタンを押すことで見ることができます.
- 1タームごとのクリア条件は,計算結果の単語が類似度ランキングで上位5位以内に入ることです.
まとめると,クリア条件は10手以内に開始単語に加減算を行い,目標単語の類似度順位が上位5位以内に入ることです.