Comments (38)
analyze_vec.zip
用python3运行,指定word embeddings文件即可。如果对代码有疑问的话,请随时告知我。
例:
python analyze_vec.py /path/to/folder/SSA_vectors.bin
from se-wrl.
在测试的时候不考虑sense embedding和sememe embedding,只使用word embedding。因为我们缺少上下文,没办法使用sense embedding。
from se-wrl.
非常感谢您的解答!
但是我还是有一个小小的疑问。
SAT.c
在输出的时候,对于词a,是输出了syn0[a].mult_sense_value这个数组。
我的理解是,这个数组包含的是每个sense的embedding。所以似乎并没有直接输出word embedding。那么如何从这些sense embedding得到word embedding呢?
SSA.c
中有这样一段代码:
if (syn0[a].num > 1) {
for (c = 0; c < layer1_size; ++c)
syn0[a].mult_sense_value[c] = 0;
for (d = 0; d < syn0[a].meaning_word_cnt[syn0[a].num - 1]; ++d) {
real *temp = &(meaning_syn[syn0[a].meaning_word_rank[d] * layer1_size]);
for (c = 0; c < layer1_size; ++c) {
syn0[a].mult_sense_value[c] += temp[c];
}
}
real _cnt = 1.0 / (real)(syn0[a].meaning_word_cnt[syn0[a].num - 1]);
for (c = 0; c < layer1_size; ++c)
syn0[a].mult_sense_value[c] *= _cnt;
}
这是将sememe embedding的平均作为word embedding。对于SAT的结果不知是否也可以这样做呢?
from se-wrl.
不可以这么做,因为这些sememe embedding不应该是等权的。SSA这么做是因为,设计模型的出发点就是,各个义原等权,而SAT的出发点是各个义原不等权。
for (a = 0; a < vocab_size * layer1_size; ++a) fprintf(fo, "%lf ", syn1neg[a]);
SAT中,这一部分代码输出的是word embedding,在893行。
from se-wrl.
太感谢您了,by the way,这个模型真的特别棒!
from se-wrl.
您好,我目前已经跑出了SAT的结果,在similarity和analogy的mean rank指标上表现都很好,但唯独在analogy的accuracy指标上与论文中的结果相差很远。我的参数设置如下:
./word2vec -train train.txt -output SAT_complete_iter2.bin -size 200 -window 8 -alpha 0.025 -cbow 0 -negative 25 -min-count 1 -hs 0 -binary 1 -iter 2 -sample 1e-4 -read-vocab VocabFile -read-meaning SememeFile -read-sense Word_Sense_Sememe_File -threads 10
参数都是按照论文上写的来的,只有iter由于文中没有提及,所以我设置成2。请问这个参数设置有问题吗?
from se-wrl.
iter设置成2问题不大,虽然最iter设置成3或4会更好,但不会相差很多。计算analogy的时候,不考虑已出现的单词,例如“国王-男人+女人=女皇”,尝试预测“女皇”这个单词时,不考虑“国王”、“男人”、“女人”这三个单词。因为之前别人的工作是这么评价的,所以沿用了这个设定。
from se-wrl.
非常感谢,我按照您说的,基本复现了结果~
from se-wrl.
您好,我跑出来了SAT结果,但通过自己的评测文件得出来的评测结果与论文里面不一致,您能提供一套这篇文章的评测工具吗?谢谢~
from se-wrl.
@ylxuer 之前的评测文件我没有备份,近期我会重写一个上传上来。
评测的设定需要注意两方面,都考虑了的话不会出现评测不一致:
1.计算相似度时使用cosine similarity。
2.进行analogy评测任务的时候,在进行表达式右边单词推测的时候,不考虑左侧的三个已出现的单词。
因为近期事情很多,暂时没办法上传评测脚本。如果比较急的话,可否找 @immrz 请求一份评测脚本?
from se-wrl.
@immrz 我会认真看看您的代码,之后有疑问还请不吝赐教。 @heyLinsir 我的评测脚本里面也是按照您论文里面的几点考虑写的,可能还是考虑不周,我会仔细比对一下 @immrz 的代码,学习学习。非常感谢两位!
from se-wrl.
@immrz 感谢提供评测脚本!
from se-wrl.
@immrz 您好,我用您提供的评测代码,去评测了作者最新提供的一份词向量文件,由SAT模型训练出来的,同时我自己也训练了一份,也在上面进行了评测。两份文件在similarity表现都很好,在analogy中的city任务中也与论文中的表现差不多,但是在capital和relationship(family)上的accuracy和mean rank表现都差太多。
对于作者说:计算analogy的时候,不考虑已出现的单词,例如“国王-男人+女人=女皇”,尝试预测“女皇”这个单词时,不考虑“国王”、“男人”、“女人”这三个单词。我没看太懂什么意思,请问您的评测代码中对这方面已经考虑到了吗?
from se-wrl.
意思是说,国王-男人+女人,得到的向量可能和“女人”很接近,但是在算rank的时候,不考虑“女人”这个词;同样的,“国王”和“男人”这两个词也不予考虑。这样,”女皇“这个词就会排在更前面。代码中已考虑到这方面。
from se-wrl.
@immrz 奥,明白了,感谢!但是结果确实有点差距,而且不是 特别小的差距,挺大的
from se-wrl.
@heyLinsir 您好,想问一下我评测了你们最新提供的一份词向量文件,由新版本SAT模型训练出来的,同时我自己也训练了一份,也在上面进行了评测。两份文件在similarity表现都很好,在analogy中的city任务中也与论文中的表现差不多,但是在capital和relationship(family)上的accuracy和mean rank表现都差太多。
from se-wrl.
@embraceth 感谢反馈,我们查看一下新版本的问题。如果您着急的话,可以用当前这个项目下面的旧版本进行一下测试,iter设置为大概3或者4,能得到和论文一致的效果。
from se-wrl.
@heyLinsir 您好,关于论文的效果有最近进展吗?我在想是不是我评估代码的原因?我用的是上面immrz 提供的代码。
from se-wrl.
您好,我是这个项目的协作维护者,对于您的问题我不太理解,您是说,你使用immrz的代码,使用了项目提供的词向量文件(称作VEC_A),并自己训练了一份SAT词向量(称作VEC_B),在similarity和analogy(city)上表现与论文基本相同,但是在analogy(capital)和analogy(relationship(family))上,VEC_A和VEC_B差很多是吗?还是说VEC_A和VEC_B都和论文差很多?
from se-wrl.
@yangalan123 您好,是这样的。你们组最近不是刚上传SAT新的版本叫做NEW_SAT,并给了一套你们拿NEW_SAT训练的词向量文件(称作vec_a),然后我用immrz提供的评测代码稍加修改(因为新版本的输出与以前的版本不一样)进行了评测,结果是在similarity任务上表现不错,甚至超过论文里一点。在analogy(city)和analogy(relationship(family))上表现与论文基本相同,但是在analogy(capital)上与论文里的表现有点差距。
然后我用SAT_NEW,用与您相同的参数,数据自己训练了一个词向量文件(vec_b),同样vec_b在similarity任务上表现不错,甚至超过论文里一点。在analogy(city)和analogy(relationship(family))上表现与论文基本相同,但是在analogy(capital)上与论文里的表现有点差距。
我在想可能是不是评测代码有一点点小问题,但是我找不出,所以向你们求助,真是很不好意思这么麻烦你们,非常感谢!
from se-wrl.
收到。我们正在进行问题排查,麻烦您提供您实验的时候具体的指标结果以及实验参数设定。另外我确认一下,语料使用的是Clean-Sogou-T?
from se-wrl.
指标结果:https://pan.baidu.com/s/1FJgC41ffO7zBYvJlcy8S7Q
语料用的就是Clean-Sogou-T,一共20G多一点
from se-wrl.
收到,我们会尽快进行验证并答复
from se-wrl.
@yangalan123 好的,感谢!
from se-wrl.
抱歉我们复现&训练花了一点时间,原来放出来的词向量文件确实有您说的问题,我们重新运行并复现了论文的结果,具体实验细节如下:
- 实验语料:Clean-SogouT(21G,网盘两份文件解压后直接拼接)
- 实验关键参数设定:
min-count-50;window-8;sample-1e-4;negative-25;iter-3; - 训练的词向量(文件已更新):(包括词向量、词义向量和义原向量)
https://cloud.tsinghua.edu.cn/d/76ab4a71efa541bd8eb3/ - analogy测试程序(重构immrz版本,提高运行速度):
https://github.com/thunlp/SE-WRL-SAT/blob/master/EvalAnalogy.py - 实验结果:
wordsim-240:62.12 (skip_pair-7)
wordsim-297:62.74 (skip_pair-11)
analogy:
capital: acc=80.06 mean_rank=10.10
city: acc=98.86 mean_rank=1.01
relationship(family): acc=77.21 mean_rank=5.27
total acc=82.30 mean_rank=7.52
from se-wrl.
收到,非常感谢!
from se-wrl.
不客气,有问题随时再联系。
from se-wrl.
您好,想问一下怎么去理解mean rank这个衡量标准?相关资料也是没有找到,看论文的解释没怎么看懂。
from se-wrl.
@findhomebythesea 这个可以理解为accuracy的补充。因为考虑到可能存在这么一种情况,某种算法训练出来的词向量无法在accuracy上取得较好的结果,也就是说,ground truth排名在第一名之后。但是如果ground truth大部分排在第二第三名,这时候也可以认为这个算法效果较好。
这个理由也是显而易见的,将ground truth排在第二、三位的算法,是要比排在第十的算法要好的。但此时两种算法的accuracy可能差别不大,mean rank是为了在这种情况下对两者的性能进行一个对比。
from se-wrl.
@yangalan123 您好,Clean-SogouT语料的编码有些问题,请问在训练之前是如何处理的呢?
from se-wrl.
@shuizhonghaitong 您好,请问您是遇到了什么编码问题呢?我们推荐采用UTF-8编码来读取语料。请注意,在部分操作系统下,默认的编码方式可能不是UTF-8。
from se-wrl.
@yangalan123 您好,是这样的,因为看到涉及到义原这一系列的工作大多需要SogouT语料来训练词向量。在网盘上下载后是Clean-SogouT1.tgz和Clean-SogouT2.tgz两个文件,前者是utf-8编码,后者未知编码类型。我是在linux系统上以rb方式读入后decode('utf-8','ignore'),然后encode('utf-8')存入文件的。请问是用gensim包来训练还是google的word2vec来训练呢?用gensim包的话,由于总共21个G,且只有一行,会内存溢出。用google的word2vec的话,训练完成的词向量文件打开后,会提示UnicodeDecodeError错误。
from se-wrl.
您好,训练词向量的时候,我们采用的是我们开源的C++代码,它改编自google的word2vec,最新版本的代码,运行方法以及训练好的词向量可以在:https://github.com/thunlp/SE-WRL-SAT 找到
from se-wrl.
@yangalan123 您好!请问如果只训练skip-gram,不加词的义原信息,是把命令写成time ./SAT_new -train data/train_sample.txt -save-vocab vocab.txt -output-word word-vec.txt -size 200 -alpha 0.025 -min-count 50 -window 8 -sample 1e-4 -negative 25 -threads 20 -iter 3 就可以吗?
from se-wrl.
应该是,请问是您这么跑遇到了什么问题么?
from se-wrl.
您好,我遇到的问题是,用utf-8格式打开训练好的词向量文件,就会提示我UnicodeDecodeError错误。就像这样
from se-wrl.
@shuizhonghaitong 您好,请问问题解决了吗,我这边读文件的时候没有遇到问题(python 3.7)。
from se-wrl.
This issue is closed for now and can be reopened if necessary.
from se-wrl.
Related Issues (20)
- vectors.bin HOT 5
- 数据预处理文件 & 其他语言 & 效率问题 HOT 8
- 训练和评估问题 HOT 2
- 训练结果 HOT 1
- 您好,我目前已经跑出了SAT的结果,在similarity和analogy的mean rank指标上表现都很好,但唯独在analogy的accuracy指标上与论文中的结果相差很远。我的参数设置如下:
- how to get the "HowNet.txt" HOT 2
- muti-embedding for one context word
- VocabFile problem HOT 1
- 论文打不开,提示缺少字体
- 词义消歧 HOT 3
- word_vec的作用 HOT 3
- 未能复现 SSA 结果
- 未能复现结果
- 语料库 HOT 1
- MST.c 运行时段错误 HOT 1
- 您好,关于pretrained词表规模的一点问题。 HOT 1
- 请问只有一个sense的词的sememe id怎么得到? HOT 1
- 模型应用 HOT 5
- 请问这个模型用C写的初衷是什么呢? HOT 1
- 可以公开训练好的word embedding文件吗
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from se-wrl.