Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

train.py中的预训练向量没加载成功,而全部加载的是111111111111 #27

Open
wujixian opened this issue Aug 23, 2019 · 19 comments

Comments

@wujixian
Copy link

tensorflow版本的tran.py文件在加载预训练向量的时候,原始的是word2id找到的是id,而不是字,word2vec里的词向量都是以字为主的,所以word2id应该改成id2word. 如果不改的话 也是能用的,不过embedding_pre全部是111111111,而不是vec.txt里的字向量。建议楼主改下这个坑,很难发现的。

@buppt
Copy link
Owner

buppt commented Aug 24, 2019

遍历的是 word2id 中的 key 值,也就是 word,感觉没有错呢?

@wujixian
Copy link
Author

遍历的是 word2id 中的 key 值,也就是 word,感觉没有错呢?

for word in word2id:
if word2vec.has_key(word):
embedding_pre.append(word2vec[word])
else:
embedding_pre.append(unknow_pre)
你这边的code for word in word2id:不是取得是value吗?value是id,id是数字啊
而 word2vec.has_key(word):取得是key key 是word value是vector。所以 一个是数字 一个是字,
两个永远不会相等的呀,一直执行的是else,而unknow_pre是填充的1111111,
最总就导致embedding_pre全是1111

@buppt
Copy link
Owner

buppt commented Aug 25, 2019

遍历的是 word2id 中的 key 值,也就是 word,感觉没有错呢?

for word in word2id:
if word2vec.has_key(word):
embedding_pre.append(word2vec[word])
else:
embedding_pre.append(unknow_pre)
你这边的code for word in word2id:不是取得是value吗?value是id,id是数字啊
而 word2vec.has_key(word):取得是key key 是word value是vector。所以 一个是数字 一个是字,
两个永远不会相等的呀,一直执行的是else,而unknow_pre是填充的1111111,
最总就导致embedding_pre全是1111

py2 for in 遍历的是 key 啊,难道 py3 不是?

@wujixian
Copy link
Author

遍历的是 word2id 中的 key 值,也就是 word,感觉没有错呢?

for word in word2id:
if word2vec.has_key(word):
embedding_pre.append(word2vec[word])
else:
embedding_pre.append(unknow_pre)
你这边的code for word in word2id:不是取得是value吗?value是id,id是数字啊
而 word2vec.has_key(word):取得是key key 是word value是vector。所以 一个是数字 一个是字,
两个永远不会相等的呀,一直执行的是else,而unknow_pre是填充的1111111,
最总就导致embedding_pre全是1111

py2 for in 遍历的是 key 啊,难道 py3 不是?

@wujixian
Copy link
Author

遍历的是 word2id 中的 key 值,也就是 word,感觉没有错呢?

for word in word2id:
if word2vec.has_key(word):
embedding_pre.append(word2vec[word])
else:
embedding_pre.append(unknow_pre)
你这边的code for word in word2id:不是取得是value吗?value是id,id是数字啊
而 word2vec.has_key(word):取得是key key 是word value是vector。所以 一个是数字 一个是字,
两个永远不会相等的呀,一直执行的是else,而unknow_pre是填充的1111111,
最总就导致embedding_pre全是1111

py2 for in 遍历的是 key 啊,难道 py3 不是?

额,py3 是value。不是key,好吧,怪不得那 ,我确实改成py3了。

@wujixian wujixian reopened this Aug 25, 2019
@Dcatefate
Copy link

has.key()这个函数不存在了吧,后来怎么改的,我也遇见了embedding_pre全是1111

@wujixian
Copy link
Author

has.key()这个函数不存在了吧,后来怎么改的,我也遇见了embedding_pre全是1111

for word in id2word:
    # if word2vec.has_key(word):
    if word in bert_vector:
        embedding_pre.append(bert_vector[word])
    else:
        embedding_pre.append(unknow_pre)

改成这样就好了

@wujixian
Copy link
Author

has.key()这个函数不存在了吧,后来怎么改的,我也遇见了embedding_pre全是1111

for word in id2word:
    # if word2vec.has_key(word):
    if word in bert_vector:
        embedding_pre.append(bert_vector[word])
    else:
        embedding_pre.append(unknow_pre)

改成这样就好了

记得把bert_vector替换成word2vec。我后来用了bert的词向量,改了code 忘记改回来了!你改一下把

@flybesty
Copy link

运行python train.py,报错:No such file or directory: '../data/renmindata.pkl',创建renmindata.pkl再运行python train.py,报错: File "train.py", line 18, in
word2id = pickle.load(inp)
EOFError: Ran out of input
菜鸟一个,请教

@wujixian
Copy link
Author

运行python train.py,报错:No such file or directory: '../data/renmindata.pkl',创建renmindata.pkl再运行python train.py,报错: File "train.py", line 18, in
word2id = pickle.load(inp)
EOFError: Ran out of input
菜鸟一个,请教

renmindata.pkl是要用数据创建的,不是你创建的名字相同的就完事了 ,renmindata.pkl这个文件存放的是所有你的数据。你得先生成renmindata.pkl文件 ,才能进行训练。

@Rainysunnyday
Copy link

运行python train.py,报错:No such file or directory: '../data/renmindata.pkl',创建renmindata.pkl再运行python train.py,报错: File "train.py", line 18, in
word2id = pickle.load(inp)
EOFError: Ran out of input
菜鸟一个,请教

renmindata.pkl是要用数据创建的,不是你创建的名字相同的就完事了 ,renmindata.pkl这个文件存放的是所有你的数据。你得先生成renmindata.pkl文件 ,才能进行训练。

咋生成啊0.0

@wujixian
Copy link
Author

wujixian commented Oct 8, 2019

运行python train.py,报错:No such file or directory: '../data/renmindata.pkl',创建renmindata.pkl再运行python train.py,报错: File "train.py", line 18, in
word2id = pickle.load(inp)
EOFError: Ran out of input
菜鸟一个,请教

renmindata.pkl是要用数据创建的,不是你创建的名字相同的就完事了 ,renmindata.pkl这个文件存放的是所有你的数据。你得先生成renmindata.pkl文件 ,才能进行训练。

咋生成啊0.0

运行ChineseNER-master\data\renMinRiBao\data_renmin_word.py文件 就能生成renmindata.pkl

@Rainysunnyday
Copy link

运行python train.py,报错:No such file or directory: '../data/renmindata.pkl',创建renmindata.pkl再运行python train.py,报错: File "train.py", line 18, in
word2id = pickle.load(inp)
EOFError: Ran out of input
菜鸟一个,请教

renmindata.pkl是要用数据创建的,不是你创建的名字相同的就完事了 ,renmindata.pkl这个文件存放的是所有你的数据。你得先生成renmindata.pkl文件 ,才能进行训练。

咋生成啊0.0

运行python train.py,报错:No such file or directory: '../data/renmindata.pkl',创建renmindata.pkl再运行python train.py,报错: File "train.py", line 18, in
word2id = pickle.load(inp)
EOFError: Ran out of input
菜鸟一个,请教

renmindata.pkl是要用数据创建的,不是你创建的名字相同的就完事了 ,renmindata.pkl这个文件存放的是所有你的数据。你得先生成renmindata.pkl文件 ,才能进行训练。

咋生成啊0.0

运行ChineseNER-master\data\renMinRiBao\data_renmin_word.py文件 就能生成renmindata.pkl

啊哦,知道了0.0,蟹蟹~

@Rainysunnyday
Copy link

还有个问题,就是tenserflow2.0里面没有contrib了要怎么办啊,运行train.py pretrained的时候一直报错:AttributeERROR:'module' object has no attribute 'contrib'。

@wujixian
Copy link
Author

wujixian commented Oct 8, 2019

还有个问题,就是tenserflow2.0里面没有contrib了要怎么办啊,运行train.py pretrained的时候一直报错:AttributeERROR:'module' object has no attribute 'contrib'。

1.0 和2.0是不兼容的,他这个是1.0的版本 ,你要么换成1.0的 要么把代码改动一下适应2.0

@Rainysunnyday
Copy link

还有个问题,就是tenserflow2.0里面没有contrib了要怎么办啊,运行train.py pretrained的时候一直报错:AttributeERROR:'module' object has no attribute 'contrib'。

1.0 和2.0是不兼容的,他这个是1.0的版本 ,你要么换成1.0的 要么把代码改动一下适应2.0

好的吧,我改成1.7.0的了,谢谢你~

@chmaojian
Copy link

tensorflow版本的tran.py文件在加载预训练向量的时候,原始的是word2id找到的是id,而不是字,word2vec里的词向量都是以字为主的,所以word2id应该改成id2word. 如果不改的话 也是能用的,不过embedding_pre全部是111111111,而不是vec.txt里的字向量。建议楼主改下这个坑,很难发现的。

您好,发现在bilstm-crf模型中,词向量是随机生成的,没有用的训练好的词向量(vec.txt)

@wujixian
Copy link
Author

wujixian commented Apr 7, 2020

tensorflow版本的tran.py文件在加载预训练向量的时候,原始的是word2id找到的是id,而不是字,word2vec里的词向量都是以字为主的,所以word2id应该改成id2word. 如果不改的话 也是能用的,不过embedding_pre全部是111111111,而不是vec.txt里的字向量。建议楼主改下这个坑,很难发现的。

您好,发现在bilstm-crf模型中,词向量是随机生成的,没有用的训练好的词向量(vec.txt)

你把上次训练的模型restore一下不就成了,向量就变成不是随机的了

@chmaojian
Copy link

chmaojian commented Apr 7, 2020

tensorflow版本的tran.py文件在加载预训练向量的时候,原始的是word2id找到的是id,而不是字,word2vec里的词向量都是以字为主的,所以word2id应该改成id2word. 如果不改的话 也是能用的,不过embedding_pre全部是111111111,而不是vec.txt里的字向量。建议楼主改下这个坑,很难发现的。

您好,发现在bilstm-crf模型中,词向量是随机生成的,没有用的训练好的词向量(vec.txt)

你把上次训练的模型restore一下不就成了,向量就变成不是随机的了

在训练的时候,虽然把embedding_pretrained传到了bilstm-crf中,
if self.pretrained:
embeddings_init = word_embeddings.assign(self.embedding_pretrained)
但是得到的embeddings_init 在训练中并没有用到。
如果把embeddings_init 换成word_embeddings,可以训练模型,但是在测试的时候会报错

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants