我正在使用 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我已经训练了大约 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可以帮助完成此任务?
在此先感谢您的时间。
我正在尝试导入从 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 Spark 文本分类管道中使用词嵌入。该文档展示了如何训练您自己的嵌入,但我想使用像 GloVe 这样的预训练集。有没有某种方法可以使用预训练的嵌入来初始化 Word2VecModel 还是我必须编写自己的转换器类?
apache-spark word2vec pyspark apache-spark-ml word-embedding
根据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) 我训练并保存了一个 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”
所以我想这可能是一个包版本问题?
但我无法弄清楚它是什么。有任何想法吗?
谢谢!
我需要保存一个带有两列词嵌入 (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给我溢出错误。
有没有办法用这种结构保存大型数据集?
编辑
打电话 …
是否有当前模型,或者我如何训练一个模型,该模型采用涉及两个主题的句子,例如:
[减数分裂]是[细胞分裂]的一种...
并决定一个是另一个的子概念还是父概念?在这种情况下,细胞分裂是减数分裂的母体。
nlp information-extraction word2vec word-embedding relation-extraction
我正在尝试使用 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
我正在构建一个 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)