如何在word2vec词汇表中添加多个数字

2024-05-16 09:16:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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)

Tags: in列表formodelcountcorpusallmin
1条回答
网友
1楼 · 发布于 2024-05-16 09:16:45

根据我们上面的讨论,工作方法将提供Word2Vec它所期望的语料库类型—一个iterable序列,其中每个项都是一个字符串标记列表

所以,一个字符串列表会起作用,比如

[
  ['1','2','3'],
  ['1','2','4'],
  ['10','11','12'],
  ['10','14','15','900']
]

…而不是任何包含原始int的内容(如list(range(1, 1043)

相关问题 更多 >