tf.nn.embedding_lookup(params, ids, partition_strategy='mod', name=None)
Run Code Online (Sandbox Code Playgroud)
我无法理解这个功能的职责.它是否像查找表?这意味着返回与每个id(在id中)对应的参数?
例如,skip-gram如果我们使用模型tf.nn.embedding_lookup(embeddings, train_inputs),那么每个模型都会train_input找到相应的嵌入?
python deep-learning tensorflow word-embedding natural-language-processing
在这个页面中,据说:
[...] skip-gram反转上下文和目标,并尝试从其目标词中预测每个上下文单词[...]
然而,看看它产生的训练数据集,X和Y对的内容似乎是可互换的,因为那两对(X,Y):
(quick, brown), (brown, quick)
那么,为什么在上下文和目标之间区分那么多,如果最终是同一个东西呢?
另外,在word2vec上进行Udacity的深度学习课程练习,我想知道为什么他们似乎在这个问题上做了很多差异:
skip-gram的另一种选择是另一种名为CBOW(连续词袋)的Word2Vec模型.在CBOW模型中,您不是从单词向量预测上下文单词,而是从其上下文中所有单词向量的总和预测单词.实施和评估在text8数据集上训练的CBOW模型.
这会产生相同的结果吗?
我一直试图通过https://www.tensorflow.org/tutorials/recurrent来了解示例代码 ,您可以在https://github.com/tensorflow/models/blob/master/tutorials/rnn/ptb找到它./ptb_word_lm.py
(使用tensorflow 1.3.0.)
我总结(我认为是)关键部分,对于我的问题,如下:
size = 200
vocab_size = 10000
layers = 2
# input_.input_data is a 2D tensor [batch_size, num_steps] of
# word ids, from 1 to 10000
cell = tf.contrib.rnn.MultiRNNCell(
[tf.contrib.rnn.BasicLSTMCell(size) for _ in range(2)]
)
embedding = tf.get_variable(
"embedding", [vocab_size, size], dtype=tf.float32)
inputs = tf.nn.embedding_lookup(embedding, input_.input_data)
inputs = tf.unstack(inputs, num=num_steps, axis=1)
outputs, state = tf.contrib.rnn.static_rnn(
cell, inputs, initial_state=self._initial_state)
output = tf.reshape(tf.stack(axis=1, values=outputs), [-1, size])
softmax_w = tf.get_variable(
"softmax_w", [size, vocab_size], dtype=data_type()) …Run Code Online (Sandbox Code Playgroud) 对于 ElMo、FastText 和 Word2Vec,我正在对句子中的词嵌入进行平均,并使用 HDBSCAN/KMeans 聚类对相似的句子进行分组。
在这篇短文中可以看到一个很好的实现示例:http : //ai.intelligentonlinetools.com/ml/text-clustering-word-embedding-machine-learning/
我想使用 BERT(使用 Hugging face 中的 BERT python 包)做同样的事情,但是我不太熟悉如何提取原始词/句子向量以将它们输入到聚类算法中。我知道 BERT 可以输出句子表示 - 那么我实际上如何从句子中提取原始向量呢?
任何信息都有帮助。
python nlp artificial-intelligence word-embedding bert-language-model
我已经看到像BERT这样的NLP模型利用WordPiece进行令牌化。在WordPiece中,我们将令牌拆分为playingto play和##ing。提到它涵盖了范围更广的词汇外(OOV)单词。有人可以帮我解释一下WordPiece标记化实际上是如何完成的,它如何有效地处理稀有/ OOV单词?
我想在Keras NN模型中使用一些经过预先训练的单词嵌入,这些模型已由Google在一篇非常着名的文章中发表.他们提供了训练新模型的代码,以及这里的嵌入.
但是,从文档中不清楚如何从简单的python函数调用中从给定的字符串(word)中检索嵌入向量.许多文档似乎都集中在将矢量转储到整个句子的文件中,可能是为了感情分析.
到目前为止,我已经看到您可以使用以下语法提供预训练嵌入:
embedding_layer = Embedding(number_of_words??,
out_dim=128??,
weights=[pre_trained_matrix_here],
input_length=60??,
trainable=False)
Run Code Online (Sandbox Code Playgroud)
但是,转换不同的文件及其结构pre_trained_matrix_here对我来说并不十分清楚.
它们有几个softmax输出,所以我不确定哪个属于哪个 - 以及如何将输入中的单词与它们所拥有的单词词典对齐.
有没有简单的方法在keras中使用这些word/char嵌入和/或在keras中构建模型的字符/单词嵌入部分,以便可以为其他NLP任务添加更多层?
我查看了pytorch的教程和simialr问题.实际上我很困惑,在pytorch(嵌入)中嵌入是否使相似的单词彼此接近?我只需要把所有的句子都给它?或者它只是一个查找表,我需要编码模型?
我不明白Keras的嵌入层.虽然有很多文章解释它但我仍然感到困惑.例如,下面的代码来自imdb情感分析
top_words = 5000
max_review_length = 500
embedding_vecor_length = 32
model = Sequential()
model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length))
model.add(LSTM(100))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(X_train, y_train, nb_epoch=3, batch_size=64)
Run Code Online (Sandbox Code Playgroud)
在这段代码中,嵌入层究竟是做什么的,嵌入层的输出是什么,如果有人可以用一些例子解释它,那将是很好的!!
我正在使用 SentenceTransformers 库(此处: https: //pypi.org/project/sentence-transformers/#pretrained-models)使用预训练模型 bert-base-nli-mean-tokens 创建句子嵌入。我有一个应用程序将部署到无法访问互联网的设备。到这里,已经回答了,如何保存模型下载预训练的BERT模型到本地。然而我一直坚持从本地保存的路径加载保存的模型。
当我尝试使用上述技术保存模型时,这些是输出文件:
('/bert-base-nli-mean-tokens/tokenizer_config.json',
'/bert-base-nli-mean-tokens/special_tokens_map.json',
'/bert-base-nli-mean-tokens/vocab.txt',
'/bert-base-nli-mean-tokens/added_tokens.json')
Run Code Online (Sandbox Code Playgroud)
当我尝试将其加载到内存中时,使用
tokenizer = AutoTokenizer.from_pretrained(to_save_path)
Run Code Online (Sandbox Code Playgroud)
我越来越
Can't load config for '/bert-base-nli-mean-tokens'. Make sure that:
- '/bert-base-nli-mean-tokens' is a correct model identifier listed on 'https://huggingface.co/models'
- or '/bert-base-nli-mean-tokens' is the correct path to a directory containing a config.json
Run Code Online (Sandbox Code Playgroud) word-embedding bert-language-model huggingface-tokenizers sentence-transformers
我在https://nlp.stanford.edu/projects/glove/下载的手套矢量文件gloves.6B.50d.txt中找到了"unk"令牌.其价值如下:
unk -0.79149 0.86617 0.11998 0.00092287 0.2776 -0.49185 0.50195 0.00060792 -0.25845 0.17865 0.2535 0.76572 0.50664 0.4025 -0.0021388 -0.28397 -0.50324 0.30449 0.51779 0.01509 -0.35031 -1.1278 0.33253 -0.3525 0.041326 1.0863 0.03391 0.33564 0.49745 -0.070131 -1.2192 -0.48512 -0.038512 -0.13554 -0.1638 0.52321 -0.31318 -0.1655 0.11909 -0.15115 -0.15621 -0.62655 -0.62336 -0.4215 0.41873 -0.92472 1.1049 -0.29996 -0.0063003 0.3954
Run Code Online (Sandbox Code Playgroud)
它是用于未知单词的标记还是某种缩写?
word-embedding ×10
nlp ×5
python ×3
tensorflow ×3
keras ×2
word2vec ×2
glove ×1
lstm ×1
natural-language-processing ×1
pytorch ×1