word2vec 是 Google 于 2013年开源的一个用于获取词向量的工具包,作者是 Tomas Mikolov,不过现在他已经从 Google Brain 跳槽到了 Facebook Research,后来还参与了 fasttext 项目的研究。下面是我读博客 word2vec 中的数学原理 的一些笔记和总结。
Language Model (语言模型)
统计语言模型(statistical language model)是自然语言处理里比较常见的一个概念,是建立在一段序列(比如一句话)上联合概率分布。比如 “我/特别/喜欢/跑步”这句话(’/’符号表示分词,假设我们序列的基本单位是词语),其概率可以分解(factorize)成
p(“我特别喜欢跑步”)=p(“我”)p(“特别”|“我”)p(“喜欢”|“我特别”)p(“跑步”|“我特别喜欢”)
观察一下条件概率就可以发现,如果尝试对上面的每个概率建立概率分布,词表的大小将会非常大,要拟合的参数也非常大。因此上面只是理论分析,并不是实用,我们可以考虑一些近似的计算。考虑做 N-1 阶马尔可夫假设,即第 N 个词的概率,只依赖于其前面 N-1 个词的概率。这样就得到了 N-gram 模型。写成链式法则(chain rule)就是
p(w1,...,wm)=∏i=1mP(wi|w1,...,wi−1)≈∏i=1mP(wi|wi−(N−1),...,wi−1)
如 N=2 时,叫做 bigram 模型,每个词出现的概率只和前一个词有关,那么例子里的公式退化成,
p(“我特别喜欢跑步”)≈p(“我”)p(“特别”|“我”)p(“喜欢”|“特别”)p(“跑步”|“喜欢”)
如果词汇表的大小是 |V| ,那么 bigram 要学习的参数就是 p(wi|