NLPchina / Word2VEC_java

word2vec java版本的一个实现
693 stars 486 forks source link

经过一天调试,用作者语料终于成功跑出结果,发现bug #39

Open linshouyi opened 6 years ago

linshouyi commented 6 years ago

Word2vec w2v = new Word2vec(); w2v.loadJavaModel("model.bin"); System.out.println(w2v.distance("魔术队")); 结果为:[奥兰多 0.8990011, 新泽西 0.83124423, 奇才队 0.82303494, 网队 0.6876496, 顾明 0.68449014, 喻广生 0.6766388, 大年初五 0.67316043, 实习生 0.67124707, 佛罗里达州 0.6711269, 刘国强 0.66510504, 利纳雷斯 0.6648634, 郑金发 0.66467416, 寒风料峭 0.6624502, 孙星文 0.6613987, 廿七 0.66014194, 谷利源 0.65965, 孙永明 0.6595951, 辛祥利 0.6593127, 蓝宝石 0.6587766, 秦凤桐 0.6582865, 乔颖 0.656125, 潘家埠 0.6528409, 安卡拉 0.6501446, 刘文国 0.6500238, 马那瓜 0.6496207, 盛世良 0.64810187, 年初四 0.64746207, 时装展 0.64492613, 孟军 0.6446666, 俞俭 0.64461464, 谢湘 0.64448756, 刘世昕 0.6439994, 摩洛哥王国 0.6434583, 科托努 0.64319485, 周健伟 0.6416397, 王波 0.6413159, 阿鲁沙省 0.64103186, 刘永华 0.64082164, 侯嘉 0.64043736, 里斯本 0.6402035]

如果使用作者提供的语料,需要做的处理包括如下: 1.确保语料文本文件是UTF-8编码,不是需要转换。 2.作者提供的语料是用制表符切割的词组,但是代码是根据空格切割,需要将制表符全部替换成空格。或者修改代码:Learn.java 271行,修改成String[] split = temp.split("[\s ]+");支持同时出现多个半角或全角空格,或制表符分隔。 3.发现一个bug Word2Vec中2个distance方法中,min = result.last().score; 应该放在resultSize < result.size()块里。 只有当结果数已经大于resultSize,才能将最后一个得分数赋予min,作为以后最小允许得分。结果数不大于resultSize不能赋予给min。 最新的代码提交到:https://github.com/linshouyi/Word2VEC_java

xiaobaitut commented 6 years ago

你好 你能将你的项目发给我么 我的qq 592680380 非常感谢 我这里也是遇到了问题

CallMeJiaGu commented 6 years ago

的确有第三点的那个Bug。 想请教一下,基于CB模型的实现效果理想吗,同样的语料在gensim上的结果比这份代码好很多

linshouyi commented 5 years ago

最新代码:https://github.com/linshouyi/Word2VEC_java

linshouyi commented 5 years ago

你好 你能将你的项目发给我么 我的qq 592680380 非常感谢 我这里也是遇到了问题

见:https://github.com/linshouyi/Word2VEC_java

luowenhui027 commented 5 years ago

非常感谢。改写的挺好。