NLP降临在我身边 9

依旧是没有代码实现的博客,我就是所谓的Datawhale之耻吧。(悲)
这次学的是word2vec。

文本表示:从one-hot到word2vec

词袋模型:离散、高维、稀疏

one-hot将词语含义存储于不同的dim上,例如下面的文本:
[‘我’,‘用’,‘钢笔’]
这里已经经过分词处理。进行one-hot编码后,可以是这样:
{‘我’:001,‘用’:010,‘钢笔’:100}
我们这里认为机器只认识二进制数字。转化成十进制来理解,可以认为是1、2、3,即一个数字代表一个词语,一一对应。
one-hot编码有诸多弊端,包括但不限于:

  1. 当语料过多时,维度(dim)会变得非常巨大。
  2. one-hot编码难以表示词语之间的关系。

最具有代表性的就是词袋模型,其特性为离散、高维、稀疏。
为了解决这些问题,Hinton在 1986 年提出了Distributional Representation,可以在一定程度上改善one-hot的不足。

拍扁词袋

先举一个小的例子,假设我们有一个dim=5的词袋。
从数学角度理解,这个词袋有5个维度,每个维度代表一个词。
现在把这个词袋拍扁,拍成dim=3的词袋。假设语义运算是线性的,那么从dim=5变成dim=3的过程,是一个线性变换。在这个过程中发生了什么?
假设我们知道在dim=5的词袋中,有两个词并不是完全独立的,而是可以被其他三个词通过运算表达出来的。这样一来,这两个维度的独立性就可以被舍弃,将其“关联”抽出,从而把dim从5拍成3。
被抽出的“关联”哪去了?这些关联是我们的语言中的“阐述”,本来就在我们的语言系统中。举个例子:
[ 苹果=水果+红+甜+常见+长在树上 ]
通过后面词语对“苹果”的阐述,我们知道了苹果的含义。这些“阐述”存在于我们的语言系统中,我们在创作文本时自然会使用这些关联,反过来说,分析文本即可得出词语之间的关联。
这样一来,我们得到了如下的公式:
dim(语料) = dim(基本词) + dim(阐述)
各大出版社的字典就是这么干的。英文牛津字典附录“释义词”,明确告诉读者,前面的“解释”不会用到释义词以外的词。也就是说,词典的正文就是“阐述”,而释义词是“基本词”,两项加起来,构成了词典(语料)。
这样,分布式表示的奠基就完成了。

分布式表示

现在来个大点的栗子。
假设我们从一堆“有逻辑”的文本中总结出了一个dim=2000的词袋,即里面存储了2000个词语。我们认为在文本运用中,这些词语都得到了恰当而符合逻辑的使用。现在我要把这个词袋拍扁,变成dim=500的词袋。
第一步我需要分析文本,把被裁员的1500个词与500个基本词的关联找出来。
第二步就可以把词袋压缩为dim=500,然后把每个词都表示成一个dim=500的权重向量。
我们得到了两个产物,分别是:

  1. 2000个one-hot编码的词向量,dim=500,是权重,计为w
  2. 500个基本词,计为v

如果需要某一个词的表示,求w*v(权重*基底)即可。
这就是本人理解的分布式表示了。

word2vec词向量原理

由于本人数学知识匮乏、阅读能力底下,因此仍然没有完全理解word2vec的具体原理,只是大致清楚其流程。
实际上我连word2vec“到底是什么”这件事也没有搞清楚。尽管我大致知道词向量怎么得出,但是我仍然无法理解为什么word2vec能拥有好几种模型,包括CBOW,Skip-gram,还有一个不知道怎么定位的负采样模型。
我觉得word2vec可能只是一种名号吧。
在word2vec中,one-hot编码采取哈夫曼编码方法,优化空间占用率。
CBOW,Skip-gram两者的差别在于:CBOW通过上下文预测中心词概率,而Skip-gram模型则通过中心词预测上下文的概率。二者的共同点是结构都类似神经网络,有接近输入层、隐藏层、输出层的三层结构。
我所获知的信息还有一条,{语言模型}与{词向量}是两个不同的产物
由于知识水平与理解能力有限,我无法很好地理解语言模型和词向量分别是什么东西。但我觉得在未来的学习中,我会渐渐明晰二者之间的联系。过往的学习经历告诉我,紧密关联的名词绝不可混淆,其区别可能正是理解的核心。在这里先立下flag。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值