1. 单词含义的表示
我们如何表示一个单词的意思
下面是意思的定义:
- 用词语,语句表示的想法或观点
- 人们使用词汇,符号来表达的想法
- 在一篇文章和艺术品表达的观点
最常见的意思语言学表现形式: - 符号⟺被标记的观点或者事物= 含义
我们如何在表示可用的单词意思
常见的答案是:使用一个分类系统,例如想WordNet一样,分类系统包含了上义词关系和同义词集合。
我们这种离散表示(discrete representation)方法的缺点
- 单词数量非常多但是忽视了单词之间的细微差别
例如同义词:
adept, expert, good, practiced, proficient, skillful?
- 不能及时更新新单词:
wicked, badass, nifty, crack, ace, wizard, genius, ninja
- 具有主观性
- 需要人工创建和调整
- 很难准确地计算出单词相似性
绝大数基于规则和统计学建立的NLP工作将单词当作最小单位(atomic symbols):hotel, conference, walk
但是在向量空间中,单词可以表示为具有1个1和很多0的one-hot向量:
这是一种局部表示(localist representation)
从符号(symbolic)到分布式表示(distributed representations)
符号表示存在自身的一些问题,比如对于web搜索:
- 如果我们搜索[Dell notebook battery size],我们可能得到含有“Dell laptop battery capacity”的文档
- 如果我们搜索[Seattle motel],可能匹配到含有“Seattle hotel”的文档。
但是
查询和文档向量是正交的,所以one-hot向量不能体现出单词的相似性。
因此,我们需要找到一种可以直接用向量编码含义的方法。
基于分布相似性的表示方法
从上下文中推断一个单词的含义
下面是现代统计自然语言处理(NLP)最成功的思想之一:
通过向量定义单词的含义
通过为每个单词类型构建一个密集的向量,我们可以预测其上下文中出现的其他单词。
这些其他单词也是用向量表示,并且是可递归调整的。
学习神经网络词嵌入的基本思想
定义一个可以预测中心词上下文的模型:
所示函数:
其中,在一个很大语料库的不同位置获取上下文(不同的t),不断调整词向量以将损失最小化。
直接学习低维词向量
这种方法不是新颖的,下面是相关的研究论文和深度学习方法:
- Learning representations by back-propagating errors
(Rumelhart et al., 1986) - A neural probabilistic language model (Bengio et al., 2003)
- NLP (almost) from Scratch (Collobert & Weston, 2008)
- A recent, even simpler and faster model:
word2vec (Mikolov et al. 2013) àintro now
2. Word2Vec的主要思路
一句话总结:
“在每个单词和单词上下文之间进行预测”
- 两个算法:
- Skip-Gram(SG)
通过给出的中心词来预测上下文(假设单词之间相互独立) - 连续词袋模型(CBOW)
从上下文中预测中心词(目标词)
- 两个优化的训练方法:
- Hierarchical softmax
- Negative sampling(负采样)
Skip-Gram