Code Monkey home page Code Monkey logo

Comments (38)

immrz avatar immrz commented on August 18, 2024 1

analyze_vec.zip
用python3运行,指定word embeddings文件即可。如果对代码有疑问的话,请随时告知我。
例:

python analyze_vec.py /path/to/folder/SSA_vectors.bin

from se-wrl.

heyLinsir avatar heyLinsir commented on August 18, 2024

在测试的时候不考虑sense embedding和sememe embedding,只使用word embedding。因为我们缺少上下文,没办法使用sense embedding。

from se-wrl.

immrz avatar immrz commented on August 18, 2024

非常感谢您的解答!

但是我还是有一个小小的疑问。
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.

heyLinsir avatar heyLinsir commented on August 18, 2024

不可以这么做,因为这些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.

immrz avatar immrz commented on August 18, 2024

太感谢您了,by the way,这个模型真的特别棒!

from se-wrl.

immrz avatar immrz commented on August 18, 2024

您好,我目前已经跑出了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.

heyLinsir avatar heyLinsir commented on August 18, 2024

iter设置成2问题不大,虽然最iter设置成3或4会更好,但不会相差很多。计算analogy的时候,不考虑已出现的单词,例如“国王-男人+女人=女皇”,尝试预测“女皇”这个单词时,不考虑“国王”、“男人”、“女人”这三个单词。因为之前别人的工作是这么评价的,所以沿用了这个设定。

from se-wrl.

immrz avatar immrz commented on August 18, 2024

非常感谢,我按照您说的,基本复现了结果~

from se-wrl.

ylxuer avatar ylxuer commented on August 18, 2024

您好,我跑出来了SAT结果,但通过自己的评测文件得出来的评测结果与论文里面不一致,您能提供一套这篇文章的评测工具吗?谢谢~

from se-wrl.

heyLinsir avatar heyLinsir commented on August 18, 2024

@ylxuer 之前的评测文件我没有备份,近期我会重写一个上传上来。
评测的设定需要注意两方面,都考虑了的话不会出现评测不一致:
1.计算相似度时使用cosine similarity。
2.进行analogy评测任务的时候,在进行表达式右边单词推测的时候,不考虑左侧的三个已出现的单词。
因为近期事情很多,暂时没办法上传评测脚本。如果比较急的话,可否找 @immrz 请求一份评测脚本?

from se-wrl.

ylxuer avatar ylxuer commented on August 18, 2024

@immrz 我会认真看看您的代码,之后有疑问还请不吝赐教。 @heyLinsir 我的评测脚本里面也是按照您论文里面的几点考虑写的,可能还是考虑不周,我会仔细比对一下 @immrz 的代码,学习学习。非常感谢两位!

from se-wrl.

heyLinsir avatar heyLinsir commented on August 18, 2024

@immrz 感谢提供评测脚本!

from se-wrl.

embraceth avatar embraceth commented on August 18, 2024

@immrz 您好,我用您提供的评测代码,去评测了作者最新提供的一份词向量文件,由SAT模型训练出来的,同时我自己也训练了一份,也在上面进行了评测。两份文件在similarity表现都很好,在analogy中的city任务中也与论文中的表现差不多,但是在capital和relationship(family)上的accuracy和mean rank表现都差太多。
对于作者说:计算analogy的时候,不考虑已出现的单词,例如“国王-男人+女人=女皇”,尝试预测“女皇”这个单词时,不考虑“国王”、“男人”、“女人”这三个单词。我没看太懂什么意思,请问您的评测代码中对这方面已经考虑到了吗?

from se-wrl.

immrz avatar immrz commented on August 18, 2024

意思是说,国王-男人+女人,得到的向量可能和“女人”很接近,但是在算rank的时候,不考虑“女人”这个词;同样的,“国王”和“男人”这两个词也不予考虑。这样,”女皇“这个词就会排在更前面。代码中已考虑到这方面。

from se-wrl.

embraceth avatar embraceth commented on August 18, 2024

@immrz 奥,明白了,感谢!但是结果确实有点差距,而且不是 特别小的差距,挺大的

from se-wrl.

embraceth avatar embraceth commented on August 18, 2024

@heyLinsir 您好,想问一下我评测了你们最新提供的一份词向量文件,由新版本SAT模型训练出来的,同时我自己也训练了一份,也在上面进行了评测。两份文件在similarity表现都很好,在analogy中的city任务中也与论文中的表现差不多,但是在capital和relationship(family)上的accuracy和mean rank表现都差太多。

from se-wrl.

heyLinsir avatar heyLinsir commented on August 18, 2024

@embraceth 感谢反馈,我们查看一下新版本的问题。如果您着急的话,可以用当前这个项目下面的旧版本进行一下测试,iter设置为大概3或者4,能得到和论文一致的效果。

from se-wrl.

embraceth avatar embraceth commented on August 18, 2024

@heyLinsir 您好,关于论文的效果有最近进展吗?我在想是不是我评估代码的原因?我用的是上面immrz 提供的代码。

from se-wrl.

yangalan123 avatar yangalan123 commented on August 18, 2024

您好,我是这个项目的协作维护者,对于您的问题我不太理解,您是说,你使用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.

embraceth avatar embraceth commented on August 18, 2024

@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.

yangalan123 avatar yangalan123 commented on August 18, 2024

收到。我们正在进行问题排查,麻烦您提供您实验的时候具体的指标结果以及实验参数设定。另外我确认一下,语料使用的是Clean-Sogou-T?

from se-wrl.

embraceth avatar embraceth commented on August 18, 2024

指标结果:https://pan.baidu.com/s/1FJgC41ffO7zBYvJlcy8S7Q
语料用的就是Clean-Sogou-T,一共20G多一点

from se-wrl.

yangalan123 avatar yangalan123 commented on August 18, 2024

收到,我们会尽快进行验证并答复

from se-wrl.

embraceth avatar embraceth commented on August 18, 2024

@yangalan123 好的,感谢!

from se-wrl.

yangalan123 avatar yangalan123 commented on August 18, 2024

抱歉我们复现&训练花了一点时间,原来放出来的词向量文件确实有您说的问题,我们重新运行并复现了论文的结果,具体实验细节如下:

  1. 实验语料:Clean-SogouT(21G,网盘两份文件解压后直接拼接)
  2. 实验关键参数设定:
    min-count-50;window-8;sample-1e-4;negative-25;iter-3;
  3. 训练的词向量(文件已更新):(包括词向量、词义向量和义原向量)
    https://cloud.tsinghua.edu.cn/d/76ab4a71efa541bd8eb3/
  4. analogy测试程序(重构immrz版本,提高运行速度):
    https://github.com/thunlp/SE-WRL-SAT/blob/master/EvalAnalogy.py
  5. 实验结果:

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.

findhomebythesea avatar findhomebythesea commented on August 18, 2024

收到,非常感谢!

from se-wrl.

yangalan123 avatar yangalan123 commented on August 18, 2024

不客气,有问题随时再联系。

from se-wrl.

findhomebythesea avatar findhomebythesea commented on August 18, 2024

您好,想问一下怎么去理解mean rank这个衡量标准?相关资料也是没有找到,看论文的解释没怎么看懂。

from se-wrl.

heyLinsir avatar heyLinsir commented on August 18, 2024

@findhomebythesea 这个可以理解为accuracy的补充。因为考虑到可能存在这么一种情况,某种算法训练出来的词向量无法在accuracy上取得较好的结果,也就是说,ground truth排名在第一名之后。但是如果ground truth大部分排在第二第三名,这时候也可以认为这个算法效果较好。
这个理由也是显而易见的,将ground truth排在第二、三位的算法,是要比排在第十的算法要好的。但此时两种算法的accuracy可能差别不大,mean rank是为了在这种情况下对两者的性能进行一个对比。

from se-wrl.

shuizhonghaitong avatar shuizhonghaitong commented on August 18, 2024

@yangalan123 您好,Clean-SogouT语料的编码有些问题,请问在训练之前是如何处理的呢?

from se-wrl.

yangalan123 avatar yangalan123 commented on August 18, 2024

@shuizhonghaitong 您好,请问您是遇到了什么编码问题呢?我们推荐采用UTF-8编码来读取语料。请注意,在部分操作系统下,默认的编码方式可能不是UTF-8。

from se-wrl.

shuizhonghaitong avatar shuizhonghaitong commented on August 18, 2024

@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.

yangalan123 avatar yangalan123 commented on August 18, 2024

您好,训练词向量的时候,我们采用的是我们开源的C++代码,它改编自google的word2vec,最新版本的代码,运行方法以及训练好的词向量可以在:https://github.com/thunlp/SE-WRL-SAT 找到

from se-wrl.

shuizhonghaitong avatar shuizhonghaitong commented on August 18, 2024

@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.

yangalan123 avatar yangalan123 commented on August 18, 2024

应该是,请问是您这么跑遇到了什么问题么?

from se-wrl.

shuizhonghaitong avatar shuizhonghaitong commented on August 18, 2024

您好,我遇到的问题是,用utf-8格式打开训练好的词向量文件,就会提示我UnicodeDecodeError错误。就像这样
image
image

from se-wrl.

heyLinsir avatar heyLinsir commented on August 18, 2024

@shuizhonghaitong 您好,请问问题解决了吗,我这边读文件的时候没有遇到问题(python 3.7)。

from se-wrl.

Fanchao-Qi avatar Fanchao-Qi commented on August 18, 2024

This issue is closed for now and can be reopened if necessary.

from se-wrl.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.