NLP 理论实践 Task5 文本表示
词袋模型:离散、高维、稀疏。
分布式表示:连续、低维、稠密。word2vec词向量原理并实践,用来表示文本。
word2vec http://www.hankcs.com/nlp/word2vec.html
word2vec 中的数学原理详解(一)目录和前言 - peghoty - CSDN博客 https://blog.csdn.net/itplus/article/details/37969519
word2vec原理推导与代码分析-码农场 http://www.hankcs.com/nlp/word2vec.html
one-hot
最初,人们想用一串数字表示一段文字,用的是one-hot置换法。就是将一篇文章中所有不重复的词的个数,作为词汇表的大小,词汇表有多大,这个向量就有多长。那么对于词汇表中每一个词的向量,就在相应的位置置1. 比如说一篇文章中有:
语料:“I am Shirley Zhang”, “I am an engineer”, “I am a lovely girl”
那么由语料中出现的所有不重复的单词构成的词汇表就是
[Shirley, Zhang, I, am, an, engineer, a, lovely, girl]
那么根据以上词汇表,得出Shirley这个词的词向量就是[1, 0, 0, 0, 0, 0, 0, 0, 0]
那么对于文本“I am Shirley Zhang”, 通过one-hot这种词向量转化就变为
[0, 0, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 0, 0, 0, 0, 0, 0, 0]
one-hot编码的好处就是简单,缺点也是显而易见的,词向量的维度会随着词汇表的增大而急剧增大,词向量里面大多数的元素都是0,十分浪费存储空间,表达效率低下。也没有考虑到上下文等语义信息。
word2vector
word2vector,顾名思义,就是将语料库中的词转化成向量,以便后续在词向量的基础上进行各种计算。最常见的表示方法是counting 编码。
缺陷:
1是词语数量较大时,向量维度高且稀疏,向量矩阵巨大而难以存储
2是向量并不包含单词的语义内容,只是基于数量统计。
3是当有新的词加入语料库后,整个向量矩阵需要更新。