标签: word2vec

word2vec支持多种语言吗?

我想知道我们是否可以使用 word2vec 算法来训练英语以外的语言(如西班牙语、中文、意大利语)的模型?

word2vec

4
推荐指数
1
解决办法
7527
查看次数

在 python (sklearn) 中使用亲和传播对 word2vec 向量进行聚类

我想使用亲和力传播对我的 word2vec 集群进行聚类并获取集群中心单词。

我当前的代码如下。

model = word2vec.Word2Vec.load("word2vec")
word_vectors = model.wv.syn0
affprop = AffinityPropagation(affinity="precomputed", damping=0.5)
af= affprop.fit(word_vectors)
Run Code Online (Sandbox Code Playgroud)

但是,这会引发以下错误: ValueError: S must be a square array (shape=(77, 300))

据我了解,300 意味着 word2vec 隐藏层维度,77 是我的词汇量。

我只是想知道如何对非方阵的 word2vec 向量使用亲和传播。

请帮我!

python cluster-analysis text-mining scikit-learn word2vec

4
推荐指数
1
解决办法
2102
查看次数

word2vec gensim 多种语言

这个问题完全超出了我的想象。我正在使用 gensim 训练 Word2Vec 模型。我提供了多种语言的数据,即英语和印地语。当我试图找到最接近“man”的单词时,我得到的是:

\n\n
model.wv.most_similar(positive = [\'man\'])\nOut[14]: \n[(\'woman\', 0.7380284070968628),\n (\'lady\', 0.6933152675628662),\n (\'monk\', 0.6662989258766174),\n (\'guy\', 0.6513140201568604),\n (\'soldier\', 0.6491742134094238),\n (\'priest\', 0.6440571546554565),\n (\'farmer\', 0.6366012692451477),\n (\'sailor\', 0.6297377943992615),\n (\'knight\', 0.6290514469146729),\n (\'person\', 0.6288090944290161)]\n--------------------------------------------\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是,这些都是英文单词。然后我试图找到相同含义的印地语和英语单词之间的相似性,

\n\n
model.similarity(\'man\', \'\xe0\xa4\x86\xe0\xa4\xa6\xe0\xa4\xae\xe0\xa5\x80\')\n__main__:1: DeprecationWarning: Call to deprecated `similarity` (Method will \nbe removed in 4.0.0, use self.wv.similarity() instead).\nOut[13]: 0.078265618974427215\n
Run Code Online (Sandbox Code Playgroud)\n\n

这个准确度应该比所有其他准确度都要好。我的印地语语料库是通过翻译英语语料库制作的。因此,这些词出现在类似的上下文中。因此他们应该很接近。

\n\n

这就是我在这里所做的:

\n\n
#Combining all the words together.\nall_reviews=HindiWordsList + EnglishWordsList\n\n#Training FastText model\ncpu_count=multiprocessing.cpu_count()\nmodel=Word2Vec(size=300,window=5,min_count=1,alpha=0.025,workers=cpu_count,max_vocab_size=None,negative=10)\nmodel.build_vocab(all_reviews)\nmodel.train(all_reviews,total_examples=model.corpus_count,epochs=model.iter)\nmodel.save("word2vec_combined_50.bin")\n
Run Code Online (Sandbox Code Playgroud)\n

python nlp artificial-intelligence gensim word2vec

4
推荐指数
1
解决办法
7013
查看次数

如何使用词嵌入(即Word2vec、GloVe或BERT)计算一组N个词中最多的词相似度?

我试图通过输入单词列表并输出一个单词来计算语义相似度,该单词是列表中相似度最高的单词。

例如

如果我传递一个单词列表

words = ['portugal', 'spain', 'belgium', 'country', 'netherlands', 'italy']
Run Code Online (Sandbox Code Playgroud)

它应该输出类似这样的东西-

['country']
Run Code Online (Sandbox Code Playgroud)

python nlp cosine-similarity word2vec bert-language-model

4
推荐指数
1
解决办法
8536
查看次数

gensimmost_similar有正负,它是如何工作的?

我正在阅读这个关于 Gensim 的答案most_similar

它执行向量算术:添加正向量,减去负向量,然后从结果位置列出最接近该角度的已知向量。

但当我测试时,情况并非如此。我使用 Gensim 数据集训练了 Word2Vec"text8"并测试了这两个:

model.most_similar(positive=['woman', 'king'], negative=['man'])

>>> [('queen', 0.7131118178367615), ('prince', 0.6359186768531799),...]
Run Code Online (Sandbox Code Playgroud)
model.wv.most_similar([model["king"] + model["woman"] - model["man"]])

>>> [('king', 0.84305739402771), ('queen', 0.7326322793960571),...]
Run Code Online (Sandbox Code Playgroud)

它们显然不一样。0.713甚至第一个和第二个中的皇后得分0.732也不相同。

所以我再次问这个问题,Gensim 是如何most_similar工作的?为什么上面两者的结果不同呢?

python nlp gensim word2vec

4
推荐指数
1
解决办法
2711
查看次数

理解word2vec文本表示

我想distance在我的程序中实现word2vec 的一部分.不幸的是,它不是在C/C++或Python中,但首先我不理解非二进制表示.这就是我获取文件的方式 ./word2vec -train text8-phrase -output vectorsphrase.txt -cbow 0 -size 300 -window 10 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 0

当我检查来自法国的vectorsphrase.txt文件时,我得到的是:

 france -0.062591 0.264201 0.236335 -0.072601 -0.094313 -0.202659 -0.373314 0.074684 -0.262307 0.139383 -0.053648 -0.154181 0.126962 0.432593 -0.039440 0.108096 0.083703 0.148991 0.062826 0.048151 0.005555 0.066885 0.004729 -0.013939 -0.043947 0.057280 -0.005259 -0.223302 0.065608 -0.013932 -0.199372 -0.054966 -0.026725 0.012510 0.076350 -0.027816 -0.187357 0.248191 -0.085087 0.172979 -0.116789 0.014136 0.131571 0.173892 0.316052 -0.045492 0.057584 0.028944 -0.193623 0.043965 -0.166696 0.111058 0.145268 …
Run Code Online (Sandbox Code Playgroud)

nlp word2vec

3
推荐指数
1
解决办法
1374
查看次数

spark word2vec窗口大小

无论如何要改变使用的窗口大小pyspark.mllib.feature.Word2Vec或永久固定为5?这似乎是一个相当重要的特征.

我在这里看不到这个选项:https: //spark.apache.org/docs/1.4.1/api/scala/index.html#org.apache.spark.mllib.feature.Word2Vec

machine-learning apache-spark word2vec

3
推荐指数
1
解决办法
702
查看次数

预训练的skip-gram和skip-n-gram向量

我正在做一个项目,我需要一个预训练的skip-gram模型向量.我听说还有一个名为skip-n-gram模型的变体可以提供更好的结果.

我想知道我自己需要训练什么样的模型?因为我只需要它们来为我的模型初始化嵌入层.

我搜索得足够多但没有得到很好的例子.我需要你的建议.我在哪里可以获得这种预先训练过的模型,或者没有预先训练好的模型.

word2vec pre-trained-model

3
推荐指数
1
解决办法
720
查看次数

带有负抽样的Doc2vec和word2vec

我目前的doc2vec代码如下.

# Train doc2vec model
model = doc2vec.Doc2Vec(docs, size = 100, window = 300, min_count = 1, workers = 4, iter = 20)
Run Code Online (Sandbox Code Playgroud)

我也有一个word2vec代码如下.

 # Train word2vec model
model = word2vec.Word2Vec(sentences, size=300, sample = 1e-3, sg=1, iter = 20)
Run Code Online (Sandbox Code Playgroud)

我很感兴趣,同时使用DM和DBOW在doc2vec两者跳过克和CBOW在word2vec.

在Gensim中,我找到了下面提到的句子: "通过word2vec的"skip-gram和CBOW模型",使用分层softmax或负抽样,生成具有深度学习的单词向量"

因此,我很困惑使用分层softmax或负抽样.请告诉我这两种方法有什么不同.

另外,我有兴趣知道在dm,DBOW,Skip-gram和CBOW方面需要改变哪些参数才能使用分层softmax和/或负采样

我的应用程序是一个推荐系统:)

python nlp gensim word2vec doc2vec

3
推荐指数
1
解决办法
2602
查看次数

为什么Spark的Word2Vec返回向量?

运行Word2VecSpark示例,我意识到它接受了一个字符串数组并给出了一个向量。我的问题是,它不应该返回矩阵而不是向量吗?我期望每个输入单词一个向量。但是它返回一个向量周期!

或者也许它应该接受字符串,而不是一个字符串数组(一个单词)作为输入。然后,可以,它可以返回一个向量作为输出。但是接受一个字符串数组并返回一个向量对我来说没有任何意义。

[更新]

根据@Shaido的请求,以下是我的微小更改以打印输出模式的代码:

public class JavaWord2VecExample {
    public static void main(String[] args) {
        SparkSession spark = SparkSession
                .builder()
                .appName("JavaWord2VecExample")
                .getOrCreate();

        // $example on$
        // Input data: Each row is a bag of words from a sentence or document.
        List<Row> data = Arrays.asList(
                RowFactory.create(Arrays.asList("Hi I heard about Spark".split(" "))),
                RowFactory.create(Arrays.asList("I wish Java could use case classes".split(" "))),
                RowFactory.create(Arrays.asList("Logistic regression models are neat".split(" ")))
        );
        StructType schema = new StructType(new StructField[]{
                new StructField("text", new ArrayType(DataTypes.StringType, true), false, …
Run Code Online (Sandbox Code Playgroud)

java machine-learning apache-spark word2vec apache-spark-ml

3
推荐指数
1
解决办法
538
查看次数