运行 shenweichen 的 GraphEmbedding 时报错的解决方法(Resolution of some errors when running GraphEmbedding of shenweichen)
在安装和运行 shenweichen 的 GraphEmbedding 图向量相关的代码中,因为版本问题出现了各种错误,现在针对 deepwalk 和 line 两种算法出现的错误总结如下:
注意:以下出现的问题是需要先修改这些错误再输入 python setup.py install 命令安装,如果你已经安装了 ge,那么就需要先卸载 ge 再修改这些问题再安装 ge
1. 安装运行 python setup.py install 的时候出现错误:UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 2110: illegal multibyte sequence
分析:这种错误,一般在读取文件的时候要加上文件的编码方式,文件编码方式的查看,可以通过把文件另存为,然后通过其中编码的选项来看。如下图所示。
解决方法: setup.py第4行改成
with open("README.md", "r", encoding='utf-8') as fh:
参考资料:https://github.com/shenweichen/GraphEmbedding/issues/26
2. 运行 deepwalk_wiki.py 的时候出现错误:TypeError: __init__() got an unexpected keyword argument 'size'
分析:word2vec 版本问题,需要把 size 改成 vector_size
解决方法:把 GraphEmbedding-master\build\lib\ge\models\deepwalk.py 中的以下内容进行修改
kwargs["size"] = embed_size
改成:
kwargs["vector_size"] = embed_size
参考资料:https://blog.csdn.net/weixin_43820665/article/details/117572613
3. 运行 deepwalk_wiki.py 的时候出现错误:TypeError: __init__() got an unexpected keyword argument 'iter'
分析:word2vec 版本问题,需要把 iter 改成 epochs
解决方法:把 GraphEmbedding-master\build\lib\ge\models\deepwalk.py 中的以下内容进行修改
kwargs["iter"] = iter
改成:
kwargs["epochs"] = iter
参考资料:https://blog.csdn.net/Wuli_jiejie/article/details/118712379
4. 运行 line_wiki.py 的时候出现错误:TypeError: reduce_sum() got an unexpected keyword argument 'keep_dims'
分析:tensorflow 版本问题,需要把 keep_dims 改成 keepdims
解决方法:把 GraphEmbedding-master\ge\models\line.py 中的以下内容进行修改
first = Lambda(lambda x: tf.reduce_sum(
x[0]*x[1], axis=-1, keep_dims=False), name='first_order')([v_i_emb, v_j_emb])
second = Lambda(lambda x: tf.reduce_sum(
x[0]*x[1], axis=-1, keep_dims=False), name='second_order')([v_i_emb_second, v_j_context_emb])
改成:
first = Lambda(lambda x: tf.reduce_sum(
x[0]*x[1], axis=-1, keepdims=False), name='first_order')([v_i_emb, v_j_emb])
second = Lambda(lambda x: tf.reduce_sum(
x[0]*x[1], axis=-1, keepdims=False), name='second_order')([v_i_emb_second, v_j_context_emb])