は私が(要素のタイプ= tf.float32)通常のランダム化300次元のベクトルを追加することができますどのようになど興味がありますたび語で未知語のための新たな埋め込みを追加する方法事前に訓練された語彙に未知のものが遭遇する。私は事前に訓練された手袋ワード埋め込みを使用していますが、いくつかのケースでは、私は未知語に遭遇実現する、と私は、この新しい見つけられた未知語の通常のランダム化ワードベクトルを作成したいです。Tensorflow(トレーニング&プリセットテストのために)
私の現在の設定では、既知の語彙に基づいて単語から整数に変換するのに、tf.contrib.lookup.index_table_from_tensorを使用しています。この関数は、新しいトークンを作成して、語彙のうちのいくつかの事前定義された数のためにそれらをハッシュが、私のembed
は、この新しい未知のハッシュ値のための埋め込みは含まれませんすることができます。私は単にembed
リストの最後にランダム化された埋め込みを追加することができるかどうか確信がもてません。
私はまた、効率的な方法でこれをやりたい、そうtensorflow関数を含む事前に構築されたtensorflowの関数やメソッドは、おそらく最も効率的です。私は、このような文のトークンの終わりとして、事前に知られている特殊なトークンと(インデックス0「」)空の文字列として、未知のデフォルトを定義しますが、これは、様々な異なる未知の単語を学ぶためにその力に制限されています。私は現在、最後の埋め込みステップとしてtf.nn.embedding_lookup()を使用しています。
訓練データに未知の単語ごとに新しいランダム300dベクトルを追加したいと思っています。遭遇する可能性のある未知のトークンについては、あらかじめ作成されたランダムな単語ベクトルも追加したいと思いますテスト中。これを行う最も効率的な方法は何ですか?
def embed_tensor(string_tensor, trainable=True):
"""
Convert List of strings into list of indicies then into 300d vectors
"""
# ordered lists of vocab and corresponding (by index) 300d vector
vocab, embed = load_pretrained_glove()
# Set up tensorflow look up from string word to unique integer
vocab_lookup = tf.contrib.lookup.index_table_from_tensor(
mapping=tf.constant(vocab),
default_value = 0)
string_tensor = vocab_lookup.lookup(string_tensor)
# define the word embedding
embedding_init = tf.Variable(tf.constant(np.asarray(embed),
dtype=tf.float32),
trainable=trainable,
name="embed_init")
# return the word embedded version of the sentence (300d vectors/word)
return tf.nn.embedding_lookup(embedding_init, string_tensor)