semantle 这个游戏真的有点意思,想玩的好需要对word2vec 的原理有点理解......
word2vec 是一个通过样本学习词语的相对位置来将文字向量化的算法,所以它不考察词义。它的考察重点常是,这个词通常和哪些词出现在一起。所以在他的眼中,increase 和decrease, day 和week 是差不多的词,因为很多句子中,这些词都可以互换,之后的句子虽然改变了意思,但结构上依然成立。
游戏里对similarity 的定义
"used in the context of similar words, in a database of news articles."
这里的context 指的其实是上下文,而不是语境,所以比如说当你猜到一个动词有不错的similarity 例如750/1000, 但不是极高,那么最终的词应该不是一个动词,因为一个动词的上下文不太会有另一个动词。如果最终词和你的词是同义词、近义词或者反义词的话,那它的similarity 就应该直接到了930/1000 了。
@iam window size(前后几个词)应该可以改变吧?它是 word2vec training 的一个 hyperparameter。如果 window size 更小,就是词语间的 interchangeability 更决定 similarity,如果更大就是词语相关性决定更多(不一定对
@iam 是啦。language modelling 的理想结果就是词语向量化之后,向量之间的 cosine similarity 可以指代所代表词语之间的 semantic similarity,这样才能让机器以数学的方式「懂得」所谓的语义。实际上的 training 还是从一个词 how frequent 出现在哪些 context(上下文)里出发的,这也是为什么两个拥有相似 context 的词之间可能具有高相似度,即使它们完全不是一个东西(「长江」和「钱塘江」),或者甚至是反义词(「涨价」和「降价」)。
我说到 window (context) size 是因为,如果 context size 比较大,像 41,在训练时每一个 context 就是由 target word 和前面 20 词 + 后面 20 词组成的。在这种配置下模型就可能能更好地学习到所谓的语义,例如「涨价」和「降价」,在 Google News 的 corpus 里或许就能被区分了,因为上下文里可能还包含了「消费者开心/抱怨」等信息。而像游戏用的这个 pre-trained model,可能用到的是 5 左右 ,也就是 target 前 2 词 + 后 2 词构成一个 context window,这种情况下有很多信息就不能被 captured。考虑如此,拿到一个排位中间的词,猜 interchangeable 的词来逼近目标词(而不是单纯考虑「同义」「近义」)应该是比较好的策略吧。
当然这些都是我粗浅的理解,不一定对,我也根本不会玩这种游戏
@gfis 我还真没考虑到41这么大的数,或者说我考虑的范围就没大于过一条句子。也没做过NLP 的东西,不知道他们使用的word2vec 的时候会不会考虑大于一个句子以外的context