标签: word-embedding

word2vec:CBOW和skip-gram性能训练数据集大小

问题很简单.哪个CBOW和skip-gram对于大数据集更好?(以及小数据集的答案如下.)

我很困惑,因为Mikolov本人,[Link]

Skip-gram:适用于少量训练数据,甚至代表罕见的单词或短语.

CBOW:训练比跳过快几倍,频繁单词的准确性略高

但是,谷歌TensorFlow,[链接]

CBOW对许多分布信息进行平滑(通过将整个上下文视为一个观察).在大多数情况下,这对于较小的数据集来说是有用的.

但是,skip-gram将每个上下文 - 目标对视为一个新的观察,当我们有更大的数据集时,这往往会做得更好.我们将在本教程的其余部分重点介绍skip-gram模型.

这是一个Quora帖子,支持第一个想法[Link],然后还有另一个Quora帖子,它暗示了第二个想法[Link] - 似乎可以从前面提到的可靠来源中得到.

或者就像Mikolov所说的那样:

总的来说,最好的做法是尝试一些实验,看看什么最适合你,因为不同的应用程序有不同的要求.

但肯定有关于此事的经验或分析判决或最终说法?

nlp word2vec word-embedding

9
推荐指数
1
解决办法
2567
查看次数

加权单词嵌入是什么意思?

在我试图实施的论文中,它说,

在这项工作中,推文使用三种类型的文本表示建模.第一个是由tf-idf(术语频率 - 逆文档频率)加权的词袋模型(第2.1.1节).第二个代表一个句子,通过平均所有单词的嵌入(在句子中),第三个代表一个句子,通过平均所有单词的加权单词嵌入,单词的权重由tf-idf给出(第2.1.2节) ).

我不确定所提到的第三种表示形式,因为使用单词权重的加权单词嵌入由tf-idf给出.我甚至不确定它们是否可以一起使用.

nlp machine-learning tf-idf word2vec word-embedding

9
推荐指数
2
解决办法
5912
查看次数

在本地下载预训练的 BERT 模型

我正在使用 SentenceTransformers 库(此处: https: //pypi.org/project/sentence-transformers/#pretrained-models)使用预训练模型创建句子的嵌入bert-base-nli-mean-tokens。我有一个应用程序将部署到无法访问互联网的设备。如何在本地保存此模型,以便当我调用它时,它会在本地加载模型,而不是尝试从互联网下载?正如库维护人员明确指出的那样,该方法SentenceTransformer从互联网下载模型(请参见此处:https: //pypi.org/project/sentence-transformers/#pretrained-models),并且我找不到在本地保存模型的方法。

python-3.x word-embedding

9
推荐指数
2
解决办法
2万
查看次数

如何使用tensorflow服务使tensorflow集线器嵌入可用?

我正在尝试使用tensorflow hub的嵌入模块作为可服务.我是tensorflow的新手.目前,我使用Universal Sentence Encoder嵌入作为查找将句子转换为嵌入,然后使用这些嵌入来查找与另一个句子的相似性.

我目前将句子转换为嵌入的代码是:

with tf.Session() as session:
  session.run([tf.global_variables_initializer(), tf.tables_initializer()])
  sen_embeddings = session.run(self.embed(prepared_text))
Run Code Online (Sandbox Code Playgroud)

Prepared_text是一个句子列表.如何使用此模型并使其成为可维护的?

tensorflow word-embedding tensorflow-serving

8
推荐指数
2
解决办法
1748
查看次数

如何在Tensorflow RNN中构建嵌入层?

我正在建立一个RNN LSTM网络,根据作者的年龄(二进制分类 - 年轻/成人)对文本进行分类.

似乎网络没有学习,突然开始过度拟合:

rnn_overfitting
红色:火车
蓝:验证

一种可能性是数据表示不够好.我只是根据频率对单词进行排序并给出了索引.例如:

unknown -> 0
the     -> 1
a       -> 2
.       -> 3
to      -> 4
Run Code Online (Sandbox Code Playgroud)

所以我试图用word嵌入替换它.我看了几个例子,但是我无法在我的代码中实现它.大多数示例如下所示:

embedding = tf.Variable(tf.random_uniform([vocab_size, hidden_size], -1, 1))
inputs = tf.nn.embedding_lookup(embedding, input_data)
Run Code Online (Sandbox Code Playgroud)

这是否意味着我们正在构建一个学习嵌入的层?我认为应该下载一些Word2Vec或Glove并使用它.

无论如何,让我说我想构建这个嵌入层...
如果我在我的代码中使用这两行,我会收到一个错误:

TypeError:传递给参数'indices'的值的DataType float32不在允许值列表中:int32,int64

所以我想我必须改变input_data类型int32.所以我这样做(毕竟这是所有指数),我得到了这个:

TypeError:输入必须是序列

我尝试用一个列表包装inputs(参数tf.contrib.rnn.static_rnn):[inputs]本答案中所建议的那样,但是产生了另一个错误:

ValueError:输入大小(输入的维度0)必须可通过形状推理访问,但锯值为None.


更新:

x在传递它之前,我正在将张量取消堆叠embedding_lookup.嵌入后我移动了拆散.

更新的代码:

MIN_TOKENS = 10
MAX_TOKENS = 30
x = tf.placeholder("int32", [None, MAX_TOKENS, 1])
y = tf.placeholder("float", [None, N_CLASSES]) …
Run Code Online (Sandbox Code Playgroud)

python tensorflow word-embedding rnn

8
推荐指数
1
解决办法
1731
查看次数

Keras 1d卷积层如何与单词嵌入-文本分类问题一起使用?(过滤器,内核大小和所有超参数)

我目前正在使用Keras开发文本分类工具。它可以工作(工作正常,并且我的验证精度达到98.7),但是我无法确定一维卷积层如何与文本数据一起工作。

我应该使用哪些超参数?

我有以下几句话(输入数据):

  • 句子中的最大单词数:951(如果少于这个数字,则会添加填充)
  • 词汇量:〜32000
  • 句子总数(用于培训):9800
  • embedding_vecor_length:32(每个单词在单词嵌入中有多少关系)
  • batch_size:37(此问题无关紧要)
  • 标签数(类):4

这是一个非常简单的模型(我制作了更复杂的结构,但奇怪的是,它甚至在不使用LSTM的情况下也能更好地工作):

model = Sequential()
model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length))
model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(labels_count, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
Run Code Online (Sandbox Code Playgroud)

我的主要问题是:Conv1D层应使用哪些超参数?

model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))
Run Code Online (Sandbox Code Playgroud)

如果我有以下输入数据:

  • 字数上限:951
  • 文字嵌入尺寸:32

这是否意味着filters=32只会扫描前32个单词,而完全扫描其余的单词(kernel_size=2)?我应该将过滤器设置为951(句子中最多单词数)吗?

图片示例:

例如,这是一个输入数据: http //joxi.ru/krDGDBBiEByPJA

这是卷积层的第一步(步骤2): http

这是第二步(步骤2): http //joxi.ru/brRG699iJ3Ra1m

如果filters = 32,层重复32次?我对么?因此,我不会在句子中说第156个单词,因此这些信息会丢失吗?

python conv-neural-network keras tensorflow word-embedding

8
推荐指数
1
解决办法
2038
查看次数

如何以vec格式保存fasttext模型?

我使用fasttext.train_unsupervised()python 中的函数训练了我的无监督模型。我想将它保存为 vec 文件,因为我将使用此文件作为pretrainedVectors函数中的参数fasttext.train_supervised()pretrainedVectors只接受 vec 文件,但我在创建这个 vec 文件时遇到了麻烦。有人能帮我吗?

附言。我能够以 bin 格式保存它。如果您建议我一种将 bin 文件转换为 vec 文件的方法,这也会很有帮助。

python word-embedding fasttext

8
推荐指数
1
解决办法
4846
查看次数

Gensim 3.8.0 to Gensim 4.0.0

I have trained a Word2Vec model using Gensim 3.8.0. Later I tried to use the pretrained model using Gensim 4.0.o on GCP. I used the following code:

model = KeyedVectors.load_word2vec_format(wv_path, binary= False)
words = model.wv.vocab.keys()
self.word2vec = {word:model.wv[word]%EMBEDDING_DIM for word in words}
Run Code Online (Sandbox Code Playgroud)

I was getting error that "model.mv" has been removed from Gensim 4.0.0. Then I used the following code:

model = KeyedVectors.load_word2vec_format(wv_path, binary= False)
words = model.vocab.keys()
word2vec = {word:model[word]%EMBEDDING_DIM for word in words}
Run Code Online (Sandbox Code Playgroud)

And getting the following error: …

python nlp gensim word2vec word-embedding

8
推荐指数
2
解决办法
8876
查看次数

向 HuggingFace 数据集添加新列

在数据集中,我有 5000000 行,我想在我的数据集中添加一个名为“嵌入”的列。

dataset = dataset.add_column('embeddings', embeddings)

变量embeddings是一个大小为 (5000000, 512) 的 numpy memmap 数组。

但我收到这个错误:

ArrowInvalidTraceback(最近一次调用最后一次)位于 ----> 1 dataset = dataset.add_column('embeddings', embeddings)

/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py inwrapper(*args, **kwargs) 486 } 487 # 应用实际函数 --> 488 out: Union["Dataset", " DatasetDict"] = func(self, *args, **kwargs) 489 数据集: List["Dataset"] = list(out.values()) if isinstance(out, dict) else [out] 490 # 重新应用格式到输出

/opt/conda/lib/python3.8/site-packages/datasets/fingerprint.py inwrapper(*args, **kwargs) 404 # 调用实际函数 405 --> 406 out = func(self, *args, * *kwargs) 407 408 # 更新就地变换的指纹+更新就地变换的历史记录

/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py in add_column(self, name, column, new_fingerprint) …

python numpy word-embedding pyarrow huggingface-datasets

8
推荐指数
1
解决办法
4795
查看次数

使用 CLIP 计算文本嵌入的相似度

我正在尝试使用CLIP来计算字符串之间的相似度。(我知道 CLIP 通常用于文本和图像,但它也应该只适用于字符串。)

我提供了简单文本提示的列表,并计算它们嵌入之间的相似度。相似之处消失了,但我不知道我做错了什么。

import torch
import clip
from torch.nn import CosineSimilarity

cos = CosineSimilarity(dim=1, eps=1e-6)

def gen_features(model, text):
    tokens = clip.tokenize([text]).to(device)
    text_features = model.encode_text(tokens)

    return text_features

def dist(v1, v2):
    #return torch.dist(normalize(v1), normalize(v2)) # euclidean distance
    #return cos(normalize(v1), normalize(v2)).item() # cosine similarity

    similarity = (normalize(v1) @ normalize(v2).T)

    return similarity.item()



device = "cuda" if torch.cuda.is_available() else "cpu"
model_name = "ViT-B/32"
model, _ = clip.load(model_name, device=device)

sentences = ["A cat", "A dog", "A labrador", "A poodle", "A wolf", "A lion", …
Run Code Online (Sandbox Code Playgroud)

python cosine-similarity word-embedding

7
推荐指数
1
解决办法
4016
查看次数