shiyybua / NER

基于tensorflow深度学习的中文的命名实体识别
1.04k stars 400 forks source link

词向量的问题 #13

Open zhuruizhuruiqiang opened 6 years ago

zhuruizhuruiqiang commented 6 years ago

输入wiki.zh.vec作为与训练的词向量,我发现这个里面词向量的长度有300,301,这样在load_word2vec_embedding中就会进入到 except ValueError:

如果真的这个词出现在了训练数据里,这么做就会有潜在的bug。那coefs的值就是上一轮的值。

        print values[0], values[1:]

那么在train或者predict的时候,就会提示一个key含有多个不一样的值这样的问题,导致训练不能进行 HashTable has different value for same key 请问这个该怎么解决呢?

zhuruizhuruiqiang commented 6 years ago
   try:
        coefs = np.asarray(values[1:], dtype='float32')  # 取向量
    except ValueError:
        # 如果真的这个词出现在了训练数据里,这么做就会有潜在的bug。那coefs的值就是上一轮的值。
        print values[0], values[1:]

将其修改为: try:

print("try",index,len(values))

        if len(values)<embeddings_size:
            coefs = np.asarray(values[1:], dtype='float32')  # 取向量
        elif len(values)==embeddings_size:
            coefs = np.asarray(values, dtype='float32')  # 取向量
        else:
            coefs = np.asarray(values[len(values)-embeddings_size:], dtype='float32')  # 取向量           
    except ValueError:
        # 如果真的这个词出现在了训练数据里,这么做就会有潜在的bug。那coefs的值就是上一轮的值。
        #print(values[0], values[1:])
        #print("try",index,len(values))
        print(index,"error",len(values),values[0])

之后代码可以调通

plb31949 commented 6 years ago

@zhuruizhuruiqiang 其实这个问题是因为有一个词是空格,所以在截取之后会导致空格的那一行的第一个坐标被认为是词,所以长度会比正常的短一位

hsingyang commented 6 years ago

@zhuruizhuruiqiang 请教下,HashTable has different value for same key.的错误如何解决?删除重复词语吗?