【风控实践】征信模型改进word2vec

这次改进打算使用中文的word2vec代替原本代码里的随机生成。第一次弄,问题记录如下:

使用别人训练好的模型加载

model = word2vec.Word2Vec.load("D:\\work\\Word2Vec训练好的模型\\搜狐百度120g\\百度百科搜狐新闻.model")                                                                         # 加载训练好的语料模型
model = gensim.models.KeyedVectors.load_word2vec_format('D:\\work\\Word2Vec训练好的模型\\维基百科语料5.7G+训练模型\\zhwiki_2017_03.sg_50dutf8.word2vec', binary=False)
model = word2vec.Word2Vec.load("D:\\work\\Word2Vec训练好的模型\\本机训练好的模型\\200万标讯标题\\200万标讯标题测试.model")
model = word2vec.Word2Vec.load("D:\\work\\Word2Vec训练好的模型\\微信公众号文章模型\\word2vec_wx")
model = gensim.models.KeyedVectors.load_word2vec_format("D:\\work\\Word2Vec训练好的模型\\synonyms\\模型\\words.vector",binary=True, unicode_errors='ignore')
以上这几种加载方式就是之前对网上的模型加载,全部都加载成功了

使用的是268G+训练好的word2vec模型(中文词向量),是128维

模型格式有两种bin和model,使用方式:
a. bin模式:model = gensim.models.KeyedVectors.load_word2vec_format(model_path, binary=True)
b. model模式:model = gensim.models.Word2Vec.load(model_path)

gensim.models.KeyedVectors.load_word2vec_format('word2vec_model/baike_26g_news_13g_novel_229g.bin', binary=True) 

未改进前

# emb_dims: 8 (1*8)
zero_embedding = tf.zeros(shape=[1, self.n_emb_dims], dtype=tf.float32)
# voc_size: 12000,emb_dims: 8 ,(12000*8)
# 现在这个要从训练的词表里读取了!!!
none_zero_embedding = tf.Variable(tf.truncated_normal([self.n_voc_size, self.n_emb_dims], stddev=0.1, dtype=tf.float32), name="embedding_w", dtype=tf.float32)
# embeddings shape: (12001*8)
embeddings = tf.concat([zero_embedding, none_zero_embedding], axis=0, name="embedding_vec")
# 查找embeddings张量中值为x的元素,这些元素组成一个tensor返回
# 网络里需要先把词的id转换成对应的向量
# x_input(240*8)  240应该是self.n_item_num * self.n_query_len
# 向量可以是word2vec预训练好的,也可以是在网络里训练的,在网络里需要先把词的id转换成对应的向量,这个函数就是做这件事的
x_input = tf.nn.embedding_lookup(embeddings, self.x) # 240*8
# self.x是字的id
# word_dict['公'] = 1

改进后

在Keras的Embedding层中使用预训练的word2vec词向量(讲的最清楚的一篇)

embedding_file = r'embeddings-100d.txt'
embedding_file = os.path.join(data_path, embedding_file)
max_features = len(word_vocab)
# print(max_features)

#########prepare embeddings
embeddings_index = {}
f = open(embedding_file)
ii = 0
for line in f:
    if ii == 0:
        ii += 1
        continue
    values = line.split()
    word = values[0]
    coefs = np.asarray(values[1:], dtype='float32')
    # embeddings_index[word] = coefs
    embeddings_index[ii - 1] = coefs
    ii += 1
f.close()

# print('Found %s word vectors.' % len(embeddings_index))

##word_index: 词表
##embedding_matrix: 变量
##embedding_matrix的长度多一行,是的不存在embedding的词的值都为0
embedding_matrix = np.zeros((max_features + 1, embedding_dims))
i = 0
for word in word_vocab:
    # embedding_vector = embeddings_index.get(word)
    embedding_vector = embeddings_index.get(i)
    if embedding_vector is not None:
        # words not found in embedding index will be all-zeros.
        embedding_matrix[i] = embedding_vector
    i += 1

在用TensorFlow编程的过程中,我们经常遇到这样的问题:数据类型不对    TypeError,遇到这种问题,一般情况下,我采用的办法是:

wanted_data = tf.cast(origin_data, tf.float32)

这句代码的意思是将原来的数据(origin_data)转化为你想要的数据(wanted_data),里面的 tf.float32 是新数据的数据类型


参考:

word2vec的一些总结

基于gensim的word2vec实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值