当前课程知识点:计算思维与人工智能基础 > 第三部分:python基础 > 第十一章:人工智能在自然语言中的应用 > 11.3词向量表示
我们来讨论一下词向量表示
词向量表示是将自然语言表示的单词
转换为计算机能够理解的向量或者矩阵形式
主要包括One-hot
N-gram
共现矩阵以及
Word Embedding 的方法
我们依次来看一下这几种方法
One-hot的方法是将词汇去重取出
按照一定的顺序排列为词汇表
则每个单词表示为一个长度为N的向量
这里N为词汇表的长度
该向量中除了这个词所在的分量为1
其余均为0
来看一个例子
比如我们有这样的一个语料库
I gets up early every day
首先
我们按照字母序
把语料库当中的单词排序
排序的结果是546231
词汇表当中一共有六个单词
因此它会生成一个长度为6的向量
而对于第一个单词I
它出现在第五个位置
所以他会生成向量000010
而gets会生成000100这样的向量
因为他在词汇表当中的顺序是4
显然我们可以看到One-hot存在以下的问题
第一他无法表示语意相近
第二同一单词的不同时态没有区别开
第三One-hot无法表示单词间的位置关系
第四存在维度灾难它的长度很大
N-gram方法可以克服One-hot当中无法表示语意相近的问题
它可以表示单词位置关系所反映的语义关联
我们认为太靠前的词对于词的预测影响不是很大
一个词出现的概率往往仅依赖于该词前面的n-1个单词
这就是N-gram的基本思路
在这里通常m取3
共现矩阵的方法是基于某个词的意思
与跟它相邻的单词紧密相关
这样的思路设计的
首先设定一个窗口对当前单词找其共现单词
再利用共现关系生成共现矩阵
显然这两种方法也同样存在维度灾难的问题
而Word embedding 的方法
是将自然语言表示的单词转换为计算机能够理解的向量
或矩阵形式
通过深度学习的方法
将单词表征为K维的实数值向量
也就是说
把对文本内容分析简化为对一个K维向量空间中的
向量运算的问题
向量空间上的相似度
可以用来表示文本语义的相似度
假设语料库当中有这样的两个句子
S1为 A cat is an animal
S2为A dog is an animal
如果在这个语料库当中
S1一共出现了三千次
而S2仅出现了一次
如果我们使用 N-gram的模型来预测
A什么is an animal
那么这里预测为cat的概率要远远的大于
预测为dog的概率
而实际上我们知道
这两个句子的概率应该是很相近的
如果采用Word embedding 的方法
它可以计算得到两个句子相似的概率
也就是说
相似的词对应的词向量也是相近的
词向量中一个小的变化应该对概率的影响也很小
Word embedding 是目前的主流方法
其中最常用的方法为Word2vec
Word2vec有两种训练方式
一种是CBOW
它利用上下文来预测单词
也就是说在训练时
我们把句子当中的某一个单词去掉
然后利用它的上下文来学习预测该单词
第二种训练方式为Skip-gram
他和CBOW的思路相反
它是通过单词来预测其上下文
-章测试
-章测试
-第一章:python简介
--章测试
-第二章:编码规范
--2.2常量和变量
--章测试
-第三章:数据类型
--章测试
-第四章:基本运算
--4.2比较运算符
--4.3逻辑运算符
--4.4位运算符
--章测试
-第五章:程序控制结构
--5.1顺序结构
--5.2条件结构
--5.3循环结构
--5.4跳转结构
--5.5异常处理
--章测试
-第六章:函数、模块与面向对象
--6.2面向对象
--6.4模块与包
--章测试
-第七章:文件操作
--7.2文件的写入
--章测试
-第八章:python生态库
--章测试
-第九章:TensorFlow基础
--章测试
-第十章:实例分析与实践
--章测试
-第十一章:人工智能在自然语言中的应用
--章测试