事前にトレーニングされた単語の埋め込みを使用する-不明な/ OOVトークンのベクトルを作成する方法は?

MBT

事前にトレーニングされた埋め込みをモデルに追加したくありませんしかし、語彙外(OOV)トークン応答はないようです。目に見えない単語のベクトルは存在しません。

では、遭遇したOOVトークン処理するために何ができるでしょうか。私にはいくつかのアイデアがありますが、どれも非常に良いとは思えません。

  • このトークンのランダムなベクトルを作成することもできますが、理想的には、既存のモデルのロジック内にベクトルを配置する必要がありますランダムに作成しただけでは、ベクトルが誤って「the」、「for」、「that」などの非常に頻繁な単語に非常に似ている可能性がありますが、これは私の意図ではありません。

  • または、代わりに単純なゼロでベクトルを初期化する必要がありますか?

  • 別のアイデアは、他の既存のベクトルに対してトークンを平均化することです。しかし、どのベクトルを平均すると?すべての上?これも決定的なものではないようです。

  • このベクトルをトレーニングすることも考えました。ただし、トレーニング中に残りの埋め込みをフリーズしたい場合、これはあまり便利ではありません。

(一般的な解決策はありがたいですが、PyTorchがこの問題の便利な解決策をすでに提供している場合に備えて、PyTorchを使用していることを追加したいと思います。)

では、そのようなベクトルを作成するための優れた簡単な戦略は何でしょうか?

ウマングプタ

対処できる方法は複数あります。どちらがうまくいくかについての参考文献を引用することはできないと思います。

訓練不可能なオプション

  1. 埋め込みとしてのランダムベクトル
  2. OOVにはすべてゼロのベクトルを使用できます。
  3. すべての埋め込みベクトルを意味することができます。そうすれば、実際の分布から離れるリスクを回避できます。
  4. また、埋め込みには通常、トレーニング中に学習した「アンク」ベクトルが付属しています。

訓練可能なオプション

OOVの個別の埋め込みベクトルを宣言し、他の埋め込みを固定したままトレーニング可能にすることができます。このためにルックアップを埋め込むforwardメソッドを上書きする必要があるかもしれません。新しいトレーニング可能Variable宣言できます。フォワードパスでは、ルックアップを実行する代わりに、このベクトルをOOVの埋め込みとして使用します。


OPのコメントへの対処:

3つの訓練不可能な方法のどれがよりうまくいくかはわかりませんし、これについていくつかの作業があるかどうかもわかりません。しかし、方法4)はうまく機能するはずです。

訓練可能なオプションについては、以下のように新しい埋め込みレイヤーを作成できます。

class Embeddings_new(torch.nn.Module): 
    def __init__(self, dim, vocab): 
        super().__init__() 
        self.embedding = torch.nn.Embedding(vocab, dim) 
        self.embedding.weight.requires_grad = False
        # vector for oov 
        self.oov = torch.nn.Parameter(data=torch.rand(1,dim)) 
        self.oov_index = -1 
        self.dim = dim 

    def forward(self, arr): 
        N = arr.shape[0] 
        mask =  (arr==self.oov_index).long() 
        mask_ = mask.unsqueeze(dim=1).float() 
        embed =(1-mask_)*self.embedding((1-mask)*arr) + mask_*(self.oov.expand((N,self.dim))) 
        return embed 

使用法:

model = Embeddings_new(10,20000)    
out = model.forward(torch.tensor([-1,-1, 100, 1, 0]))
# dummy loss
loss = torch.sum(a**2)
loss.backward()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ