Tôi tò mò làm thế nào tôi có thể thêm một vector kích thước ngẫu nhiên 300 bình thường (các yếu tố type = tf.float32) bất cứ khi nào một từ không biết đến từ vựng được đào tạo trước. Tôi đang sử dụng các bản nhúng từ GloVe đã được đào tạo trước, nhưng trong một số trường hợp, tôi nhận ra tôi gặp phải những từ chưa biết, và tôi muốn tạo một vectơ từ ngẫu nhiên bình thường cho từ mới chưa được tìm thấy này.Làm thế nào để thêm nhúng mới cho các từ chưa biết trong Tensorflow (đào tạo & thiết lập trước để thử nghiệm)
Vấn đề là với thiết lập hiện tại của tôi, tôi sử dụng tf.contrib.lookup.index_table_from_tensor để chuyển đổi từ từ thành số nguyên dựa trên từ vựng đã biết. Hàm này có thể tạo mã thông báo mới và băm chúng cho một số từ được xác định trước trong số các từ vựng, nhưng embed
của tôi sẽ không chứa nhúng cho giá trị băm chưa biết mới này. Tôi không chắc chắn liệu tôi có thể chỉ thêm một đoạn nhúng ngẫu nhiên vào cuối danh sách embed
hay không.
Tôi cũng muốn thực hiện điều này một cách hiệu quả, vì vậy chức năng lưu lượng hoặc phương pháp tensorflow được xây dựng sẵn liên quan đến chức năng tensorflow có lẽ sẽ hiệu quả nhất. Tôi định nghĩa các thẻ đặc biệt đã biết trước như một mã thông báo kết thúc và mặc định là chuỗi trống ("" ở chỉ mục 0), nhưng điều này bị giới hạn về sức mạnh của nó để tìm hiểu các từ không xác định khác nhau. Tôi hiện đang sử dụng tf.nn.embedding_lookup() làm bước nhúng cuối cùng.
Tôi muốn có thể thêm các vectơ 300d ngẫu nhiên mới cho mỗi từ không xác định trong dữ liệu đào tạo và tôi cũng muốn thêm các vectơ từ ngẫu nhiên được tạo sẵn cho bất kỳ mã thông báo không xác định nào không được thấy trong đào tạo. trong quá trình thử nghiệm. Cách hiệu quả nhất để làm điều này là gì?
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)