huggingfaceの実装でベースBERTモデルのバニラ構成を使用すると、長さ2のタプルが得られます。
import torch
import transformers
from transformers import AutoModel,AutoTokenizer
bert_name="bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(bert_name)
BERT = AutoModel.from_pretrained(bert_name)
e=tokenizer.encode('I am hoping for the best', add_special_tokens=True)
q=BERT(torch.tensor([e]))
print (len(q)) #Output: 2
最初の要素は、私が受け取ることを期待しているものです。つまり、各入力トークンの768次元の埋め込みです。
print (e) #Output : [101, 1045, 2572, 5327, 2005, 1996, 2190, 102]
print (q[0].shape) #Output : torch.Size([1, 8, 768])
しかし、タプルの2番目の要素は何ですか?
print (q[1].shape) # torch.Size([1, 768])
各トークンのエンコーディングと同じサイズです。しかし、それは何ですか?
エンコードされたテキスト全体を分類するための表現である[CLS]トークンのコピーでしょうか。
確認しよう。
a= q[0][:,0,:]
b=q[1]
print (torch.eq(a,b)) #Output : Tensor([[False, False, False, .... False]])
いいえ!
(何らかの理由で)最後のトークンの埋め込みのコピーはどうですか?
c= q[0][:,-1,:]
b=q[1]
print (torch.eq(a,c)) #Output : Tensor([[False, False, False, .... False]])
だから、そうではありません。
ドキュメントでは、を変更するとconfig
タプル要素(非表示状態など)が増える可能性があると説明していますが、デフォルト構成で出力されるこの「不可思議な」タプル要素の説明は見つかりませんでした。
それは何であり、その使用法は何ですか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加