Open guilhermeparreira opened 3 years ago
Olá. Tudo bem?
Agradeço o feedback. Encontrei outros casos semelhantes a esse. Infelizmente aqui vejo duas alternativas: 1 - retirar essas entradas do vocabulário das embeddings, a fim de prover um dicionário mais apurado de valores 2 - retreinar as embeddings corrigindo o pré-processamento. A segunda alternativa me parece inviável, infelizmente.
Sei que é um post antigo, mas caso alguém precise, basta importar e tratar como exceção os tokens com problemas na conversão:
emmbed_dict = {}
token_exceptions = []
with open('glove_s300.txt','r') as f:
next(f) # pula a primeira linha
for line in f:
try:
values = line.strip().split()
word = values[0]
v = np.array(values[1:], dtype=np.float16)
if len(v) == 300: # trata alguns tokens que passam e gera um vetor com dim. n+1
emmbed_dict[word] = v
else:
token_exceptions.append(word)
except ValueError as e:
token_exceptions.append(e)
Olá, estou tentando importar os word_embeddings da mesma forma como é recomendado no site do NILC, porém estou tendo dificuldades, estou utilizando o Google Colab para um projeto.
cbow_50 = KeyedVectors.load_word2vec_format("cbow_s50.txt")
E recebo o seguinte erro, cada vez que eu rodo aparecem números diferentes.
ValueError Traceback (most recent call last)
<ipython-input-28-c33f057910b5> in <cell line: 1>()
----> 1 cbow_50 = KeyedVectors.load_word2vec_format("cbow_s50.txt", )
4 frames
/usr/local/lib/python3.10/dist-packages/gensim/models/keyedvectors.py in add_vector(self, key, vector)
560 self.index_to_key[target_index] = key
561 self.key_to_index[key] = target_index
--> 562 self.vectors[target_index] = vector
563 self.next_index += 1
564 return target_index
ValueError: could not broadcast input array from shape (27,) into shape (50,)
Agradeço por qualquer ajuda.
Olá, estou tentando importar os word_embeddings da mesma forma como é recomendado no site do NILC, porém estou tendo dificuldades, estou utilizando o Google Colab para um projeto.
cbow_50 = KeyedVectors.load_word2vec_format("cbow_s50.txt")
E recebo o seguinte erro, cada vez que eu rodo aparecem números diferentes.
ValueError Traceback (most recent call last) <ipython-input-28-c33f057910b5> in <cell line: 1>() ----> 1 cbow_50 = KeyedVectors.load_word2vec_format("cbow_s50.txt", ) 4 frames /usr/local/lib/python3.10/dist-packages/gensim/models/keyedvectors.py in add_vector(self, key, vector) 560 self.index_to_key[target_index] = key 561 self.key_to_index[key] = target_index --> 562 self.vectors[target_index] = vector 563 self.next_index += 1 564 return target_index ValueError: could not broadcast input array from shape (27,) into shape (50,)
Agradeço por qualquer ajuda.
Testei no GoogleColab com gensim na versão que já vem (também é a mais atual no momento gensim==4.3.1) e funcionou. Segue evidência:
@guilhermeparreira e @cesargm2015 poderiam me explicar qual a necessidade de ler o arquivo no formato que vocês estão tentando?
Se carregarem com o gensim, vocês conseguem recuperar as tuplas chave/valor.
Podem fazer algo do tipo:
from gensim.models import KeyedVectors
model = KeyedVectors.load_word2vec_format('cbow_s50.txt')
keys = list(model.key_to_index.keys())
values = model.vectors
dic = {keys[i]:values[i] for i in range(len(values))}
dic['casa'] # array([ 0.070092, 0.407779, -0.178947, 0.052426, 0.333784, -0.096429, ...], dtype=float32)
Se essa sugestão resolver a questão, fecharei a issue.
Olá. Eu fiz o download dos arquivos 'cbow_s50.txt' e 'skip_s100.txt' e tentei ler a partir do seguinte código:
Só que, ao ler o vetor da palavra 'r$', tem um separador decimal como sendo uma vírgula ao invés de um ponto para o primeiro valor ('0,0'). Conforme:
Como eu conseguiria ler tal arquivo sem erro?