SciSpacy相当于Gensim的函数/参数



对于Gensim,我经常使用三个函数,例如:

model = gensim.models.Word2Vec(corpus,size=100,min_count=5)

gensim的输出,但我无法理解如何在的等效SciSpacy命令中设置大小和min_count参数

model = spacy.load('en_core_web_md')

(输出是一个嵌入模型(太大,无法在此处添加((。

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

model.most_similar(positive=['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)]

这是我经常使用的第三个命令:

print(model.wv['car'])

Gensim的输出/SciSpacy的预期输出(实际上,该矢量的长度为100(:

[ 1.0942473   2.5680697  -0.43163642 -1.171171    1.8553845  -0.3164575
1.3645878  -0.5003705   2.912658    3.099512    2.0184739  -1.2413547
0.9156444  -0.08406237 -2.2248871   2.0038593   0.8751471   0.8953876
0.2207374  -0.157277   -1.4984075   0.49289042 -0.01171476 -0.57937795...]

有人能给我看一下SciSpacy的等效命令吗?例如,对于"gensim.models.Word2Vec",我找不到如何在SciSpacy中指定向量的长度(大小参数(,或单词在语料库中的最小次数(min_count((例如,我看了这里和这里(,但我不确定我是否错过了它们?

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

  1. 通过nlp.pipe解析文档
  2. 收集所有单词和成对的相似性
  3. 处理相似性以获得所需结果

让我们准备一些数据:

import spacy
nlp = spacy.load("en_core_web_md", disable = ['ner', 'tagger', 'parser'])

然后,要得到一个向量,就像在model.wv['car']中一样:

nlp("car").vector

为了获得像model.most_similar(positive=['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")

[('this', 1.0000001192092896), ('This', 1.0), ('is', 0.5970357656478882)]

PS

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

最新更新