标签: word2vec

从Apache Spark中的文件联合一系列RDD的内存有效方式

我目前正在尝试在UMBC Webbase语料库上训练一组Word2Vec向量(大约30GB的文本在400个文件中).

即使在100 GB以上的机器上,我也经常遇到内存不足的情况.我在应用程序本身运行Spark.我尝试稍微调整一下,但我无法对超过10 GB的文本数据执行此操作.我实现的明显瓶颈是先前计算的RDD的并集,即内存不足异常的来源.

也许您有经验可以提出比这更有效的内存实现:

 object SparkJobs {
  val conf = new SparkConf()
    .setAppName("TestApp")
    .setMaster("local[*]")
    .set("spark.executor.memory", "100g")
    .set("spark.rdd.compress", "true")

  val sc = new SparkContext(conf)


  def trainBasedOnWebBaseFiles(path: String): Unit = {
    val folder: File = new File(path)

    val files: ParSeq[File] = folder.listFiles(new TxtFileFilter).toIndexedSeq.par


    var i = 0;
    val props = new Properties();
    props.setProperty("annotators", "tokenize, ssplit");
    props.setProperty("nthreads","2")
    val pipeline = new StanfordCoreNLP(props);

    //preprocess files parallel
    val training_data_raw: ParSeq[RDD[Seq[String]]] = files.map(file => {
      //preprocess line of file
      println(file.getName() +"-" + file.getTotalSpace())
      val …
Run Code Online (Sandbox Code Playgroud)

nlp scala bigdata apache-spark word2vec

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

doc2vec:PV-DBOW是如何实现的

我知道在python(gensim)中已经存在PV-DBOW(段落向量)的实现.但我很想知道如何自己实现它.PV-DBOW 官方文件的解释如下:

另一种方法是忽略输入中的上下文单词,但强制模型预测从输出中的段落中随机抽样的单词.实际上,这意味着在随机梯度下降的每次迭代中,我们对文本窗口进行采样,然后从文本窗口中采样随机词,并在给定段落向量的情况下形成分类任务.

根据该论文,不存储单词向量,并且据说PV-DBOW的工作类似于word2vec中的跳过克.

word2vec参数学习中解释了Skip-gram .在跳过克模型中,单词向量被映射到隐藏层.执行此映射的矩阵在训练期间更新.在PV-DBOW中,隐藏层的维度应该是一个段落向量的维度.当我想将采样示例的单词向量与段落向量相乘时,它们应该具有相同的大小.单词的原始表示具有大小(词汇量x 1).执行哪个映射以在隐藏层中获得正确的大小(段落尺寸x 1).当没有存储单词向量时,如何执行此映射?我假设由于2中的等式26,单词和段落表示在隐藏层中应该具有相同的大小

nlp machine-learning neural-network gensim word2vec

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

从Gensim包中了解Doc2Vec的输出

我有一些我希望通过Doc2Vec模型运行的示例句子.我的最终目标是一个大小矩阵(num_sentences,num_features).

我正在使用Gensim包.

from gensim.models.doc2vec import TaggedDocument
from gensim.models import Doc2Vec
# warning: long sample of data. It's just 40 sentences really though.
labeled_sents = [TaggedDocument(words=['u0644', 'u0646', 'u062f', 'u0646', 'u060c', 'u0628', 'u0631', 'u0637', 'u0627', 'u0646', 'u06cc', 'u06c1', 'u06a9', 'u0627'], tags='400'), TaggedDocument(words=['do', 'pan', 'en', '1713', 'o', 'soar', 'onde', 'se', 'sit', 'xfaa'], tags='401'), TaggedDocument(words=['u0420', 'u044c', 'u043e', 'u043d', 'u0442', 'u0433', 'u0435', 'u043d', '1901', 'xa0', 'u2022', 'u041b', 'u043e', 'u0440', 'u0435', 'u043d', 'u0446', 'xa0', 'u0417', 'u0435', 'u0435', 'u043c', 'u0430', 'u043d', '1902', 'xa0', 'u2022', 'u0411', 'u0435', 'u043a', …
Run Code Online (Sandbox Code Playgroud)

python gensim word2vec

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

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

创建word2vec模型syn1neg.npy扩展名

在创建模型时,没有更多具有扩展完成的模型

.syn1neg.npy

syn0.npy

我的代码如下:

corpus= x+y
tok_corp= [nltk.word_tokenize(sent.decode('utf-8')) for sent in corpus]
model = gensim.models.Word2Vec(tok_corp, min_count=1, size = 32)
model.save('/home/Desktop/test_model')

model = gensim.models.Word2Vec.load('/home/kafein/Desktop/chatbot/test_model')
Run Code Online (Sandbox Code Playgroud)

只有一个模型文件

test_model
Run Code Online (Sandbox Code Playgroud)

哪一部分我错了?

python python-3.x word2vec deep-learning doc2vec

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

如何将单词嵌入向量组合到一个向量中?

我完全了解单词嵌入(skip-gram,CBOW)的含义和方法.我知道,谷歌有一个word2vector API,通过获取单词可以生成向量.但我的问题是这样的:我们有一个条款,包括主题,对象,动词......每个单词以前都是由Google API嵌入的,现在是"我们如何将这些向量组合在一起创建一个等于条款?" 例子:条款:V ="狗咬人"在谷歌嵌入后,我们有V1,V2,V3,每个人都映射到狗,咬人,男人.我们知道:V = V1 + V2 + V3我们如何提供V?如果你通过一个真实载体的例子来解释它,我将不胜感激.

nlp information-retrieval google-api-python-client word2vec word-embedding

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

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

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

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

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

nlp word2vec tensorflow word-embedding

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

具有LSTM的用于Keras中的句子相似性的Siamese Network定期给出相同的结果

我是Keras的新手,我正在努力解决在Keras使用NN的句子类似任务.我使用word2vec作为单词嵌入,然后使用Siamese Network来预测两个句子的相似程度.Siamese网络的基础网络是LSTM,为了合并两个基础网络,我使用具有余弦相似度量的Lambda层.作为数据集,我正在使用SICK数据集,它为每对句子提供一个分数,从1(不同)到5(非常相似).

我创建了网络并运行,但我有很多疑问:首先,我不确定我用LSTM提供句子的方式是否正常.我为每个单词采用word2vec嵌入,每个句子只创建一个数组,用零填充到seq_len,以获得相同的长度数组.然后我以这种方式重塑它: data_A = embedding_A.reshape((len(embedding_A), seq_len, feature_dim))

此外我不确定我的暹罗网络是否正确,因为不同对的预测很多,并且损失没有太大变化(在10个时期内从0.3300到0.2105,并且在100个时期内变化不大)时期).

有人可以帮我找到并理解我的错误吗?非常感谢(抱歉我的英语不好)

对我的代码感兴趣

def cosine_distance(vecs):
    #I'm not sure about this function too
    y_true, y_pred = vecs
    y_true = K.l2_normalize(y_true, axis=-1)
    y_pred = K.l2_normalize(y_pred, axis=-1)
    return K.mean(1 - K.sum((y_true * y_pred), axis=-1))

def cosine_dist_output_shape(shapes):
    shape1, shape2 = shapes
    print((shape1[0], 1))
    return (shape1[0], 1)

def contrastive_loss(y_true, y_pred):
    margin = 1
    return K.mean(y_true * K.square(y_pred) + (1 - y_true) * K.square(K.maximum(margin - y_pred, 0)))

def create_base_network(feature_dim,seq_len):

    model = Sequential()  
    model.add(LSTM(100, batch_input_shape=(1,seq_len,feature_dim),return_sequences=True))
    model.add(Dense(50, activation='relu'))    
    model.add(Dense(10, activation='relu')) …
Run Code Online (Sandbox Code Playgroud)

python-3.x word2vec sentence-similarity lstm keras

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

Doc2vec:gensim doc2vec模型中只有10个docvecs?

我使用gensim拟合doc2vec模型,标记文档(长度> 10)作为训练数据.目标是获取所有训练文档的doc向量,但在model.docvecs中只能找到10个向量.

训练数据的例子(长度> 10)

docs = ['This is a sentence', 'This is another sentence', ....]
Run Code Online (Sandbox Code Playgroud)

有一些预处理

doc_=[d.strip().split(" ") for d in doc]
doc_tagged = []
for i in range(len(doc_)):
  tagd = TaggedDocument(doc_[i],str(i))
  doc_tagged.append(tagd)
Run Code Online (Sandbox Code Playgroud)

标记的文档

TaggedDocument(words=array(['a', 'b', 'c', ..., ],
  dtype='<U32'), tags='117')
Run Code Online (Sandbox Code Playgroud)

适合doc2vec模型

model = Doc2Vec(min_count=1, window=10, size=100, sample=1e-4, negative=5, workers=8)
model.build_vocab(doc_tagged)
model.train(doc_tagged, total_examples= model.corpus_count, epochs= model.iter)
Run Code Online (Sandbox Code Playgroud)

然后我得到了最终的模型

len(model.docvecs)
Run Code Online (Sandbox Code Playgroud)

结果是10 ...

我尝试了其他数据集(长度> 100,1000)并得到了相同的结果len(model.docvecs).所以,我的问题是:如何使用model.docvecs来获取完整的向量?(不使用model.infer_vector)model.docvecs旨在提供所有培训docvecs?

nlp machine-learning gensim word2vec doc2vec

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

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

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

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

python gensim word2vec keras word-embedding

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