Python Gensim'的科学等效物;s功能/参数

Python Gensim'的科学等效物;s功能/参数,python,nlp,spacy,gensim,Python,Nlp,Spacy,Gensim,对于Gensim,我经常使用三种功能,例如: model = gensim.models.Word2Vec(corpus,size=100,min_count=5) gensim的输出,但我无法理解如何在以下的等效SciSpacy命令中设置大小和最小计数参数: model = spacy.load('en_core_web_md') (输出是一个嵌入模型(太大,无法在此添加))) 这是我经常使用的另一个命令: model.most_similar(positive=['car']) pri

对于Gensim,我经常使用三种功能,例如:

model = gensim.models.Word2Vec(corpus,size=100,min_count=5)
gensim的输出,但我无法理解如何在以下的等效SciSpacy命令中设置大小和最小计数参数:

model = spacy.load('en_core_web_md')
(输出是一个嵌入模型(太大,无法在此添加)))

这是我经常使用的另一个命令:

model.most_similar(positive=['car'])
print(model.wv['car'])
这是gensim的输出/SciSpacy的预期输出:

[('vehicle', 0.7857330441474915),
 ('motorbike', 0.7572781443595886),
 ('train', 0.7457204461097717),
 ('honda', 0.7383008003234863),
 ('volkswagen', 0.7298516035079956),
 ('mini', 0.7158907651901245),
 ('drive', 0.7093928456306458),
 ('driving', 0.7084407806396484),
 ('road', 0.7001082897186279),
 ('traffic', 0.6991947889328003)]
这是我经常使用的第三个命令:

model.most_similar(positive=['car'])
print(model.wv['car'])
Gensim的输出/SciSpacy的预期输出(实际上,该向量的长度为100):


有人能给我看一下SciSpacy的等效命令吗?例如,对于'gensim.models.Word2Vec',我找不到如何指定向量的长度(大小参数),或者在SciSpacy中单词应该在语料库中的最小次数(最小计数)(例如,我查看和),但我不确定是否缺少它们?

实现目标的一种可能方法是:

  • 通过
    nlp.pipe分析您的文档
  • 收集所有单词和成对的相似性
  • 处理相似性以获得期望的结果
  • 让我们准备一些数据:

    import spacy
    nlp = spacy.load("en_core_web_md", disable = ['ner', 'tagger', 'parser'])
    
    然后,要得到一个向量,比如在
    model.wv['car']
    中,可以执行以下操作:

    nlp("car").vector
    
    要获得最相似的单词,如
    model。最相似(肯定=['car'])
    让我们处理语料库:

    corpus = ["This is a sentence about cars. This a sentence aboout train"
              , "And this is a sentence about a bike"]
    docs = nlp.pipe(corpus)
    
    tokens = []
    tokens_orth = []
    
    for doc in docs:
        for tok in doc:
            if tok.orth_ not in tokens_orth:
                tokens.append(tok)
                tokens_orth.append(tok.orth_)
                
    sims = np.zeros((len(tokens),len(tokens)))
    
    for i, tok in enumerate(tokens):
        sims[i] = [tok.similarity(tok_) for tok_ in tokens]
    
    然后检索
    top=3
    最相似的单词:

    def most_similar(word, tokens_orth = tokens_orth, sims=sims, top=3):
        tokens_orth = np.array(tokens_orth)
        id_word = np.where(tokens_orth == word)[0][0]
        sim = sims[id_word]
        id_ms = np.argsort(sim)[:-top-1:-1]
        return list(zip(tokens_orth[id_ms], sim[id_ms]))
    
    
    most_similar("This")
    


    PS


    我也注意到你要求规格的尺寸和频率。嵌入长度在模型初始化时是固定的,因此在初始化之后不能更改。如果愿意,您可以从一个空白模型开始,并提供您熟悉的嵌入。至于频率,它是可行的,通过计算所有的单词,扔掉任何低于期望阈值的东西。但同样,底层嵌入将来自未过滤的文本。SpaCy与Gensim的不同之处在于,它使用现成的嵌入,而Gensim则对其进行训练。

    预期输出?哦,对不起,我可以添加它们,谢谢(我会尽量缩短,因为它们的预期输出都是数字向量,这是单词的嵌入)非常感谢。对于嵌入长度,我尝试复制gensim向量大小:('是gensim Word2Vec将单词映射到的N维空间的维数(N))。但是我可以确认你说的是,长度是在加载模型时设置的(即,当你执行nlp=spacy.load(“en_core\u web\u md”)时,整个模型的向量长度为300/vocab)。这是我从中收集的:>>>
    长度是在加载模型时设置的。它是在有人将向量加载到空模型中并继续训练pos、依赖项解析器和ner时设置的。加载经过训练的模型时,不能在之后更改向量,因为经过训练的管道是基于嵌入的。当然,你可以使用你的嵌入,这需要几个小时的练习,但是这样做的意义是什么,除非你想要一个不可用的语言模型。非常感谢,我很感激。