我正在尝试用word2vec获取1043个节点列表的嵌入。当我尝试构建词汇表时,我发现word2vec获取带有节点的列表列表,并将它们视为个位数,例如“143”变为“1”、“4”、“3”
我已经尝试将所有数字作为单个条目,并查看是否存在格式问题,并使用来自\u freq的buil\u vocab\u而不是build\u vocab,但这也只会产生错误(“int”类型的对象没有len())
我的代码如下:
from gensim.models import Word2Vec
def generateEmbeddings(all_walks,dimension,min_count):
model = Word2Vec(min_count = min_count, size = dimension)
mylist = list(range(1,1043))
corpus = {}
j=1
for i in mylist:
corpus[str(i)] = j
j=j+1
#mylist = [str(i) for i in mylist]
print(corpus)
model.build_vocab_from_freq(corpus)
model.train(mylist, total_examples=model.corpus_count, epochs = 30)
#if it reaches this point it throws the error "14 not found in vocabulary"
print(model.wv.most_similar(positive=['14']))
return model
print(generateEmbeddings(all_walks,128,2))
我想得到嵌入的数字,例如“14”,而不是现在的“1”。谢谢你的帮助
//编辑
我设法解决了这个问题,如果其他人有这个问题: 您必须按照[[“1”,“102”,“43”],[“54”,“43”]]等格式设置列表。 您不能在运行时更改旧列表(或者至少它没有像我那样工作),因此您可以在运行时使用
new_list = []
for i in all_walks:
temp_list = []
for j in i:
temp_list.append(str(j))
new_list.append(temp_list)
根据我们上面的讨论,工作方法将提供
Word2Vec
它所期望的语料库类型—一个iterable序列,其中每个项都是一个字符串标记列表所以,一个字符串列表会起作用,比如
…而不是任何包含原始int的内容(如
list(range(1, 1043)
)相关问题 更多 >
编程相关推荐