はじめに
Word2Vec を知っていますか?(Wikipedia)
単語をベクトル空間内に埋め込む手法で,意味の近い単語が近いベクトルに配置されます. また,単語同士の関係性をベクトルの演算で表現することもできます.
面白い性質をいくつか持つ Word2Vec を利用して,単語当てゲームを作ってみました. こちらから遊べます.
やったこと
語彙
まずは,語彙リストが必要です. 日本語の基礎語彙を集めたい,というところで,現代日本語書き言葉均衡コーパスというデータセットがひとつありますが,営利目的ではなくとも 20 万円がかかってしまいます.
そこで探したところ,Wiktionary:日本語の基本語彙1000 を見つけました. 無料で使えますが,ライセンス CC BY-SA 4.0 には従う必要があります.
まず,このウェブサイトから語彙リストの抽出を行いました.漢字表記があるものは漢字表記で,加えて関連語も取得しました.
名詞,形容詞,形容動詞,動詞 についてを得ました(一部関連語は異なる品詞である場合があります).
単語ベクトル
自前で単語ベクトルを作るのは大変なので,こちらも借りてきました. 今回は chiVe: Sudachi による日本語単語ベクトル を用いました. こちらは Apache License 2.0 に従う必要があります.
圧縮
処理は全てフロントエンドで動くように実装しています. フロントエンドで動作させるために,語彙リストと単語ベクトルのリストを送信する必要があります.
通信量の節約などを鑑みて,単語ベクトルをバイナリに圧縮したものを作成し,クライアントに送信する構成にしました.フロントエンド側には解凍処理を組み込んでいます.
ゲームについて
表示された言葉を選ぶと,正解の言葉にどれくらい近いかの順位が表示されます. 順位をヒントに言葉を選び,正解を当てるゲームです.
まず,36 個の単語が表示されます. この 36 個のうち,どれかが正解の単語です.
どれかの単語をクリックすると,その単語と正解の単語の類似度が 36 単語中何位かが表示されます. なるべく少ない回数で,正解の単語,即ち 1 位の単語を当てるゲームです.
最初に並んでいる36 個の単語は,それなりに類似度が高い単語が選ばれるように設計しています.
終わりに
Word2Vec を利用した,単語当てゲームを作ってみました. こちらから遊べます.
今回のために作成したコードや,Wiktionary から抽出した日本語基礎語彙リストなどはこちらのリポジトリから利用できます.
今回利用した chiVe の他にも Word2Vec のモデルはいくつかありまして,例えば Wikipedia の記事から作られた Wikipedia Entity Vectors があります. こちらには Wikipedia の記事のタイトルのみをまとめたベクトルなどがあり,これを使ってまた別の遊び方ができそうです. また機会があれば試してみます.