为把人们所理解的自然语言 让 计算机也能够 认识并且操作,需要将人的语言(即文字)转换成计算机的语言(即数字)
我们将其称为词向量。
把文字转换成词向量有多种编码方式:大致分为两类,离散表示和分布式表示。
离散表示即 无法衡量词与词之间的关系,即在编码过程中并不考虑词的顺序,以此为代表的编码方式包括:
one-hot
bag of words
TF-IDF
N-gram
分布式表示 即用一个词附近的其他词来表示这个词。以此为代表的编码方式包括:
共现矩阵
NNLM 神经网络语言模型
CBOW(continue bag of words)
接下来简单介绍这几种编码方式的特点:
one-hot:把语料中的所有词列在一个词典中,每个词都有唯一的索引,在词典中的顺序与在语料中的顺序无关,如果词典 里有十个词,那么这个词典就是1*10维的,对于语料中的每一个词,都构造一个1*10维的向量,其中语料中的词出现过一次或者多次,多记为1,没出现过则记为0.
缺点:
词矩阵太稀疏,并且没有考虑词出现的频率。
Bag Of Words: 词袋模型,会统计词在语料中出现的次数
是one hot词向量的加和。用元素的频率表示文本的特征。
TF-IDF:是一种统计方法 用以评估一个词对于一个文本的重要程度
其中 TF是衡量一个词在文档中出现的多频繁 TF(t)=(t在文档中出现的次数)/(文档中总的词数)
IDF是衡量一个词有多重要,IDF(t)=log(文档总数/包含有t的文档数)
TF-IDF =TF*IDF
词的重要性随着 词在文档中出现的次数 正比增加,并且随着词在语料库中出现的频率 呈反比下降。
即词在文本中出现的频率越高,而在其他文档中出现的频率越低 ,越能更好做分类。
N-gram,N代表是几元分词,(比如 如果是bi-gram就是二元分词, 用每两个相邻的词作为一个词作 构建向量)
离散表示具有的缺点:
1 词表维度随着语料库增长膨胀
2 n-gram词序列随着语料库膨胀更快
3 数据稀疏的问题
————————————————————以上是离散表示————————————————————————————
————————————————————以下是分布式表示————————————————————————————
共现矩阵: 主要用于发现主题,(n个词共同出现的次数),使用一个对称的局域窗,窗口的大小表示词左右的几个词,将共现矩阵的行 或者 列作为词向量,
缺点: 向量维数随词典大小线性增长 解决方法:降维 PCA SVD
存储整个词典所需空间消耗巨大
矩阵稀疏
NNLM: 神经网络语言模型 用前N个词去推测最后一个词
CBOW :用左右附近的词去推测中间的词,相比NNLM 去掉了隐层,用求和代替拼接。
word2vec:skip-gram与CBOW完全相反的思路 ,是通过 当前这个词去预测其之前之后的词。
缺点:对多义词无法很好的表示。