nlp处理方法
人工创造dict
基于统计 hmm,crf,svm
bag of words
one-hot
1xn矩阵只有一个元素是1,其他是0
john likes to watch movies Mary likes too -> [1,2,1,1,1,0,0,0,1,1]或[1,1,1,1,1,0,0,0,1,1]
john also likes watchfootball games
用于tf-idf weight : log(1+N/nt) N总数,nt含t文档数
bi-gram n-gram
bag of words 不能区分i love you 和you love i/me
用2-gram john likes :1 likes to:2 ···
考虑了 词顺序 但 模型参数多
1 :2 *10 2 : 4*100 3 :8*1000 4 :16*10000 类似这样
朴素概率
1-gram
p(w1,w2,w3) = p(w1) x p(w2|w1) x p(w3|w1,w2)= p(w1) x p(w2) x p(w3)
2-gram
p(w1,w2,w3) = p(w1) x p(w2|w1) xp(x3|x2)
问题: 无法衡量词间关系
酒店[1,0,0,0]
宾馆[0,1,0,0]
旅社[0,0,1,0]
及语料膨胀
解决方法之1 分布式表示
list1[] x list2[] xlist[3]
list1 + list2 +list3
共现矩阵(Cocurrence matrix)
i like deep learning
i like nlp
i enjoy flying
i like enjoy 接近
window length 设为1(一般5-10)
向量维数太大 空间消耗大 且过稀疏
解决方法 用svd pca 降维
svd O(n^3) 计算量过大
nnlm(Neural Network Language model)
目标 L = Σlog P(wt|w t-n-1,···,w t-1)
窗口长度 n-1
max L
all w ΣP(w|w t-n+1,···,w t-1)=1
用最下 w1 w2 w3 来预测 最上 w4
w1,w2,w3都是 one-hot矩阵 1 x 10w
从最下到上 第一层 projection layer Matrix C ,C是投影矩阵 300 x 10w
C 把 w1 从10w降到300
C * w1(T)
[C * w1(T), C * w2(T) ,C * w3(T) ] concat 将300 x 1 合为 900 x 1
上一层 hidden layer 500个节点 得到 900 x 500
#运用deep learning 里的 tanh 函数
输出层 softmax y=wx+b 得到1 x10w 概率向量 最大的就是结果
word2vec cbow(连续词袋)
目标函数 第一个 应该是∏ 不是∑
无隐层
用上下文预测该词
目标函数 第一式与第二式 log exp
将hidden 和projection 合2为1
300维 到10 w 维 计算量太大
1
用 树的结构 (哈夫曼树) 把权重放在节点 2分决策
在节点i上做决策时 该点为逻辑回归模型 向左走 1/(1+e -Θix) 向右走1-1/(1+e -Θix)
降低计算量log2
max 概率连乘
2 负例采样
把 10w 压缩到 500
1个正 v-1个负(v=500) 负代表 错误向量
用 词频/总次数 x M 做该次的段
1 love you
200 100 200
2/5 2/5-3/5 3/5-1
skip-gram
与cbow相似
wordtovec
无法处理 apple 和手机apple
特定词意
极大样本 用skip-gram
好用网站
http://textminingonline.com/dive-into-nltk-part-ii-sentence-tokenize-and-word-tokenize