词向量源码解析:(4.3)hyperwords源码解析之counts2pmi等

本文介绍了从共现矩阵计算PPMI和使用SVD的过程,详细解析了hyperwords库的相关源码,包括读取共现矩阵、计算PMI和转换为PPMI矩阵,以及通过PMI矩阵进行SVD分解。
摘要由CSDN通过智能技术生成

PPMI和SVD都是很传统的模型。在word2vec之前很早就出现了。PPMI这种高维稀疏的单词表示一般认为比word2vec要差,尤其是在analogy问题上面。word2vec引起人注意的一个很重要的点就在于在analogy上面远远超过了传统的词向量模型。实际上,这个工具包的作者发现,当我们吧word2vec中的一些超参数引进传统的方法中,并且使用新的公式去做analogy这个任务,PPMI,SVD这种传统的模型也会去得很好的效果。实际上,word2vec,GloVe这些词向量模型本质上就是在利用共现矩阵进行训练。下面介绍如何从counts中生成PPMI矩阵。PPMI全称是positive pointwise mutual information。PMI大家应该比较熟悉,之前word2phrase中找phrase也利用的是PMI。这个东西实际上就是对共现矩阵的一个加权。用python代码几行就写好了。所以其实我们不需要用word2vec,GloVe那样复杂的训练,调参什么的,就用传统经典的bag-of-contexts加权,就能得到很高质量的词向量。而且,这个词向量很容易解释,每一维度都有清楚的含义。counts2pmi生成的是PMI矩阵,PPMI矩阵就是把PMI中的负数变成0。我们先看看counts2pmi的main函数。实际上就两步,首先从文件中读入共现矩阵,然后加权得到PMI矩阵

def main():
    args = docopt("""
    Usage:
        counts2pmi.py [options] <counts> <output_path>
    
    Options:
        --cds NUM    Context distribution smoothing [default: 1.0]
    """)
    
    counts_path = args['<counts>']
    vectors_path = args['<output_path>']
    cds = float(args['--cds'])//从word2vec中借鉴的超参
    
    counts, iw, ic = read_counts_matrix(counts_path)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值