5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

前提

・言語:Python3
・ライブラリ:transformers

実装

コードはここ

###1. ライブラリインポート

import transformers
import torch

###2. 文字数の最大値を決める
モデルに入力する文字列は、同じ長さにならないことがほとんどです。一方で、モデルでこの文字列データでテンソル計算をするためには長さを同じにする必要があります。なので、最大値を決めて、その長さに達しない物にはパッディング文字でその長さまで埋めていきます。(次節)

MAX_LENGTH = 192

###4. 文字をIDに置き換える&Special Tokenを付加する
説明はここで。

tokenizer = transformers.AutoTokenizer.from_pretrained("roberta-base")
text = "This is a pen."
text2 = "I am a man"

ids = tokenizer.encode(text)
ids2 = tokenizer.encode(text2)

token_ids = tokenizer.build_inputs_with_special_tokens(ids, ids2)

###3. パディング&Attention Maskの作成
パティングは前節で説明した通りです。
Attention Maskはどこまで有効な文字で、どこからがパディングなのかモデルに知らせるためのものです。有効な文字では「1」、パディング文字では「0」になります。

#Attention Mask
mask = [1] * len(token_ids)

#Padding
padding_length = MAX_LENGTH - len(token_ids)
if padding_length > 0:
    token_ids = token_ids + ([1] * padding_length)
    mask = mask + ([0] * padding_length)

###4. モデルの生成
「roberta-base」を違うモデル名にすることで、そのモデルを生成することができます。他のモデルはここ

model = transformers.AutoModel.from_pretrained("roberta-base")

###5. モデルで文字列を特徴量に変換
ここまで入力した文字列をIDにするところまでしました。list型なのでtorch.tensor型にしてあげます。
モデルに入力すると出力として、(1)BertLayerの最終層の出力と、(2)その(1)の出力をBertPoolerで処理した値が出力されます。
それぞれ、サイズとしては下記コードの出力結果通りです。

#IDとmaskをmodelに入力できる型(list -> pytorch.tenrsor)に変換
token_ids_tensor = torch.tensor([token_ids], dtype=torch.long)
mask_tensor = torch.tensor([mask], dtype=torch.long)

#変換
out = model(input_ids=token_ids_tensor, attention_mask=mask_tensor)

print(out[0].shape)
#output
#torch.Size([1, 192, 768])
print(out[1].shape)
#output
#torch.Size([1, 768])
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?