本文介绍常见的文本表示模型,One-hot、词袋模型(BOW)、TF-IDF、N-Gram和Word2Vec
一、离散表示
1、One-hot编码
2、词袋(BOW)模型
3、TF-IDF
4、N-Gram模型
二、分布式表示
1、共现矩阵
2、Word2Vec模型
一、离散表示
1、One-hot编码
One-hot编码是非常用的方法,我们可以用One-hot编码的方式将句子向量化,大致步骤为:
- 用构造文本分词后的字典
- 对词语进行One-hot编码
John likes to watch movies. Mary likes too
John also likes to watch football games.
上面的两句话分词后可以构造一个字典,字典内容如下,字典的键是词语,值是ID
{ "John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9, "too": 10}
我们可以根据ID值对每个词语进行向量化,用0和1代表这个词是否出现
# John [1, 0, 0, 0, 0, 0, 0, 0, 0, 0] # too [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
用One-hot编码有明显的缺点:
- 维数过高。我们这里只有短短的2句话,每个词语已经是一个10维的向量了,随着语料的增加,维数会越来越大,导致维数灾难
- 矩阵稀疏。利用One-hot编码的另一个问题就是矩阵稀疏,从上面也可以看到,每一个词向量只有1维是有数值的,其他维上的数值都为0
- 不能保留语义。用这种方式得到的结果不能保留词语在句子中的位置信息, “我爱你” 和 “你爱我” 的向量化结果并没有什么不同。
2、词袋(BOW)模型
词袋模型(Bag-of-words model,BOW),BOW模型假定对于一个文档,忽略它的单词顺序和语法、句法等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立