一 NLP常见任务
1 自动摘要
2 指代消解 小明放学了,他妈妈去接他
3 机器翻译 小心 ---> care
4 词性标注 heat(n)
5 分词(中文,日文等) 大水沟/很/难/过
6 主题识别
7 文本分类
二 NLP处理方法
传统: 基于规则
p现代: 基于统计机器学习
HMM, CRF, SVM, LDA, CNN…
“规则”隐含在模型参数里
词编码需要保证词的相似性:
简单 词/短语 翻译:
向量空间子结构:
VKing - VQueen + VWomen = VMan
VParis - VFrance + VGerman = VBerlin
最终目标: 词向量表示作为机器学习、 特别是深度学习的输入和表示空间。
在计算机中表示一个词:
猫 美丽
❖动物 ❖多姿
❖胎生 ❖靓丽
❖有毛 ❖好看
❖弹跳性好 ❖俊俏
❖体型小 ❖迷人
❖宠物 ❖标志
❖吃肉 ❖端庄
问题:
1.不能分辨细节的差别 2.需要大量人为劳动 3.主观 4.无法发现新词 5.难以精确计算词之间的相似度。
离散表示: One-hot表示:
语料库
John likes to watch movies. Mary likes too.
John also likes to watch football games.
词典
{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also":
6, "football": 7, "games": 8, "Mary": 9, "too": 10}
One-hot表示
John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
too : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
…
❖词典包含10个单词, 每个单词有唯一索引
❖在词典中的顺序和在句子中的顺序没有关联
三 语言模型:
一句话 (词组合) 出现的概率:
Unigram/1-gram
Bi-gram/2-gram
无法衡量词向量之间的关系
酒店 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
宾馆 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0] 各种度量(与或非、 距离都不合适
旅舍 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0] 太稀疏, 很难捕捉文本的含义
Ø词表维度随着语料库增长膨胀
Øn-gram词序列随语料库膨胀更快
Ø数据稀疏问题
分布式表示 (Distributed representation):
用一个词附近的其他词来表示该词 :
“Youshallknowawordbythecompanyitkeeps”
(J.R.Firth1957:11)
现代统计自然语言处理中最有创见的想法之一。
共现矩阵 (Cocurrence matrix):
Word - Document 的共现矩阵主要用于发现主题(topic), 用于主题模型, 如LSA (Latent Semantic Analysis)局域窗中的Word - Word 共现矩阵可以挖掘语法和语义信息。
•Ilikedeeplearning.
• IlikeNLP.
• Ienjoyflying.
windowlength设为1(一般设为5~10)
使用对称的窗函数(左右windowlength都为1)
将共现矩阵行(列)作为词向量存在的问题:
•向量维数随着词典大小线性增长
•存储整个词典的空间消耗非常大
•一些模型如文本分类模型会面临稀疏性问题
构造低维稠密向量作为词的分布式表示 (25~1000维)!
SVD降维:
Ø最直接的想法: 用SVD对共现矩阵向量做降维。
SVD存在的问题:
Ø计算量随语料库和词典增长膨胀太快, 对X(n,n)维的矩阵, 计算量O(n^3)。 而对大型的语料库,n~400k, 语料库大小1~60B token。
Ø难以为词典中新加入的词分配词向量
Ø与其他深度学习模型框架差异大
NNLM (Neural Network Language model):
结构:
word2vec: CBOW(连续词袋):
CBOW: 层次Softmax:
Sigmoid函数
Ø[[n(w,j+1)=ch(n(w,j)]] 是选择函数, 表明只选择从根节点到目
标叶节点路径上的内部节点
Øn(w,j): Huffman数内部第j层的节点
Øch(n(w,j)): n节点的child节点
CBOW: 负例采样:
P(w|context(w)): 一个正样本, V-1个负样本, 对负样本做采样
损失函数: 对语料库中所有词w求和:
Word2Vec: Skip-Gram模型:
Word2Vec: 存在的问题:
Ø对每个local context window单独训练, 没有利用包含在global co-currence矩阵中的统计信息。
Ø对多义词无法很好的表示和处理, 因为使用了唯一的词向量。
词嵌入可视化: 公司 — CEO:
词嵌入可视化: 词向
词嵌入可视化: 比较级和最高级:
词嵌入效果评估: 词类比任务:
GloVe与Word2Vec对比:
GloVe随着迭代次数增加, 精度提升。
Word2Vec未使用类似迭代次数的Epoch, 用Negative Samples模拟。
五 总结
离散表示
•One-hot representation, Bag Of Words Unigram语言模型
•N-gram词向量表示和语言模型
•Co-currence矩阵的行(列)向量作为词向量
❖分布式连续表示
•Co-currence矩阵的SVD降维的低维词向量表示
•Word2Vec: Continuous Bag of Words Model
•Word2Vec: Skip-Gram Model
工具google word2vec:
工具gensim:
工具gensim中文处理案例:
Word2vec+CNN做文本分类:
论文详见《Convolutional Neural Networks for Sentence Classification》
http://arxiv.org/abs/1408.5882
Theano完成的代码版本:
https://github.com/yoonkim/CNN_sentence
TensorFlow改写的代码版本:
https://github.com/dennybritz/cnn-text-classification-tf
添加分词和中文词向量映射之后, 可用于中文文本分类(情感分析)
关注机器学习,深度学习,自然语言处理等方面的知识。 有什么问题随时和我交流。
閱讀更多 機器學習與數據挖掘 的文章