cw2vec icon indicating copy to clipboard operation
cw2vec copied to clipboard

我在

Open daqiang2 opened this issue 5 years ago • 12 comments

我在load_model的时候出现了normalized_embeddings与模型中的不匹配的问题,提示说原模型中的为(3876,128),可以询问一下这是为什么》

daqiang2 avatar Mar 26 '19 12:03 daqiang2

@daqiang2 麻烦清楚描述下或者截图你的运行,以及报错的内容哈

Luka0612 avatar Mar 27 '19 02:03 Luka0612

image 在lodel_model时,加载出来的normalized_embeddings的维度是(3876,,128),不是预想的(200000,128), 你好方便给个联系方式吗 ?这样交流方便些,谢谢麻烦你了。我的qq 457705137

daqiang2 avatar Mar 27 '19 02:03 daqiang2

@daqiang2 你好,不太习惯加联系方式,就在这沟通,其他有相同问题的小伙伴也可以看到。你看下vocabulary_size是否设置成200000

Luka0612 avatar Mar 27 '19 03:03 Luka0612

我检查过vocabulary这个设置使正确,但加载出来的embedding似乎是stroke_embedding

daqiang2 avatar Mar 27 '19 03:03 daqiang2

我也详细看代码了按理说是没错的,不知道为什么?

daqiang2 avatar Mar 27 '19 05:03 daqiang2

@daqiang2 你用word_embedding的代码加载了stroke_embedding的内容了,改下代码或改下记载的路径

Luka0612 avatar Mar 27 '19 06:03 Luka0612

我加载的是是你提供的训练模型cw2vec的保存参数, image 这里是加载模型中normalized_embedding啊,怎么加载出来就成了stroke_embedding呢?

daqiang2 avatar Mar 27 '19 06:03 daqiang2

embeddings_stroke = tf.Variable(tf.random_uniform([self.stroke_size, self.embedding_size], -1.0, 1.0))

将最后的stroke为0

one_hot = tf.one_hot(0, self.stroke_size, dtype=tf.float32) one_hot = tf.transpose(tf.reshape(tf.tile(one_hot, [self.embedding_size]), shape=[self.embedding_size, self.stroke_size])) embeddings_stroke = embeddings_stroke - embeddings_stroke[0]*one_hot lookup_embed = tf.nn.embedding_lookup(embeddings_stroke, train_inputs) stroke_length = get_length(lookup_embed) embed = [] for i in range(self.batch_size): embed.append(tf.reduce_sum(lookup_embed[i][:stroke_length[i]], 0)) 这段没有看懂,我测试感觉是在找最大值。 word2vec_basic.py中这块是: embed = tf.nn.embedding_lookup(embeddings, train_inputs)

zzb5233 avatar Apr 09 '19 08:04 zzb5233

get_length以前的代码与word2vec_basic.py的几乎一致,不一样的地方是embeddings_stroke[0]被设置为全0列表,而word2vec_basic.py中是直接使用初始化后的embeddings,然后调用tf.nn.embedding_lookup()

zzb5233 avatar Apr 09 '19 08:04 zzb5233

@zzb5233 关键不是设置为全0列表这个,因为字符编码跟词编码是不一样的,词是多个偏旁部首的组合,所以需要tf.reduce_sum

Luka0612 avatar Apr 09 '19 08:04 Luka0612

你是把原来的[batch_size, stroke_seq_length, embedding_size]最后一个纬度按照实际长度进行了加和操作,变成了[batch_size, embedding_size],这样做是为了啥?

zzb5233 avatar Apr 09 '19 09:04 zzb5233

我加载的是是你提供的训练模型cw2vec的保存参数, image 这里是加载模型中normalized_embedding啊,怎么加载出来就成了stroke_embedding呢?

问题解决了吗。我也是这个问题

ixxooi-baijian avatar May 06 '19 09:05 ixxooi-baijian