自然语言处理之词嵌入(Word Embedding)

关于词嵌入   

        对于计算机来说,要想理解自然语言,需要把自然语言以一定的形式转化为数值,这一步解决的是“将现实问题转化为数学问题”,是人工智能非常关键的一步。词嵌入就是将自然语言中的词语映射为数值的一种方式,具体就是把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。而这种向量里面往往可以描述单词或者词组附近的上下文单词信息,捕获各种语义关系,从而使真真正正从中理解到这些自然语言。

        笔者认为,这种嵌入到低维度的方法,本质上是在做特征提取,并且通过降维的方式既可以提取到主要信息,也可以减少训练过程的计算量。

        自 1990 年代以来,向量空间模型(把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度)已用于分布语义。在此期间,已经开发了许多用于估计单词为连续表示的模型,包括潜在语义分析(LSA)潜在狄利克雷分配(LDA)等等。词嵌入的最终普及可以归功于Mikolov等人在2013年创建了word2vec,这是一个允许无缝训练和使用预先训练的嵌入的工具包。2014年,Pennington等人发布了GloVe,这是一种预训练词嵌入,标志着词嵌入已经进入主流。

潜在语义分析(Latent Semantic Analysis,LSA)

潜在狄利克雷分配(Latent Dirichlet Allocation,LDA)

词向量表示方法

 1.独热编码(one-hot)

假设要将一段话的每个词转为向量形式,又要考虑到每个词都不同,利用one-hot可以做到。每个不同的词都可以用不同的one-hot向量表示,而它的维度由词的个数决定。

例如:词表有不重复的n个词,每个词的在词表中的位置即为每个one-hot向量中数值1的位置。

import numpy as np
vocab = ["我","和","你","吃","好","的"]
one_hot = np.zeros((len(vocab),len(vocab)))
for i in range(len(one_hot)):
    one_hot[i][i] = 1

one_hot
Out[3]: 
array([[1., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 1.]])
    

虽然简单,但是缺点明显:

  1. 维度爆炸。由于每一个单词的词向量的维度都等于词汇表的长度,对于大规模语料训练的情况,词汇表将异常庞大,使模型的计算量剧增造成维数灾难。
  2. 矩阵稀疏。有用的信息零散地分布在大量数据中。这会导致结果异常稀疏,使其难以进行优化,对于神经网络来说尤其如此。
  3. 向量正交。由于两两向量正交,仅仅是编号,无法表达两词向量之间的其他信息。

2.词嵌入

 Bag of Words(词袋表示)模型、N-gram 模型、TF-IDF 模型这些都是one-hot的改进,但不是主流,这里就不介绍了。下面介绍几种主流方法。

Word2vec

        这是一种基于统计方法来获得词向量的方法,他是 2013 年由谷歌的 Mikolov 提出了一套新的词嵌入方法。这种方式在 2018 年之前比较主流,但是随着 BERT、GPT2.0 的出现,这种方式已经不算效果最好的方法了。

这种算法有2种训练模式:

  1. CBOW(Continuous Bag-of-Words Model)通过上下文来预测当前词。相当于一句话中扣掉一个词,让你猜这个词是什么。
  2. Skip-gram (Continuous Skip-gram Model)通过当前词来预测上下文。相当于给你一个词,让你猜前面和后面可能出现什么词。

为了提高速度,Word2vec 经常采用 2 种加速方式:

  1. Negative Sample(负采样)
  2. Hierarchical Softmax

优缺点:

  1. 由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)
  2. 比之前的 Embedding方 法维度更少,所以速度更快
  3. 通用性很强,可以用在各种 NLP 任务中

缺点:

  1. 由于词和向量是一对一的关系,所以多义词的问题无法解决。
  2. Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化

推荐资料(这个大佬写得很好):

Word2vec初探 | 永远的热河路 (fanyeong.com)

GloVe

GloVe 是对 Word2vec 方法的扩展,它将全局统计和 Word2vec 的基于上下文的学习结合了起来。GloVe模型[7]是由斯坦福教授Manning、Socher等人于2014年提出的一种词向量训练模型。上文讲的 Word2vec模型只考虑到了词与窗口范围内邻接词的局部信息,没有考虑到词与窗口外的词的信息,没有使用语料库中的统计信息等全局信息,具有局限性。GloVe模型则使用了考虑全局信息的共现矩阵和特殊的损失函数,有效解决了 Word2vec的部分缺点。

推荐资料:

tGloVe详解 | 永远的热河路 (fanyeong.com)

BERT、GPT2以后再写,鸽了(bushi

参考

1、https://www.gavagai.io/text-analytics/a-brief-history-of-word-embeddings/

1、https://zhuanlan.zhihu.com/p/422542949

2、https://easyai.tech/ai-definition/word-embedding/

3、https://ruder.io/word-embeddings-1/index.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值