nlp从one-hot到word2vec的文本表示方法
1、离散表示方法(Local Representation)
-
One-hot-encoding
1、构造文本分词后的字典,每个分词用0或1表示;
2、每个分词的文本表示为该分词的比特位为1,其他位为0;
例如:Tangjie likes to watch movies. Mary likes too
Tangjie also likes to watch basketball games.
以上两句可以构造一个词典,{“Tangjie”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too”: 10} 词典的value值是词的序号 。
那么用one-hot表示为:
Tangjie: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] …以此类推。
向量的长度是词典的大小,对应出现的位置标为1,其他位置为0。
缺点:
1、随着语料库的增加,词典会变大,那么数据的维度就会变得越来越大,从而生成一个很稀疏的矩阵。
2、用one-hot表示方法没有把单子在句子中间的顺序表示出来。
3、单词的相似度无法计算:例如:Tangjie和likes的欧式距离和余弦相似度等于根号2;Tangjie和basketball的欧式距离和余弦相似度也是等于根号2。因此无法表示语义。
4、表达能力弱,这个怎么理解呢,就是说相同维度的onehot表示方法和word2vec表示方法,他们可以表示的单词个数,Wordvec远远大于one-hot。 -
词袋模型
文档的向量表示可以直接将各词的词向量表示加和。例如:
Tangjie likes to watch movies. Mary likes too
Tangjie also likes to watch basketball games.
以上两句可以构造一个词典,{“Tangjie”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too”: 10}
那么第一句的向量表示为:[1,2,1,1,1,0,0,0,1,1],其中的2表示likes在该句中出现了2次,依次类推。
缺点:
1、词向量化后,词与词之间是有大小关系的,不一定词出现的越多,权重越大。
其他的跟ont-hot缺点差不多 -
TF-IDF(term frequency–inverse document frequency)
这里的idf可以理解为单词的重要性。
缺点:
不能反应词的位置信息,例如在对关键词进行提取的时候,词的位置信息,如文本的标题、文本的首句和尾句等含有较重要的信息,应该赋予较高的权重。
2、分布式表示(Distributed Representation)
首先先理解一下什么是局部表示什么是分布式表示:局部表示(Local Representation)中,每一个元素(如词向量中的一个元素、神经网络中的一个神经元)表示一个实体(词汇);而在分布式表示(Distributed Representation)中,一个实体(词汇)是由多个元素表征的,同样,一个元素也不仅只涉及到一个实体。(举一个生活中的例子:厨房现在有一些食材,厨师需要根据食材做菜,那么局部表示的厨师做菜的风格是一道菜中只有一种食材;然后分布式的厨师做菜风格是一道菜中包含了多种食材)
基于分布式表示的思想,我们构建一个密集向量(Dense Vector)来表征一个词汇。使用向量点积表征词汇含义相似度,这就是Word2Vec方法的基本思想。即
- 将词典中的每一个词都用分布式实数词特征向量表示以对抗维度灾难;
- 基于该特征向量表达词序的联合概率函数;
- 同时学习词特征向量与概率函数的参数。
Wordvec的缺点:
- 不考虑上下文(语境)(BERT、ELMO可以解决)
- 共现窗口有限(RNN、LSTM)
- 无法有效学习低频词向量
- 有些单词没有出现在词库中(OOV)
- 可解释性不够