本稿ではword embeddingとしてFastTextを導入してみます。
Pretrained Word Embeddings
学習済のword embeddingによる変換を試してみましょう。 pytorchで公開されているfastTextを使ってみます。 これは単語の分散学習が行われており、"似たような"トークンは"似たような"ベクトルに変換されます。 (ここでいう"似たような"とは同意語であったり、文章中で同時に使われやすい単語だったりを指します。)
「fastText」とは2016年にFacebookが公開した自然言語処理ライブラリです" (引用元: https://service.plan-b.co.jp/blog/tech/14298/)
日本語と英語の両方に対応していたのでfastTextを選択しました。日本語も英語もどちらも300次元へ写像します。
class FastText(nn.models.Model): def __init__(self, language, vocab): super(FastText, self).__init__() self.vocab = vocab self.vectors = torchtext.vocab.FastText(language) self.params = [] self.grads = [] def get_dim(self): return self.vectors.dim def forward(self, indices): """convert token index to embedded vector Args: indices np.array: (batch_size, sentence_length) Returns: embedded_vec np.array: (batch_size, sentence_length, embed_dim) """ batch_size, sentence_length = indices.shape embedded_vec = np.zeros( (batch_size, sentence_length, self.vectors.dim), dtype=np.float16 ) for i in range(batch_size): embedded_vec[i] = self.vectors.get_vecs_by_tokens( self.vocab.lookup_tokens(indices[i]) ) return embedded_vec def backward(self, dout): return dout
コード
まとめ
トークンのベクトル化のさいに word embeddingによりベクトルの次元を下げることで計算時間の短縮に成功しました。 また事前学習済のモデル(fastText)を用いたword embeddingによる学習を行えるようなコーディングを行なっています。
他の記事
- 次の記事 TBA
- 前の記事
- 一覧 Transformer自作 カテゴリーの記事一覧 - サブロウ丸