我想创建一个本质上是字典的文本文件,每个单词都通过 word2vec 与其矢量表示配对。我假设这个过程是首先训练 word2vec 然后从我的列表中查找每个单词并找到它的表示形式(然后将其保存在一个新的文本文件中)?
我是 word2vec 的新手,我不知道该怎么做。我已经阅读了几个主要站点,以及 Stack 上的几个问题,但还没有找到好的教程。
我想创建一个本质上是字典的文本文件,每个单词都通过 word2vec 与其矢量表示配对。我假设这个过程是首先训练 word2vec 然后从我的列表中查找每个单词并找到它的表示形式(然后将其保存在一个新的文本文件中)?
我是 word2vec 的新手,我不知道该怎么做。我已经阅读了几个主要站点,以及 Stack 上的几个问题,但还没有找到好的教程。
直接访问model[word]
已被弃用,并将在 Gensim 4.0.0 中删除,以分离训练和嵌入。该命令应简单地替换为model.wv[word]
.
在 Python 中使用 Gensim,在构建词汇并训练模型后,您可以找到已经映射到的字数和采样信息model.wv.vocab
,其中model
是您的Word2Vec
对象的变量名。
因此,要创建字典对象,您可以:
my_dict = dict({})
for idx, key in enumerate(model.wv.vocab):
my_dict[key] = model.wv[key]
# Or my_dict[key] = model.wv.get_vector(key)
# Or my_dict[key] = model.wv.word_vec(key, use_norm=False)
现在你有了你的字典,你可以用你喜欢的任何方式将它写入一个文件。例如,您可以使用pickle 库。或者,如果您使用的是 Jupyter Notebook,它们有一个方便的 'magic command' %store my_dict > filename.txt
。您的 filename.txt 将如下所示:
{'one': array([-0.06590105, 0.01573388, 0.00682817, 0.53970253, -0.20303348,
-0.24792041, 0.08682659, -0.45504045, 0.89248925, 0.0655603 ,
......
-0.8175681 , 0.27659689, 0.22305458, 0.39095637, 0.43375066,
0.36215973, 0.4040089 , -0.72396156, 0.3385369 , -0.600869 ],
dtype=float32),
'two': array([ 0.04694849, 0.13303463, -0.12208422, 0.02010536, 0.05969441,
-0.04734801, -0.08465996, 0.10344813, 0.03990637, 0.07126121,
......
0.31673026, 0.22282903, -0.18084198, -0.07555179, 0.22873943,
-0.72985399, -0.05103955, -0.10911274, -0.27275378, 0.01439812],
dtype=float32),
'three': array([-0.21048863, 0.4945509 , -0.15050395, -0.29089224, -0.29454648,
0.3420335 , -0.3419629 , 0.87303966, 0.21656844, -0.07530259,
......
-0.80034876, 0.02006451, 0.5299498 , -0.6286509 , -0.6182588 ,
-1.0569025 , 0.4557548 , 0.4697938 , 0.8928275 , -0.7877308 ],
dtype=float32),
'four': ......
}
如果你愿意使用python
包gensim
,那么在这个答案和Gensim Word2Vec 文档的基础上你可以做这样的事情
from gensim.models import Word2Vec
# Take some sample sentences
tokenized_sentences = [["here","is","one"],["and","here","is","another"]]
# Initialise model, for more information, please check the Gensim Word2vec documentation
model = Word2Vec(tokenized_sentences, size=100, window=2, min_count=0)
# Get the ordered list of words in the vocabulary
words = model.wv.vocab.keys()
# Make a dictionary
we_dict = {word:model.wv[word] for word in words}
您可以直接通过
model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
model.wv.vectors
和话通过
model.wv.vocab.keys()
希望能帮助到你 !
使用基本的python:
all_vectors = []
for index, vector in enumerate(model.wv.vectors):
vector_object = {}
vector_object[list(model.wv.vocab.keys())[index]] = vector
all_vectors.append(vector_object)
对于 gensim 4.0:
my_dict = dict({})
for word in word_list:
my_dict[word] = model.wv.get_vector('0', norm = True)
words = list(w for w in model.wv.index_to_key)
打印(model.wv['也'])