赞
踩
对于计算机来说,要想理解自然语言,需要把自然语言以一定的形式转化为数值,这一步解决的是“将现实问题转化为数学问题”,是人工智能非常关键的一步。词嵌入就是将自然语言中的词语映射为数值的一种方式,具体就是把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。而这种向量里面往往可以描述单词或者词组附近的上下文单词信息,捕获各种语义关系,从而使真真正正从中理解到这些自然语言。
笔者认为,这种嵌入到低维度的方法,本质上是在做特征提取,并且通过降维的方式既可以提取到主要信息,也可以减少训练过程的计算量。
自 1990 年代以来,向量空间模型(把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度)已用于分布语义。在此期间,已经开发了许多用于估计单词为连续表示的模型,包括潜在语义分析(LSA)和潜在狄利克雷分配(LDA)等等。词嵌入的最终普及可以归功于Mikolov等人在2013年创建了word2vec,这是一个允许无缝训练和使用预先训练的嵌入的工具包。2014年,Pennington等人发布了GloVe,这是一种预训练词嵌入,标志着词嵌入已经进入主流。
假设要将一段话的每个词转为向量形式,又要考虑到每个词都不同,利用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.]])
虽然简单,但是缺点明显:
Bag of Words(词袋表示)模型、N-gram 模型、TF-IDF 模型这些都是one-hot的改进,但不是主流,这里就不介绍了。下面介绍几种主流方法。
这是一种基于统计方法来获得词向量的方法,他是 2013 年由谷歌的 Mikolov 提出了一套新的词嵌入方法。这种方式在 2018 年之前比较主流,但是随着 BERT、GPT2.0 的出现,这种方式已经不算效果最好的方法了。
这种算法有2种训练模式:
为了提高速度,Word2vec 经常采用 2 种加速方式:
优缺点:
缺点:
推荐资料(这个大佬写得很好):
GloVe 是对 Word2vec 方法的扩展,它将全局统计和 Word2vec 的基于上下文的学习结合了起来。GloVe模型[7]是由斯坦福教授Manning、Socher等人于2014年提出的一种词向量训练模型。上文讲的 Word2vec模型只考虑到了词与窗口范围内邻接词的局部信息,没有考虑到词与窗口外的词的信息,没有使用语料库中的统计信息等全局信息,具有局限性。GloVe模型则使用了考虑全局信息的共现矩阵和特殊的损失函数,有效解决了 Word2vec的部分缺点。
推荐资料:
BERT、GPT2以后再写,鸽了(bushi
1、https://www.gavagai.io/text-analytics/a-brief-history-of-word-embeddings/
1、https://zhuanlan.zhihu.com/p/422542949
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。