質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

2056閲覧

RNNの wordvec_size について

teefpc

総合スコア111

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

1クリップ

投稿2019/06/24 01:59

編集2019/06/24 01:59

RNNのハイパーパラメータの設定で、
wordvec_size = 100 というのがあり、これは抽出する特異値とベクトル数(Number of singular values and vectors to extract.)
という意味らしいですが何のことですか?

参考URL
https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch02/count_method_big.py

上のURLで使われているscikit-learn
https://scikit-learn.org/stable/modules/generated/sklearn.utils.extmath.randomized_svd.html

RNNでの実装
https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch05/train_custom_loop.py

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらく、wordvec_sizeは隠れ層に与える単語ベクトルの次元を示しており、モデルの構造を決定するために使われます。

自然言語処理におけるRNNは、以下のような構造になっています。

0.単語(形態素)に対するone-hotベクトル(もしくは数字)を作成する
1.one-hotベクトルに重み行列embed_Wをかけて、隠れ層へ与える単語ベクトルを作成する
2.単語ベクトル、1ステップ前の隠れ層の出力より、隠れ層の出力を決定する
※この出力は1ステップ後の隠れ層の入力になる
3.隠れ層の出力より、予測する単語ベクトルを決定する

重みの初期設定についてのコードを以下に示します(コメント部分は自分が追加)。

python

1###SimpleRnnlm 2 3 def __init__(self, vocab_size, wordvec_size, hidden_size): 4 V, D, H = vocab_size, wordvec_size, hidden_size 5 rn = np.random.randn 6 7 # 重みの初期化 8 #単語(one-hotベクトルもしくは数字表現)をベクトル化する行列 9 embed_W = (rn(V, D) / 100).astype('f') 10 11     #隠れ層の出力を決めるための重み行列 12 rnn_Wx = (rn(D, H) / np.sqrt(D)).astype('f')#単語ベクトルに対して 13 rnn_Wh = (rn(H, H) / np.sqrt(H)).astype('f')#1ステップ前の隠れ層の出力に対して 14 rnn_b = np.zeros(H).astype('f')#バイアス 15 #3つの重みを使って計算したベクトルを活性化関数の入力とし、その時の出力が隠れ層の出力になる 16 17     #隠れ層の出力を単語にするための行列 18 affine_W = (rn(H, V) / np.sqrt(H)).astype('f') 19 affine_b = np.zeros(V).astype('f')

deep-learning-from-scratch-2/ch05/simple_rnnlm.py(github)

one-hotベクトルから単語ベクトルへの変換についてわかり易く説明した記事があるので、参考として読んでみてください。記事後半における12がvocab_size,3がwordvec_sizeにあたります。

word2vec(Skip-Gram Model)の仕組みを恐らく日本一簡潔にまとめてみたつもり

その他参考記事:One hot表現を実装してみた

投稿2019/06/25 01:35

amahara_waya

総合スコア1029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teefpc

2019/06/25 02:00

ありがとうございます。wordvec_size は、何かによって決まる数ではなくて、隠れ層のノード数のように、エンジニア側の感覚で決めてしまう数なのですね。当然、単語数が多くなると、wordvec_size も大きくした方がよいのでしょうね。納得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問