zh-NER-keras icon indicating copy to clipboard operation
zh-NER-keras copied to clipboard

why x = [[word2idx.get(w[0].lower(), 1) for w in s] for s in data]?

Open LylmGuo opened this issue 6 years ago • 6 comments

请问一下 _process_data(data, vocab, chunk_tags, maxlen=None, onehot=False)这个定义里面,x = [[word2idx.get(w[0].lower(), 1) for w in s] for s in data],为什么要把不在vocab里面的词设置为1?原本的1不是应该有个字对应的吗?

LylmGuo avatar Jul 17 '18 08:07 LylmGuo

我也挺納悶這點的,但我想應該是,只要妳默認的數值對應到的文字不是NE就可以吧?

luvensaitory avatar Jul 23 '18 02:07 luvensaitory

@LylmGuo @luvensaitory 这样写应该是不合理的。

对y_chunk的处理:索引从0开始(不会遇到词典中Value不存在),pad时候补**-1**;

目前代码对x的处理:索引从0开始(会遇到词典中Value不存在),当词典中Value不存在的时候,代码中用1作为Value,这是不合理之一;pad的时候默认补0,这是不合理之二。

其实对最后的模型影响不是很大。再次感谢作者分享的代码。

zhpmatrix avatar Sep 22 '18 14:09 zhpmatrix

可以将它改一下:word2idx = dict((w, i) for i, w in enumerate(vocab)) 

替换成: word2idx = dict((w, i+2) for i, w in enumerate(vocab)) 这样就是将字典从2开始编号,把0和1空出来。0作为padding的元素,1作为不在字典中的字符编号

SummerRaining avatar Jul 25 '19 09:07 SummerRaining

补充 @SummerRaining 的改善方法

记得也要改bilsm_crf_model.py里面的Embedding层。 model.add(Embedding(len(vocab), EMBED_DIM, mask_zero=True)) model.add(Embedding(len(vocab)+2, EMBED_DIM, mask_zero=True)) len(vocab) 是词典里的词的数量,+2是为了把0跟1也算进去。

luvensaitory avatar Jul 26 '19 03:07 luvensaitory

vocab = [w for w, f in iter(word_counts.items()) if f >= 2] 代码中这里通过字频来给字所对应的ID,这里直接就空出来了0和1啊 。

renhaikun avatar Mar 06 '20 16:03 renhaikun

补充@SummerRaining的改善方法

记得也要改bilsm_crf_model.py里面的嵌入层。 model.add(Embedding(len(vocab), EMBED_DIM, mask_zero=True)) model.add(Embedding(len(vocab)+2, EMBED_DIM, mask_zero=True)) LEN(词汇)是词典里的词的数量,+ 2是为了把0跟1也算进去。

训练效果如何 调学习率了吗

hzp0821 avatar Apr 22 '20 09:04 hzp0821