Vector representation and models for word embedding
Vector space model
为了能用数学的方式处理解决NLP问题,必须将language model 向量化、数值化。
方法有: one-hot, 用0和1 标识句子里某个单词出现与否。此时每一个单词可以用一个长度为V(语料库中vocabulary 的数目)的向量来表示。 在此基础上,将一个句子中每个单词的向量相加,就得到了 词袋模型。
词袋模型虽然过去用的比较广泛,但现在已经很大程度上被 word embedding 取代了。
Word embedding
词袋模型的问题在于无法知道不同单词之间是否存在关联, 而单词的意思往往与上下文相关。 例如: buy a car, purchase a car, get a car。 buy, purchase, get都与 a car 结合在一起使用,因此可以认为 这三个词有着类似的意思。基于这一事实, 可以建立一个 co-occurrence matrix 来判断不同单词之间的联系。
建立方式:
- 给定一个text或corpus 作为输入,以其vocabulary的总数目N 建立一个N×N的矩阵
- 设置一个偏移量 Δ, 用以表示 co-occurrence 的距离
- 对于矩阵的每一个元素 wij, 其值对于 第 i 个单词, 第j个单词在偏移距离Δ内出现的次数统计。
- 将第 i 行的所有值作为一个向量 vi, 若向量 vi1与 vi2 越相似(向量长度及向量夹角), 那么说明对应的两个词越相近。
然而,这种方法最大的问题在于矩阵非常庞大,而且非常稀疏。因此必须进行SVD降维处理。
Word2vec 和Glove
由于SVD存在很多限制:例如不能更新模型,一旦有新词加入,只能重新训练。此外, SVD的时间复杂度也很高,而且结果矩阵依然可能维度过高且稀疏。
因此,当前state-of-the-art 是word2vec 和glove。
word2vec
包含两种训练方法:
- Continuous bag of words model (CBOW): 根据上下文, 预测某一个单词出现的概率
-
Skip gram model: 给定一个单词 ,预测它的上下文可能是什么。
word2vec的问题在于没有考虑data中重复数据的情况,也即是说,模型可能在反复学习同一句话的过程中,把部分词的权重加得过高,导致模型偏差。
Glove
与 word2vec思路相似, 采用了 count-based的方法, 并使用 matrix factorization 进行降维。
由于采用了与 co-occurrence matrix 类似的思路,因此可以应对corpus中重复数据的现象。但训练时只考虑不为零的部分。
相关资源
- Glove’s pre-trained vectors
- Pre-trained word vectors for 30+ languages (from Wikipedia)
- UK Twitter word embedding
- Twitter Word2Vec model
- Word2vec tutorial
文本分类
应用实例: 垃圾邮件分类、文本主题划分、情绪分析、语言识别
分类方法
- rule-based classifiers
- 有监督分类
有监督分类训练流程
以twitter sentiment analysis为例,将twitter 分为 positive、negative、 neutral 三类。
![](https://img.haomeiwen.com/i108226/9211d4e223f0ce9f.png)
相关阅读
Text classification with TensorFlow
Sentiment Analysis for reviews using IMDB Dataset with CNN and LSTM
Another Twitter sentiment analysis with Python
网友评论