Ccmmutty logo
Commutty IT
5 min read

第8章 問題

https://picsum.photos/seed/f1416b3f67a34afd97a9f3280fec80d8/600/800

第8章: ニューラルネット

第6章で取り組んだニュース記事のカテゴリ分類を題材として,ニューラルネットワークでカテゴリ分類モデルを実装する.なお,この章ではPyTorch, TensorFlow, Chainerなどの機械学習プラットフォームを活用せよ.

70. 単語ベクトルの和による特徴量

問題50で構築した学習データ,検証データ,評価データを行列・ベクトルに変換したい.例えば,学習データについて,すべての事例xix_iの特徴ベクトルxix_iを並べた行列XXと,正解ラベルを並べた行列(ベクトル)YYを作成したい.
X=(x1x2xn)Rn×d,Y=(y1y2yn)Nn X=\left(\begin{array}{l} \boldsymbol{x}_{1} \\ \boldsymbol{x}_{2} \\ \cdots \\ \boldsymbol{x}_{n} \end{array}\right) \in \mathbb{R}^{n \times d}, Y=\left(\begin{array}{c} y_{1} \\ y_{2} \\ \cdots \\ y_{n} \end{array}\right) \in \mathbb{N}^{n}
ここで,nnは学習データの事例数であり,xiRdx_i\in \mathbb{R}_dyiNy_i\in \mathbb{N}はそれぞれ,i{1,,n}i \in\{1, \ldots, n\}番目の事例の特徴量ベクトルと正解ラベルを表す. なお,今回は「ビジネス」「科学技術」「エンターテイメント」「健康」の4カテゴリ分類である.N<4\mathbb{N}<4で4未満の自然数(0を含む)を表すことにすれば,任意の事例の正解ラベルyiy_iyiN<4y_i∈\mathbb{N}<4で表現できる. 以降では,ラベルの種類数をLLで表す(今回の分類タスクではL=4L=4である).
ii番目の事例の特徴ベクトルxix_iは,次式で求める.
xi=1Tit=1Tiemb(wi,t) \boldsymbol{x}_{i}=\frac{1}{T_{i}} \sum_{t=1}^{T_{i}} \operatorname{emb}\left(w_{i, t}\right)
ここで,ii番目の事例はTiT_i個の(記事見出しの)単語列(wi,1,wi,2,,wi,Ti)(w_{i,1},w_{i,2},…,w_{i,Ti})から構成され,emb(w)Rdemb(w)∈ℝdは単語wwに対応する単語ベクトル(次元数はdd)である.すなわち,ii番目の事例の記事見出しを,その見出しに含まれる単語のベクトルの平均で表現したものがxix_iである.今回は単語ベクトルとして,問題60でダウンロードしたものを用いればよい.300次元の単語ベクトルを用いたので,d=300d=300である.
ii番目の事例のラベルyiy_iは,次のように定義する.
yi={0 (記事 xi が「ビジネス」カテゴリの場合) 1 (記事 xi が「科学技術」カテゴリの場合) 2 (記事 xi が 「エンターテイメント」カテゴリの場合) 3( 記事 xi が「健康」カテゴリの場合 ) y_{i}= \begin{cases}0 & \text { (記事 } x_{i} \text { が「ビジネス」カテゴリの場合) } \\ 1 & \text { (記事 } x_{i} \text { が「科学技術」カテゴリの場合) } \\ 2 & \text { (記事 } x_{i} \text { が 「エンターテイメント」カテゴリの場合) } \\ 3 & \left(\text { 記事 } x_{i} \text { が「健康」カテゴリの場合 }\right)\end{cases}
なお,カテゴリ名とラベルの番号が一対一で対応付いていれば,上式の通りの対応付けでなくてもよい.
以上の仕様に基づき,以下の行列・ベクトルを作成し,ファイルに保存せよ.
  • 学習データの特徴量行列: XtrainRNt×dX_{train}∈ℝ^{Nt×d}
  • 学習データのラベルベクトル: YtrainNNtY_{train}∈ℕ^{N_t}
  • 検証データの特徴量行列: XvalidRNv×dX_{valid}∈ℝ^{N_v×d}
  • 検証データのラベルベクトル: YvalidNNvY_{valid}∈ℕ^{N_v}
  • 評価データの特徴量行列: XtestRNe×dX_{test}∈ℝ^{N_e×d}
  • 評価データのラベルベクトル: YtestNNeY_{test}∈ℕ^{N_e}
なお,NtNt,NvNv,NeNeはそれぞれ,学習データの事例数,検証データの事例数,評価データの事例数である
python

71. 単層ニューラルネットワークによる予測

問題70で保存した行列を読み込み,学習データについて以下の計算を実行せよ.
y^1=softmax(x1W)Y^=softmax(X[1:4]W) \begin{aligned} &\hat{\boldsymbol{y}}_{1}=\operatorname{softmax}\left(\boldsymbol{x}_{1} W\right) \\ &\hat{Y}=\operatorname{softmax}\left(X_{[1: 4]} W\right) \end{aligned}
ただし,softmaxsoftmaxはソフトマックス関数,X[1:4]R4×dX_{[1:4]}∈ℝ^{4×d}は特徴ベクトルx1x_1,x2x_2,x3x_3,x4x_4を縦に並べた行列である.
X[1:4]=(x1x2x3x4) X_{[1: 4]}=\left(\begin{array}{l} x_{1} \\ x_{2} \\ x_{3} \\ x_{4} \end{array}\right)
行列WRd×LW∈ℝ^{d×L}は単層ニューラルネットワークの重み行列で,ここではランダムな値で初期化すればよい(問題73以降で学習して求める).なお,y^1RL\hat{\boldsymbol{y}}_{1}∈ℝ^Lは未学習の行列WWで事例x1x_1を分類したときに,各カテゴリに属する確率を表すベクトルである. 同様に,y^Rn×L\hat{\boldsymbol{y}}∈ℝ^{n×L}は,学習データの事例x1x_1,x2x_2,x3x_3,x4x_4について,各カテゴリに属する確率を行列として表現している.
python

Discussion

コメントにはログインが必要です。