我最近开始试验预训练的单词嵌入,以增强我的LSTM模型在NLP任务上的性能。在这种情况下,我调查了Google的Word2Vec。根据在线教程,我首先使用package practise;
import java.util.Scanner;
public class scanccls
{
public static void main(String[] args)
{
System.out.println("Enter your name:");
Scanner scan = new Scanner(System.in);
String name = "";
name += scan.nextLine();
// Can also be done like
// String name=scan.next();
// name+=scan.nextLine();
// They Both Work as same
System.out.println("Your name is :" + name);
}
}
下载了Word2Vec,并使用python的wget https://s3.amazonaws.com/dl4j-distribution/GoogleNews-vectors-negative300.bin.gz
包通过以下代码查询嵌入。
gensim
但是,在注意到模型中没有找到很多常用词之后,我开始怀疑是否有问题。我尝试在嵌入存储库中搜索from gensim.models import KeyedVectors
if __name__ == "__main__":
model = KeyedVectors.load_word2vec_format("./data/word2vec/GoogleNews-vectors-negative300.bin", binary=True)
print(model["bosnia"])
,如上所示,但未找到。因此,我继续使用TensorFlow embedding projector,加载了Word2Vec模型,并搜索了bosnia
-在那里。
所以,我的问题是:为什么会这样?我下载的Word2Vec版本是否不完整?还是gensim无法将所有单词都加载到内存中并因此省略了某些单词?
答案 0 :(得分:0)
您应该检查下载文件的长度,以确保它符合预期(如果文件被截断或下载不完整)。
您应该仔细检查两个地方是否都使用了相同的文件,还应该通过两个路径检查完全相同的令牌(例如sortName = lastName;
与null
)。 (https://projector.tensorflow.org/下拉菜单中的5个选项都不对应于'bosnia'
300 d,300万令牌的数据集,并且'Bosnia'
按钮似乎不支持word2vec GoogleNews
个文件,因此我不确定如何将其用于交叉检查该文件中的内容。)
(gensim的load
中没有任何已知的错误可以解释它缺少实际存在的向量。)