词向量到word2vec与相关应用
NLP常见任务:
1.自动摘要
2.指代消解 小明放学了,妈妈去接他,小明(他)
3.机器翻译 小心地滑 翻译成:slide carefully
4.词性标注
5.分词(中文、日文等)
6.主题识别 topic model BAT
7.文本分类
处理方法:HMM、CRF、SVM、LDA、CNN...
token vector(分词向量)RNN、LSTM
向量空间子结构:
Vking-Vqueen+Vwomen=Vman
Vking-Vqueen=Vman-Vwomen
Vking与Vqueen之间的差异与Vman与Vwomen之间的差异相同
最终目标:词向量表示作为机器学习,特别是深度学习的输入和表示空间
one-hot编码表示:
John likes to watch movies,Mary likes too. [1,2,1,1,1,0,0,0,1,1]
John also likes to watch football games. [1,1,1,1,0,1,1,1,0,0]
缺点:虽然有词权重,但是词在文档中的顺序没有被考虑。
TF-IDF(Term Frequency -Inverse Document Frequency)
词t的IDF weight log(1+N/nt) N:文档总数 nt:含有词t的文档数
[0.693,1.386,0.693,0.693,1.099,0,0,0,0.693,0.693]
Binary weighting 短文本相似性,Bernouli Naive Bayes
[1,1,1,1,1,0,0,0,1,1]
只有权重不能确定顺序,比如:i love you 和 you love i 的意思并不具体
离散表示: Bi-gram 和 N-gram
为2-gram建立索引:相邻的两个词汇进行分配顺序:
”John likes":1,
"likes to":2,
"to watch":3,
"watch movies":4,
"Mary likes":5,
"likes too":6,
"John also":7,
"also likes":8,
"watch football":9,
"football games":10.
一句话出现概率:每个词的概率相乘
Unigram/1-gram
P(Mary likes too)=P(too|Mary,likes)*P(likes|Mary)*P(Mary)
=P(too)*P(likes)*P(Mary)
Bigram/2-gram
P(Mary likes too)=P(too|likes)*P(likes|Mary)*P(Mary)
酒店、宾馆、旅舍不好捕捉其含义
分布式表示:例:
红色的大型卡车
黄色的中型SUV
紫色的小型电动车
示例中有:颜色20种,型号3种,车型30种
所以需要记忆的单元数为20×3×30种
而分布式表示:20+3+30
用一个词附近的其他词实现共现矩阵 word-word (一定是个对称矩阵,对角线为0)
counts | i | like | enjoy | deep | learning | NLP | flying |
i | 0 | 2 | 1 | 1 | 1 | 1 | 1 |
like | 2 | 0 | 1 | 1 | 1 | 1 | 1 |
enjoy | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
deep | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
learning | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
NLP | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
flying | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
使用SVD进行降维:
m×n阶=m×r阶×r×r阶×r×n阶
for i in xrange(len(words)):
plt.text(V[i,0],V[i,1],words[i])
计算量随语料库和词典增长膨胀太快,对X(n,n)维的矩阵,计算量O(n^3),而对大型的语料库,n~400k,语料库大小1~60Btoken
直接从语言模型出发,将模型最优化过程转化为求词向量表示的过程
例:我爱北京天安门
分为"我,爱,北京,天安门"四个词组。
目标函数:L() = logP(Wt|Wt-n+1,...,Wt-1)
(1)使用了非对称的前向窗口函数,窗长度为n-1
(2)滑动窗口遍历了整个语料库求和,计算量正比于语料库大小
(3)P(W|Wt-n+1,...Wt-1)=1 W{vacabulary}
Word2Vec:CBOW(连续词袋)
INPUT PROJECTION OUTPUT
我喜欢机器学习分成分词:我,喜欢,机器,学习,机器学习
Continue Backforwards
特点:1.无隐层
2.使用双向上下文窗口
3.上下文词序无关(BOW)
4.输入层直接使用低维稠密表示
5.投影层简化为求和(平均)
所有维度进行求和
维度减少的两个方法:
1.CBOW的层次softmax方法(使用Huffman树)编码输出层词典
2.负例采样
总体思路:
假设需要降数量级降为500个样本:1个正样本,499个负样本
现在我们有10W个样本,如何采样到这499个负样本呢?
假设:我喜欢你 相对词频取 200 100 200
len(我)=200 / (200+100+200)同理得到len(喜欢),len(你)
将每个len值×10
将每个len值乘出来的结果划分为不同区域,也就是三个区域
在[1,10-1]范围内抽取随机数(抽499次)
看随机数落在哪个区域,结果对应着”我“ ”喜欢“ ”你“
最后获得499个负例样本。
总结:
Word2Vec问题:对多义词无法进行很好的表示和处理,只使用了唯一的词向量