Skip to content

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

@linshouyi

Description

@linshouyi

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions