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 了。

上下文都不准确,应该说是前后一两个词。所以如果看到高similarity 的比如every, 你就要想到day/week, 看到family 就要想到size, 看到police 就要想到force/station, 看到market 就要想到stock

@iam window size(前后几个词)应该可以改变吧?它是 word2vec training 的一个 hyperparameter。如果 window size 更小,就是词语间的 interchangeability 更决定 similarity,如果更大就是词语相关性决定更多(不一定对

@gfis
你说的词语相关性指的是语义相似度么?
感觉思路还是不完全一样 至少我玩这个的感觉 因为当你需要考虑词义的相关性的时候 一般已经很非常近了,900/1000 这样了,大部分的heavy lifting 已经完成了。然后从0到1/1000 也还行,就撞嘛。但从比如200 到900 这中间靠的我觉得就是要理解它的机制。

我这次玩的时候就是因为不了解机制,撞到了700/1000 是某个意思的动词,然后就开始疯狂猜同义近义词,但是没有任何进展....

Follow

@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 的词来逼近目标词(而不是单纯考虑「同义」「近义」)应该是比较好的策略吧。

当然这些都是我粗浅的理解,不一定对,我也根本不会玩这种游戏 :blobcatgooglytrash:

· · Web · 1 · 1 · 2

@gfis 我还真没考虑到41这么大的数,或者说我考虑的范围就没大于过一条句子。也没做过NLP 的东西,不知道他们使用的word2vec 的时候会不会考虑大于一个句子以外的context

Sign in to participate in the conversation
兎丸道館

Mastodon 4.0 sucks.