Representation
首先,我们要介绍一下,什么是所谓的文本表示,或者词嵌入的概念。
文本表示的作用,就是将非结构化的信息转化为结构化的信息,这样就可以将文本信息做计算,来完成我们日常所能见到的文本分类,情感判断等任务。
为什么要进行文本表示呢?这是因为文本本身是无法计算的,必须要转化为结构化的信息才可以计算。
文本表示的方法很多,有3类:
- 独热编码:one-hot representation
- 整数编码
- 词嵌入 | word embedding
独热编码 | one-hot representation
向量里每一个位置都代表一个词,用one-hot表示就是:
这种方式有如下缺点:
- 词之间的关系无法表达
- 存储的会比较长,太过于稀疏了
- 如果遇到新词,也不好表达,对原来的vector会有影响
整数编码
用一个数字来表示一个词。这个方法着实不太好,基本没有什么用了。
什么是词嵌入(word embedding)
是文本表示的一类方法。是通过低维向量来表示,不像one-hot那么长。优势是:
- 可以将文本通过一个低维向量来表达,不像one-hot那么长
- 语义相似的词在向量空间上也会比较相近
- 通用性很强,可以用在不同的任务中
这里我们还是要看看Word2vec
、GloVe
两种表示方法:
神经语言模型:NNLM模型
- 考虑一个词表D的大小为N(相当于总共有N个词,词用w表示)
- 每个词w的维度为m,比如对于one-hot编码,则N=m
- n表示词w的上下文中包含的词数,不超过5
三层神经网络计算 。
- 首先第一层输入是前n-1个词 去预测第t个词W_t的概率
- 然后根据前n-1个词,在词汇表中找到它们的向量
- 最后把所有词向量直接串联起来成为一个维度为 (n-1)*m 的向量 x 作为接下来三层神经网络的输入
- 隐藏层到输出层之间有大量的矩阵向量计算,输出层之后,还需要做softmax归一化计算
但是这里有个问题,就是输入层应该也是需要调整的。
首先后面一层作为预测分类的输出节点,每一个节点就代表一个分类,如图所示,那么这7个节点就代表着7个分类的模型,任何一个节点的激励函数都是:
这种激励函数通常用在神经网络的最后一层作为分类器的输出,有7个节点就可以做7个不同类别的判别,有1000个节点就可以做1000个不同样本类别的判断。
语言模型构建好,就训练参数,参数包括:
- 词向量矩阵C;
- 神经网络的权重;
- 偏置等参数
它这个训练,会不断的调整输入的向量(vector),让模型收敛。
Word2vec
是Word Embedding方式之一,将词转化为“可计算”、“结构化”的向量过程。(现在属于BERT、GPT的时代,但是了解它也是需要的)。
Word Embedding 的模型本身不重要,重要的是生成出来的结果 -- 词向量。
Wordsvec的2种训练模式:
CBOW(Continuous Bag-of-Words Model)
通过上下文来预测当前值,相当于一句话中扣掉一个词,然后猜测这个词是什么?Skip-gram
给你一个词,用来预测上下文。猜前后的词是什么。