data2vecでtextをベクトルに変換
data2vecでtextをベクトルに変換したい(試行錯誤)のrobertaの続き
BaseFairseqModel.extract_features
https://fairseq.readthedocs.io/en/latest/models.html#fairseq.models.BaseFairseqModel.extract_features
https://github.com/pytorch/fairseq/blob/11b2830d29aed8043e5011d64e14004347a08b50/fairseq/models/fairseq_model.py#L95-L97
継承関係 RobertaModel(FairseqEncoderModel(BaseFairseqModel))
大元はBaseFairseqModelなのでextract_featuresメソッドを持つ
(examples/data2vec/models 下に定義された Data2VecTextModel はextract_featuresメソッドを持たない)
Data2VecTextModelの定義は何のため?
encodeしてからextract_featuresでベクトルが得られる(examples/roberta/README.md)
data2vec: A General Framework for Self-supervised Learning in Speech, Vision and Language (4) のH=768と一致といえそう(robertaの場合の値と違うのでloadできていそう)
code:python
>> tokens = model.encode('Hello world!')
>> last_layer_features = model.extract_features(tokens)
>> last_layer_features.size()
torch.Size(1, 5, 768)
>> last_layer_features
tensor([[ 0.2390, -0.1045, 0.0369, ..., 0.0352, -0.1205, 0.1279,
-0.0554, -0.1926, -0.2020, ..., -0.0757, 0.0271, 0.0346,
-0.0473, -0.2007, -0.2041, ..., -0.0855, 0.0258, 0.0300,
-0.0514, -0.1949, -0.2023, ..., -0.0825, 0.0246, 0.0342,
0.2113, -0.0523, 0.0418, ..., 0.1675, -0.0271, 0.0340]],
grad_fn=<TransposeBackward0>)
>> tokens2 = model.encode('Hello world')
>> last_layer_features2 = model.extract_features(tokens2)
>> last_layer_features2.size()
torch.Size(1, 4, 768)
>> last_layer_features2
tensor([[ 0.2114, -0.1183, 0.0375, ..., 0.0276, -0.1147, 0.0929,
-0.0650, -0.1639, -0.1985, ..., -0.0938, 0.0556, 0.0081,
-0.0565, -0.1689, -0.1984, ..., -0.1034, 0.0502, 0.0047,
0.0823, 0.0093, -0.0742, ..., 0.1503, 0.0232, -0.0579]],
grad_fn=<TransposeBackward0>)
このベクトル、具体的なタスクではどう使う?
robertaのREADMEではpredictにタスク名と一緒に渡している:roberta.predict('mnli', tokens)
👉 GLUEのQNLIでdata2vecのファインチューニングを試す