标签: word-embedding

确保gensim针对相同数据的不同运行生成相同的Word2Vec模型

LDA模型中,每次我在同一个语料库上进行训练时,都会生成不同的主题,通过设置np.random.seed(0),LDA模型将始终以完全相同的方式进行初始化和训练。

来自的Word2Vec模型是否相同gensim?通过将随机种子设置为常数,在同一数据集上运行的不同样本会产生相同的模型吗?

但是奇怪的是,它已经在不同情况下为我提供了相同的矢量。

>>> from nltk.corpus import brown
>>> from gensim.models import Word2Vec
>>> sentences = brown.sents()[:100]
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.04985042,  0.02882229, -0.03625415, -0.03165979,  0.06049283,
        0.01207791,  0.04722737,  0.01984878, -0.03026265,  0.04485954], dtype=float32)
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.04985042,  0.02882229, -0.03625415, -0.03165979,  0.06049283,
        0.01207791,  0.04722737,  0.01984878, -0.03026265,  0.04485954], dtype=float32)
>>> model = Word2Vec(sentences, size=20, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.02596745,  0.01475067, …
Run Code Online (Sandbox Code Playgroud)

python random gensim word2vec word-embedding

6
推荐指数
3
解决办法
3421
查看次数

Tensorflow embedding_lookup

我试图通过TensorFlow tf.nn.embedding_lookup()函数"从头开始"学习imdb数据集的单词表示.如果我理解正确,我必须在另一个隐藏层之前设置一个嵌入层,然后当我执行渐变下降时,该层将"学习"该层权重中的一个单词表示.但是,当我尝试这样做时,我的嵌入层和网络的第一个完全连接层之间出现了形状错误.

def multilayer_perceptron(_X, _weights, _biases):
    with tf.device('/cpu:0'), tf.name_scope("embedding"):
        W = tf.Variable(tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0),name="W")
        embedding_layer = tf.nn.embedding_lookup(W, _X)    
    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(embedding_layer, _weights['h1']), _biases['b1'])) 
    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, _weights['h2']), _biases['b2'])) 
    return tf.matmul(layer_2, weights['out']) + biases['out']

x = tf.placeholder(tf.int32, [None, n_input])
y = tf.placeholder(tf.float32, [None, n_classes])

pred = multilayer_perceptron(x, weights, biases)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred,y))
train_step = tf.train.GradientDescentOptimizer(0.3).minimize(cost)

init = tf.initialize_all_variables()
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

ValueError: Shapes TensorShape([Dimension(None), Dimension(300), Dimension(128)])
and TensorShape([Dimension(None), Dimension(None)]) must have the same rank
Run Code Online (Sandbox Code Playgroud)

python machine-learning python-2.7 tensorflow word-embedding

6
推荐指数
1
解决办法
1万
查看次数

微调Word嵌入如何工作?

我一直在阅读一些带有深度学习论文的NLP,并发现微调似乎是一个简单但却令人困惑的概念.这里提出了同样的问题,但仍然不太清楚.

Y. Kim,"用于句子分类的卷积神经网络"KS Tai,R.Socher,以及CD Manning,"改进树的语义表示"等论文所述,将预训练的单词嵌入微调到特定于任务的单词嵌入.- 结构化的长期短期记忆网络,"只是简单地提一下,没有详细说明.

我的问题是:

使用word2vec或Glove生成的Word嵌入作为预训练的单词向量用作(X)下游任务的输入要素,如解析或情感分析,这意味着那些输入向量插入到某个特定任务的新神经网络模型中,同时训练这个新模型,不知何故我们可以获得更新的特定于任务的单词嵌入.

但据我所知,在训练过程中,反向传播的作用是更新(W)模型的权重,它不会改变输入特征(X),那么原始单词嵌入的精确程度如何?这些微调的载体来自哪里?

machine-learning deep-learning word-embedding

6
推荐指数
1
解决办法
3122
查看次数

向量化单词时如何处理文本字符串中的数字?

如果我有一个要矢量化的文本字符串,我应该如何处理其中的数字?或者,如果我向神经网络提供数字和单词,我如何将数字保存为数字?

我打算制作一本关于我所有单词的字典(如此处所示).在这种情况下,所有字符串都将成为数字数组.我该如何处理数字字符?如何输出不将单词索引与数字字符混合的向量?

将数字转换为字符串会削弱我为网络提供的信息吗?

nlp word2vec tensorflow word-embedding

6
推荐指数
2
解决办法
2342
查看次数

Word Embedding、LookupTable、Word Embedding 可视化

我需要问几个关于词嵌入的问题......可能是基本的。

  1. 当我们将一个词的 one-hot 向量(例如 king)[0 0 0 1 0]转换为嵌入向量时E = [0.2, 0.4, 0.2, 0.2]......结果词向量中的每个索引是否有任何重要性?例如E[1],哪个是 0.2....具体E[1]定义了什么(尽管我知道它基本上是到另一个空间的转换)...或词向量共同定义上下文但不是单独定义...
  2. 与原始 one-hot 向量相比,词向量的维度(减少或增加)如何重要?
  3. 我们如何根据嵌入层定义查找表?
  4. 查找表是一种随机生成的表,还是已经针对数据中的数据实例进行了单独训练,我们稍后仅在神经网络操作中使用它?5- 是否有任何方法可以在隐藏层可视化嵌入向量(就像我们在基于图像的神经网络处理中所做的那样)?

提前致谢

text-mining word2vec deep-learning word-embedding

6
推荐指数
1
解决办法
5184
查看次数

Keras 嵌入层在函数式 API 中具有可变长度

我有以下适用于可变长度输入的顺序模型:

m = Sequential()
m.add(Embedding(len(chars), 4, name="embedding"))
m.add(Bidirectional(LSTM(16, unit_forget_bias=True, name="lstm")))
m.add(Dense(len(chars),name="dense"))
m.add(Activation("softmax"))
m.summary()
Run Code Online (Sandbox Code Playgroud)

给出以下总结:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None, None, 4)           204       
_________________________________________________________________
bidirectional_2 (Bidirection (None, 32)                2688      
_________________________________________________________________
dense (Dense)                (None, 51)                1683      
_________________________________________________________________
activation_2 (Activation)    (None, 51)                0         
=================================================================
Total params: 4,575
Trainable params: 4,575
Non-trainable params: 0
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试在功能 API 中实现相同的模型时,我不知道我尝试了什么,因为输入层形状似乎与顺序模型不同。这是我的尝试之一:

charinput = Input(shape=(4,),name="input",dtype='int32')
embedding = Embedding(len(chars), 4, name="embedding")(charinput)
lstm = Bidirectional(LSTM(16, unit_forget_bias=True, name="lstm"))(embedding)
dense = Dense(len(chars),name="dense")(lstm)
output = Activation("softmax")(dense)
Run Code Online (Sandbox Code Playgroud)

总结如下:

_________________________________________________________________ …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow word-embedding

6
推荐指数
2
解决办法
2800
查看次数

将向量加载到 gensim Word2Vec 模型中 - 不是 KeyedVectors

我正在尝试将一些预先训练的向量加载到 gensimWord2Vec模型中,以便可以使用新数据重新训练它们。我的理解是我可以用 进行再培训gensim.Word2Vec.train()。然而,我能找到的加载向量的唯一方法是gensim.models.KeyedVectors.load_word2vec_format('path/to/file.bin', binary=True)创建一个通常是模型wv属性的对象gensim.Word2Vec。但是这个对象本身没有方法train(),而这正是我重新训练向量所需的方法。

那么如何将这些向量转化为实际gensim.Word2Vec模型呢?

nlp machine-learning gensim word2vec word-embedding

6
推荐指数
1
解决办法
3358
查看次数

如何在Gensim的Word2Vec中正确使用get_keras_embedding()?

我正在尝试使用嵌入和RNN构建翻译网络。我已经训练了Gensim Word2Vec模型,并且可以很好地学习单词联想。但是,我无法理解如何正确地将层添加到Keras模型中。(以及如何对输出进行“反向嵌入”。但这是另一个已回答的问题:默认情况下您不能这样做。)

在Word2Vec中,当您输入一个字符串(例如)时model.wv[‘hello’],将获得该单词的矢量表示。但是,我相信keras.layers.EmbeddingWord2Vec的get_keras_embedding()返回的层采用单键/标记化输入,而不是字符串输入。但是文档没有提供有关适当输入内容的解释。我无法弄清楚如何获得与嵌入层的输入具有1对1对应关系的词汇表的一键式/标记式向量。

以下详细说明:

目前,我的解决方法是在将Keras馈送到网络之前,将其应用于Keras外部。这样做有什么害处吗?无论如何,我都会将嵌入设置为不可训练。到目前为止,我已经注意到内存使用效率非常低(甚至在声明Keras模型以收集64个单词长的句子之前,甚至是50GB)都必须将填充的输入和权重加载到模型外部。也许发电机可以提供帮助。

以下是我的代码。输入被填充为64个字长。Word2Vec嵌入具有300个尺寸。由于尝试反复进行嵌入工作的反复实验,此处可能存在很多错误。欢迎提出建议。

import gensim
word2vec_model = gensim.models.Word2Vec.load(“word2vec.model")
Run Code Online (Sandbox Code Playgroud)
from keras.models import Sequential
from keras.layers import Embedding, GRU, Input, Flatten, Dense, TimeDistributed, Activation, PReLU, RepeatVector, Bidirectional, Dropout
from keras.optimizers import Adam, Adadelta
from keras.callbacks import ModelCheckpoint
from keras.losses import sparse_categorical_crossentropy, mean_squared_error, cosine_proximity

keras_model = Sequential()
keras_model.add(word2vec_model.wv.get_keras_embedding(train_embeddings=False))
keras_model.add(Bidirectional(GRU(300, return_sequences=True, dropout=0.1, recurrent_dropout=0.1, activation='tanh')))
keras_model.add(TimeDistributed(Dense(600, activation='tanh')))
# keras_model.add(PReLU())
# ^ For some reason I get error when I add Activation ‘outside’:
# int() argument …
Run Code Online (Sandbox Code Playgroud)

python gensim word2vec keras word-embedding

6
推荐指数
1
解决办法
2674
查看次数

在keras中使用预训练的gensim Word2vec嵌入

我在gensim训练过word2vec.在Keras,我想用它来制作句子矩阵使用那个词嵌入.由于存储所有句子的矩阵,因此空间和内存效率很低.因此,我想在Keras中实现嵌入层以实现这一点,以便可以在其他层(LSTM)中使用它.你能详细告诉我怎么做吗?

PS:它与其他问题不同,因为我使用gensim进行word2vec训练而不是keras.

python gensim word2vec keras word-embedding

6
推荐指数
2
解决办法
4774
查看次数

如何获得 RoBERTa 词嵌入?

给定一个“Roberta 是 BERT 的高度优化版本”类型的句子,我需要使用 RoBERTa 获取该句子中每个单词的嵌入。我试图在网上查看示例代码,但未能找到明确的答案。

我的看法如下:

tokens = roberta.encode(headline)
all_layers = roberta.extract_features(tokens, return_all_hiddens=True)
embedding = all_layers[0]
n = embedding.size()[1] - 1
embedding = embedding[:,1:n,:]
Run Code Online (Sandbox Code Playgroud)

whereembedding[:,1:n,:]用于仅提取句子中单词的嵌入,不包含开始和结束标记。

这是对的吗?

encoding nlp word-embedding

6
推荐指数
1
解决办法
4115
查看次数