标签: word2vec

Word2Vec 中的维度从何而来?

我正在使用 word2vec 模型来训练神经网络并构建神经嵌入来查找向量空间上的相似单词。但我的问题是关于单词和上下文嵌入(矩阵)中的维度,我们在训练开始时通过随机数(向量)对其进行初始化,如下所示https://iksinc.wordpress.com/2015/04/13 /词作为向量/

\n\n

假设我们想要在图表上显示 {book,paper,notebook,novel} 单词,首先我们应该构建一个尺寸为 4x2 或 4x3 或 4x4 等的矩阵,我知道矩阵的第一个尺寸是我们的词汇|v|。但是矩阵的第二个维度(向量的维度数),例如这是单词 \xe2\x80\x9cbook" [0.3,0.01,0.04] 的向量,这些数字是什么?它们有什么意义吗? 例如0.3数字与词汇表中的单词\xe2\x80\x9cbook"和\xe2\x80\x9cpaper\xe2\x80\x9d之间的关系有关,0.01是book和notebook之间的关系等。\n就这样就像 TF-IDF 或共现矩阵一样,Y 的每个维度(列)都有一个含义 - 它是与 X 行中的单词相关的单词或文档。

\n

nlp machine-learning neural-network word2vec word-embedding

5
推荐指数
1
解决办法
3179
查看次数

doc2vec - 如何更快地推断文档向量?

我已经训练了大约 2300 个段落(每个段落在 2000-12000 个单词之间)的段落向量,每个段落的向量大小为 300。现在,我需要推断大约 100,000 个句子的段落向量,我将这些句子视为段落(每个句子大约 10-30 个)每个单词对应于之前已训练的 2300 个段落)。

所以,我正在使用

model.infer_vector(sentence)

但是,问题是它花费的时间太长,并且它不接受任何参数,例如“ workers”。!有没有办法可以通过线程或其他方式加速该过程?我使用的是带有 8GB 内存的机器,当我使用以下命令检查可用核心时

cores = multiprocessing.cpu_count()
Run Code Online (Sandbox Code Playgroud)

结果是8。

我需要这个来回答多项选择题。另外,是否还有其他库/模型doc2vec可以帮助完成此任务?

在此先感谢您的时间。

python gensim word2vec doc2vec

5
推荐指数
1
解决办法
3012
查看次数

导入Word2Vec模型时Gensim出错

我正在尝试导入从 Google 下载的模型。我使用以下代码执行此操作:

import gensim

model= gensim.models.KeyedVectors.load_word2vec_format('C://gensim/model/GoogleNews-vectors-negative300.bin.gz', binary=True)  
Run Code Online (Sandbox Code Playgroud)

但是,当运行时,我收到此错误:

File "C:\Users\Acer\AppData\Local\Programs\Python\Python36-32\lib\site packages\smart_open\smart_open_lib.py", line 309, in __init__
raise NotImplementedError("unknown URI scheme %r in %r" % (self.scheme, uri))
NotImplementedError: unknown URI scheme 'c' in 'C://gensim/model/GoogleNews-vectors-negative300.bin.gz'
Run Code Online (Sandbox Code Playgroud)

文件路径和模型名称是正确的,但是我无法正确导入它。我一直在使用这个指南。

有什么建议么?

谢谢

python gensim word2vec

5
推荐指数
1
解决办法
2002
查看次数

我可以创建带有预训练嵌入的 Apache Spark Word2VecModel 吗?

我想在我的 Python Spark 文本分类管道中使用词嵌入。该文档展示了如何训练您自己的嵌入,但我想使用像 GloVe 这样的预训练集。有没有某种方法可以使用预训练的嵌入来初始化 Word2VecModel 还是我必须编写自己的转换器类?

apache-spark word2vec pyspark apache-spark-ml word-embedding

5
推荐指数
0
解决办法
645
查看次数

Word2vec中单词类比背后的运算是什么?

根据https://code.google.com/archive/p/word2vec/

最近的研究表明,词向量捕捉了许多语言规律,例如向量运算向量(‘巴黎’)-向量(‘法国’)+向量(‘意大利’)产生的向量非常接近向量(‘罗马’) '),并且向量('king') -向量('man') + vector('woman') 接近于向量('queen') [3, 1]。您可以通过运行 demo-analogy.sh 来尝试一个简单的演示。

所以我们可以尝试使用提供的演示脚本:

+ ../bin/word-analogy ../data/text8-vector.bin
Enter three words (EXIT to break): paris france berlin

Word: paris  Position in vocabulary: 198365

Word: france  Position in vocabulary: 225534

Word: berlin  Position in vocabulary: 380477

                                              Word              Distance
------------------------------------------------------------------------
                                           germany      0.509434
                                          european      0.486505
Run Code Online (Sandbox Code Playgroud)

请注意,这paris france berlin是演示建议的输入提示。问题是,如果我打开相同的词向量Gensim并尝试自己计算向量,我将无法重现这种行为。例如:

>>> word_vectors = KeyedVectors.load_word2vec_format(BIGDATA, binary=True)
>>> v = word_vectors['paris'] - word_vectors['france'] + word_vectors['berlin']
>>> word_vectors.most_similar(np.array([v]))
[('berlin', 0.7331711649894714), ('paris', 0.6669869422912598), ('kunst', 0.4056406617164612), ('inca', …
Run Code Online (Sandbox Code Playgroud)

python gensim word2vec word-embedding

5
推荐指数
1
解决办法
4269
查看次数

无法在 <module 'gensim.models.keyedvectors' > 上获取属性 'Word2VecKeyedVectors'

我训练并保存了一个 gensim word2vec 模型:

W2V_MODEL_FN = r"C:\Users\models\w2v.model"

model = Word2Vec(X, size=150, window=3, min_count=2, workers=10)
model.train(X, total_examples=len(X), epochs=50)
model.save(W2V_MODEL_FN)
Run Code Online (Sandbox Code Playgroud)

进而:

w2v_model = Word2Vec.load(W2V_MODEL_FN)
Run Code Online (Sandbox Code Playgroud)

在一种环境中它可以完美运行,但在另一种环境中我得到错误:

{AttributeError}无法从“C:\Users\Anaconda3_New\envs\ISP_env\lib\site-packages\gensim\models\keyedvectors.py”中获取模块“gensim.models.keyedvectors”上的属性“Word2VecKeyedVectors”

所以我想这可能是一个包版本问题?

但我无法弄清楚它是什么。有任何想法吗?

谢谢!

python nlp gensim word2vec

5
推荐指数
1
解决办法
3471
查看次数

在单元格中使用 ndarray 保存 Pandas 数据框

我需要保存一个带有两列词嵌入 (Word2Vec) 的 Pandas 数据框,这些词嵌入存储为 ndarrays 的 dim (1300, 300)、一个字符串和另一个具有该字符串的一个热表示的数组。

TYPE    content   title one_hot_label
------------------------------------------------------------
happy   [[-0.25195312, 0.13085938, 0.05053711, -0.0417... [[0.12792969, -0.055908203, 0.011230469, 0.283... [0, 1, 0]
sad     [[-0.25195312, 0.13085938, 0.05053711, -0.0417... [[0.12792969, -0.055908203, 0.011230469, 0.283... [0, 1, 0]
happy   [[-0.25195312, 0.13085938, 0.05053711, -0.0417... [[0.12792969,-0.055908203, 0.011230469, 0.283...  [0, 1, 0]
sad     [[-0.25195312, 0.13085938, 0.05053711, -0.0417... [[0.12792969, -0.055908203, 0.011230469, 0.283... [0, 1, 0]
...
...
...  
Run Code Online (Sandbox Code Playgroud)

我需要将它保存在我的驱动器中。我尝试将它 ( df.to_picke)序列化并且只要条目数量很少就可以很好地工作。CSV ( df.to_csv) 将省略号添加到 Numpy 数组列并to_hdf给我溢出错误。

有没有办法用这种结构保存大型数据集?

编辑

打电话 …

python numpy pandas word2vec

5
推荐指数
1
解决办法
413
查看次数

从句子中提取关系概念

是否有当前模型,或者我如何训练一个模型,该模型采用涉及两个主题的句子,例如:

[减数分裂]是[细胞分裂]的一种...

并决定一个是另一个的子概念还是父概念?在这种情况下,细胞分裂是减数分裂的母体。

nlp information-extraction word2vec word-embedding relation-extraction

5
推荐指数
1
解决办法
273
查看次数

BERT 的表现比 word2vec 差

我正在尝试使用 BERT 解决文档排名问题。我的任务很简单。我必须对输入文档进行相似度排名。这里唯一的问题是我没有标签 - 所以它更像是一个定性分析。

我正在尝试一系列文档表示技术——主要是 word2vec、para2vec 和 BERT。

对于 BERT,我遇到了Hugging face - Pytorch库。我微调了 bert-base-uncased 模型,大约有 150,000 个文档。我运行了 5 个 epoch,批量大小为 16,最大序列长度为 128。但是,如果我比较 Bert 表示与 word2vec 表示的性能,出于某种原因,word2vec 现在对我来说表现更好。对于 BERT,我使用最后四层来获取表示。

我不太确定为什么微调模型不起作用。我读了这个文件,而这个其他链接也是说,BERT执行以及何时微调的分类任务。但是,由于我没有标签,因此我按照论文中的方法对其进行了微调 - 以无监督的方式。

此外,我的文件长度差异很大。所以我现在正在向他们发送明智的句子。最后,无论如何我必须对词嵌入进行平均以获得句子嵌入。关于更好方法的任何想法?我还在这里读到- 有不同的方法可以对词嵌入进行池化以获得固定的嵌入。想知道是否有比较哪种池化技术效果更好?

对更好地训练 BERT 或更好的池化方法的任何帮助将不胜感激!

machine-learning unsupervised-learning word2vec deep-learning bert-language-model

5
推荐指数
1
解决办法
665
查看次数

Gensim Word2Vec 模型随着 epoch 数量的增加而变得更糟

我正在构建一个 Word2Vec 模型,用于在包含 ~35.000 个句子的数据集上进行类别推荐,总共 ~500.000 个单词,但只有 ~3.000 个不同的单词。我基本上是这样构建模型的:

def train_w2v_model(df, epochs):
    w2v_model = Word2Vec(min_count=5,
                                 window=100,
                                 size=230,
                                 sample=0,
                                 workers=cores-1,
                                 batch_words=100)
    vocab = df['sentences'].apply(list)
    w2v_model.build_vocab(vocab)
    w2v_model.train(vocab, total_examples=w2v_model.corpus_count, total_words=w2v_model.corpus_total_words, epochs=epochs, compute_loss=True)
    return w2v_model.get_latest_training_loss()
Run Code Online (Sandbox Code Playgroud)

我试图为这样的模型找到合适的时代数:

print(train_w2v_model(1))
=>> 86898.2109375
print(train_w2v_model(100))
=>> 5025273.0
Run Code Online (Sandbox Code Playgroud)

我发现结果非常违反直觉。我不明白增加 epoch 的数量会导致性能下降。这似乎不是函数的误解,get_latest_training_loss因为我观察到函数的结果most_similar更好,只有 1 个 epoch :

100 个时代:

w2v_model.wv.most_similar(['machine_learning'])
=>> [('salesforce', 0.3464601933956146),
 ('marketing_relationnel', 0.3125850558280945),
 ('batiment', 0.30903393030166626),
 ('go', 0.29414454102516174),
 ('simulation', 0.2930642068386078),
 ('data_management', 0.28968319296836853),
 ('scraping', 0.28260597586631775),
 ('virtualisation', 0.27560457587242126),
 ('dataviz', 0.26913416385650635),
 ('pandas', 0.2685554623603821)]
Run Code Online (Sandbox Code Playgroud)

1个时代:

w2v_model.wv.most_similar(['machine_learning'])
=>> [('data_science', 0.9953729510307312),
 ('data_mining', 0.9930223822593689), …
Run Code Online (Sandbox Code Playgroud)

python nlp machine-learning gensim word2vec

5
推荐指数
1
解决办法
2207
查看次数