【问题标题】:tfidf weighted average of word embeddings with KerasKeras 词嵌入的 tfidf 加权平均值
【发布时间】:2021-01-07 12:32:16
【问题描述】:

我不知道这怎么可能,但我想计算一个句子中词嵌入的加权平均值,例如 tfidf 分数。

就是这样,但只有权重:

averaging a sentence’s word vectors in Keras- Pre-trained Word Embedding

import keras
from keras.layers import Embedding
from keras.models import Sequential
import numpy as np
# Set parameters
vocab_size=1000
max_length=10
# Generate random embedding matrix for sake of illustration
embedding_matrix = np.random.rand(vocab_size,300)

model = Sequential()
model.add(Embedding(vocab_size, 300, weights=[embedding_matrix], 
input_length=max_length, trainable=False))
# Average the output of the Embedding layer over the word dimension
model.add(keras.layers.Lambda(lambda x: keras.backend.mean(x, axis=1)))

model.summary()

如何通过自定义层或 lambda 层获得属于特定单词的正确权重?您需要以某种方式访问​​嵌入层以获取索引,然后查找适当的权重。

或者有没有我看不到的简单方法?

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:
    embeddings = model.layers[0].get_weights()[0] # get embedding layer, shape (vocab, embedding_dim) 
    

    或者,如果您定义图层对象:

    embedding_layer = Embedding(vocab_size, 300, weights=[embedding_matrix], input_length=max_length, trainable=False)
    embeddings = emebdding_layer.get_weights()[0]
    

    从这里,您可以直接通过使用未处理的词袋或整数输入查询它们的位置来直接处理各个权重。

    如果您愿意,您还可以通过字符串单词来查看实际的词向量,尽管这对于简单地累积每个句子的所有词向量不是必需的:

    # `word_to_index` is a mapping (i.e. dict) from words to their index that you need to provide (from your original input data which should be ints)
    word_embeddings = {w:embeddings[idx] for w, idx in word_to_index.items()}
    
    print(word_embeddings['chair'])  # gives you the word vector
    

    【讨论】:

    • 好的,但这如何回答我的问题?我想在可能的层内应用外部权重(而不仅仅是获取权重)以获得加权平均值。
    • “在层内应用外部权重” - 这是什么意思?您想要每个单词的训练权重向量,然后对每个句子进行平均,对吧?
    猜你喜欢
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2019-04-29
    相关资源
    最近更新 更多