我必须使用包含大量中文字符的word2vec模块.该模块由我的同事使用Java进行培训,并保存为bin文件.
我安装了gensim并尝试加载模块,但发生以下错误:
In [1]: import gensim
In [2]: model = gensim.models.Word2Vec.load_word2vec_format('/data5/momo-projects/user_interest_classification/code/word2vec/vectors_groups_1105.bin', binary=True)
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 96-97: unexpected end of data
Run Code Online (Sandbox Code Playgroud)
我试图在python 2.7和3.5中加载模块,以同样的方式失败.那么如何在gensim中加载模块呢?谢谢.
我使用Spark构建了一个Word2Vec模型并将其保存为模型.现在,我想在另一个代码中使用它作为离线模型.我已经加载了模型并用它来呈现一个单词的向量(例如Hello),它运行良好.但是,我需要使用map在RDD中调用它.
当我在map函数中调用model.transform()时,它会抛出此错误:
"看起来你正试图从广播引用SparkContext"例外:你似乎试图从广播变量,动作或转换引用SparkContext.SparkContext只能在驱动程序上使用,而不能在工作程序上运行的代码中使用.有关更多信息,请参阅SPARK-5063.
代码:
from pyspark import SparkContext
from pyspark.mllib.feature import Word2Vec
from pyspark.mllib.feature import Word2VecModel
sc = SparkContext('local[4]',appName='Word2Vec')
model=Word2VecModel.load(sc, "word2vecModel")
x= model.transform("Hello")
print(x[0]) # it works fine and returns [0.234, 0.800,....]
y=sc.parallelize([['Hello'],['test']])
y.map(lambda w: model.transform(w[0])).collect() #it throws the error
Run Code Online (Sandbox Code Playgroud)
我将非常感谢你的帮助.
如果增加word2vec模型的模型大小,我的日志就会开始出现这种异常:
org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 6
at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:542)
at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:538)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771)
at org.apache.spark.MapOutputTracker$.org$apache$spark$MapOutputTracker$$convertMapStatuses(MapOutputTracker.scala:538)
at org.apache.spark.MapOutputTracker.getMapSizesByExecutorId(MapOutputTracker.scala:155)
at org.apache.spark.shuffle.BlockStoreShuffleReader.read(BlockStoreShuffleReader.scala:47)
at org.apache.spark.rdd.ShuffledRDD.compute(ShuffledRDD.scala:98)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:270)
at org.apache.spark.rdd.CoalescedRDD$$anonfun$compute$1.apply(CoalescedRDD.scala:96)
at org.apache.spark.rdd.CoalescedRDD$$anonfun$compute$1.apply(CoalescedRDD.scala:95)
at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)
at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)
at scala.collection.Iterator$class.foreach(Iterator.scala:727)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48)
at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:103)
at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:47)
at scala.collection.TraversableOnce$class.to(TraversableOnce.scala:273)
at scala.collection.AbstractIterator.to(Iterator.scala:1157)
at scala.collection.TraversableOnce$class.toBuffer(TraversableOnce.scala:265)
at scala.collection.AbstractIterator.toBuffer(Iterator.scala:1157)
at scala.collection.TraversableOnce$class.toArray(TraversableOnce.scala:252)
at scala.collection.AbstractIterator.toArray(Iterator.scala:1157)
at org.apache.spark.rdd.RDD$$anonfun$collect$1$$anonfun$12.apply(RDD.scala:927)
at org.apache.spark.rdd.RDD$$anonfun$collect$1$$anonfun$12.apply(RDD.scala:927)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
at …Run Code Online (Sandbox Code Playgroud) 我想在Keras实施CBOW + HS.
我找到了一个例子(https://github.com/nzw0301/keras-examples/blob/master/CBoW.ipynb),但它的激活功能看起来像softmax而不是分层softmax.
有没有办法在Keras实施CBOW + HS?
我想使用pyns和gensim在英语维基百科上训练word2vec模型.我密切关注https://groups.google.com/forum/#!topic/gensim/MJWrDw_IvXw.
它适用于我,但我不喜欢生成的word2vec模型是命名实体被拆分,这使得该模型不能用于我的特定应用程序.我需要的模型必须将命名实体表示为单个向量.
这就是为什么我打算用spacy解析维基百科文章并将"北卡罗来纳"等实体合并到"north_carolina"中,以便word2vec将它们表示为单个向量.到现在为止还挺好.
spacy解析必须是预处理的一部分,我最初按照链接讨论中的建议使用:
...
wiki = WikiCorpus(wiki_bz2_file, dictionary={})
for text in wiki.get_texts():
article = " ".join(text) + "\n"
output.write(article)
...
Run Code Online (Sandbox Code Playgroud)
这将删除标点符号,停用单词,数字和大小写,并将每篇文章保存在生成的输出文件中的单独行中.问题是spacy的NER并不能真正处理这个预处理文本,因为我猜它依赖于NER(?)的标点符号和大小写.
有谁知道我是否可以"禁用"gensim的预处理,以便它不会删除标点符号等但仍然直接从压缩的维基百科转储解析维基百科文章到文本?或者有人知道更好的方法来实现这一目标吗?提前致谢!
我正在解决文本分类问题.我使用Estimator自己的类定义了我的分类器model_fn.我想使用Google的预训练word2vec嵌入作为初始值,然后针对手头的任务进一步优化它.
我看到这篇文章:在TensorFlow中使用预先训练的单词嵌入(word2vec或Glove),
它解释了如何在'原始'TensorFlow代码中进行处理.但是,我真的很喜欢Estimator上课.
作为扩展,我想在Cloud ML Engine上训练此代码,是否有一种传递具有初始值的相当大的文件的好方法?
假设我们有类似的东西:
def build_model_fn():
def _model_fn(features, labels, mode, params):
input_layer = features['feat'] #shape=[-1, params["sequence_length"]]
#... what goes here to initialize W
embedded = tf.nn.embedding_lookup(W, input_layer)
...
return predictions
estimator = tf.contrib.learn.Estimator(
model_fn=build_model_fn(),
model_dir=MODEL_DIR,
params=params)
estimator.fit(input_fn=read_data, max_steps=2500)
Run Code Online (Sandbox Code Playgroud) 假设我们正在训练神经网络模型来学习从以下输入到输出的映射,其中输出是名称实体(NE).
输入:欧盟拒绝德国呼吁抵制英国羔羊.
产出:ORG O MISC OOO MISC OO
创建滑动窗口以捕获上下文信息,并将其结果作为model_input提供给训练模型.滑动窗口生成如下结果:
[['<s>', '<s>', 'EU', 'rejects', 'German'],\
['<s>', 'EU', 'rejects', 'German', 'call'],\
['EU', 'rejects', 'German', 'call', 'to'],\
['rejects', 'German', 'call', 'to', 'boycott'],\
['German', 'call', 'to', 'boycott', 'British'],\
['call', 'to', 'boycott', 'British', 'lamb'],\
['to', 'boycott', 'British', 'lamb', '.'],\
['boycott', 'British', 'lamb', '.', '</s>'],\
['British', 'lamb', '.', '</s>', '</s>']]
Run Code Online (Sandbox Code Playgroud)
<s>表示句子标记的开始并</s>表示句子结尾标记,并且每个滑动窗口对应于输出中的一个NE.
为了处理这些令牌,使用预训练的嵌入模型将单词转换为向量(例如,手套),但是那些预先训练的模型不包括诸如<s>和之类的标记</s>.我认为随机初始化<s>并</s>不会是一个好主意,因为这种随机结果的规模可能与其他Glove嵌入不一致.
问:用于设置的嵌入有什么建议<s>和</s>为什么?
我有一个pyspark数据框,其中包含大约300k个唯一行的语料库,每个行都有一个"doc",每个文档包含几个文本句子.
在处理之后,我有每行/ doc的200维矢量化表示.我的NLP流程:
我理解这个实现如何使用skipgram模型根据使用的完整语料库为每个单词创建嵌入.我的问题是:这个实现如何从语料库中每个单词的向量转到每个文档/行的向量?
它与gensim doc2vec实现中的过程相同,它只是简单地将每个文档中的单词向量连接在一起吗?:gensim如何计算doc2vec段落向量.如果是这样,它如何将向量切割到指定大小200(它只使用前200个单词?平均值?)?
我无法从源代码中找到信息:https://spark.apache.org/docs/2.2.0/api/python/_modules/pyspark/ml/feature.html#Word2Vec
任何帮助或参考材料,超级赞赏!
我想使用新的文本数据集将新单词添加到训练有素的gensim word2vec模型中。但是,我想保留旧的单词嵌入,而只是将数据集中的新单词添加到现有模型中。这意味着使用新的文本数据集对旧模型进行简单的再培训不是一个选择,因为它将重新调整也在新的文本数据集中包含的先前单词嵌入的向量。您可以对此任务提出任何建议吗?我想要类似Gensim的doc2vec推断功能的东西,您可以在模型中输入一些文本输入,并提供矢量作为输出。谢谢。