tensorflow - Keras 词嵌入的 tfidf 加权平均值
问题描述
我不知道这是怎么可能的,但我想计算句子中单词嵌入的加权平均值,比如 tfidf 分数。
是否正是这样,但只有权重:
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 层获得属于特定单词的正确权重?您需要以某种方式访问嵌入层以获取索引,然后查找适当的权重。
还是有一种我看不到的简单方法?
解决方案
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]
从这里,您可以直接通过使用未处理的词袋或整数输入查询它们的位置来直接处理各个权重。
如果您愿意,您还可以通过字符串 words 来查看实际的词向量,尽管这对于简单地累积每个句子的所有词向量不是必需的:
# `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
推荐阅读
- haskell - 如何从 IO 中捕获异常并打印其错误。
- sockets - UDP套接字和TCP套接字连接数的区别
- javascript - Rails 5.2.1 UJS:javascript响应是呈现文本而不是被执行
- webstorm - 在不修改 package.json 的情况下调试 npm 脚本
- angular - 如何将值设置为 mat-select?
- c# - .NET Core 应用程序调试错误:“无法设置下一条语句。此文件与原始版本不完全匹配。”
- oracle - 初始化异步 JMS 监听器并让它无限运行的正确方法
- qt - 如何解决“找不到 QML 模块(QtMultimedia)”
- javascript - 尝试将数值转换为 css
- c# - 如何更改 WPF TextBox 中文本范围的背景颜色?