↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
作者:芦冬生,Datawhale优秀学习者,北京理工大学
自然语言处理( NLP )是信息时代最重要的技术之一,也是人工智能的重要组成部分。NLP的应用无处不在,因为人们几乎用语言交流一切:网络搜索、广告、电子邮件、客户服务、语言翻译、医疗报告等。
近年来,深度学习方法在许多不同的NLP任务中获得了非常高的性能,同时也吸引了越来越多的人加入学习NLP的大潮中。应广大学习者要求,Datawhale正式开启NLP专辑系列,提供NLP入门方向和指引,希望能帮助到大家。
本系列专辑以斯坦福的CS224N教学视频为基础,整理其课堂笔记、拓展作者的理解和学习感悟,帮助大家全面了解NLP深度学习的前沿研究。
现在,我们开启预训练模型(一):Word vector。
本文目录:
1. 人类语言和词义
-
如何表达一个单词的含义
在计算机中如何具有可用的含义
wordNet存在的问题
将单词表示为离散符号
单词作为离散符号存在的问题
通过上下文表示单词
词向量
词义作为神经词向量-可视化
2. Word2Vec介绍
-
Word2Vec概述
Word2Vec:目标函数
带矢量的Word2Vec概述
Word2Vec:预测功能
通过优化参数来训练模型
训练模型:计算所有矢量梯度
3. Word2Vec梯度的导数
-
链式法则
交互式白板会议
计算所有梯度
Word2vec:更多详细信息
4. 常用工具总结
-
梯度下降
随机梯度下降
一、人类语言和词义
1.1 我们如何表示一个单词的含义?
定义:含义(韦伯斯特词典)
一个词或词组表示的意思;
人用这个单词,符号时表达的意思;
一个词在写作,艺术等作品中表达意思。
最普遍的意义语言学思维方式:
能指(符号)⟺所指(思想或事物)
=指称语义
1.2 我们在计算机中如何具有可用的含义?
常见解决方案:使用 WordNet,一个同义词库,包含同义词集和上位词列表(“是”关系)
例如 包含“good”的同义词集
# 导入初始包
# pip install nltkimport nltk
#必须下载对应的wordnet包
nltk.download('wordnet')
from nltk.corpus import wordnet as wn
poses = {'n':'noun','v':'verb','s':'adj(s)','a':'adj','r':'adv'}
for synset in wn.synsets("good"):
print("{}:{}".format(poses[synset.pos()],",".join([l.name() for l in synset.lemmas()])))
例如 "panda"的化身
# 导入初始包# pip install nltk
import nltk
#必须下载对应的wordnet包
nltk.download('wordnet')
from nltk.corpus import wordnet as wn
panda = wn.synset("panda.n.01")
hyper = lambda s: s.hypernyms()
list(panda.closure(hyper))
1.3 像WordNet这样的资源,存在的问题
作为资源很好,但缺少细微差别
例如:“proficient”被列为“good”的同义词,这仅在某些情况下是正确的。缺少单词的新含义
例如,wicked,badass,nifty,wizard,genius,ninja,bombest,不可能保持最新。主观
需要人工来创造和适应
无法计算准确的单词相似度
1.4 将单词表示为离散符号
在传统的自然语言处理中,我们将单词视为离散符号:hotel,conference,motel - 地方代表。单词可以用one-hot向量表示:<仅一个1,其余0s>
motel=[000000000010000]
hotel = [000000010000000]
向量维数=词汇中的单词数(例如:500,000)。
1.5 单词作为离散符号存在的问题
示例:在网络搜索中,如果用户搜索“Seattle motel”,我们希望匹配包含“Seattle hotel”的文档。但是:
motel=[000000000010000]
hotel = [000000010000000]
这两个向量是正交的。one-hot向量没有自然的相似性概念。
《解决方案》
可以尝试依靠WordNet的同义词列表来获得相似性吗?
-
但是众所周知严重失败:不完整等。
替代:学习在向量本身中编码相似性。
1.6 通过上下文来表示单词
分布语义:一个单词的含义由经常出现的单词给出
-
“您将知道它所经营的公司的一句话”(J.R. Firth 1957:11)
现代统计NLP最成功的想法之一!
当单词w出现在文本中时,其上下文是附近出现的一组单词(在固定大小的窗口内)
使用w的许多上下文来构建w的表示
1.7 词向量
我们将为每个单词构建一个密集的向量,并选择它,使其类似于出现在相似上下文中的单词的向量。
注意:单词向量有时也称为单词嵌入或单词表示形式,它们是分布式表示形式。
1.8 词义作为神经词向量-可视化
二、Word2vec介绍
Word2vec使用两层神经网络结构来为大量文本数据的语料库生成单词的分布式表达,并在数百维向量空间中表达每个单词的特征。在该向量空间中,假设在语料库中共享公共上下文的词彼此相似,并且将向量分配给这些词,以使它们在向量空间中彼此接近。
Word2vec(Mikolov et al.2013)是用于学习单词向量的框架。想法:
我们有大量的语料库;
固定词汇表中的每个单词都由一个向量表示;
遍历文本中的每个位置t,该位置具有中心词c和上下文(“outside”)词o;
使用c和o的词向量的相似度来计算o给定c的概率(反之亦然);
不断调整单词向量以最大程度地提高这种可能性。
2.1 Word2Vec概述
采样窗口和计算下图的过程:
下一步:
2.2 Word2vec:目标函数
对于每个位置 ,在给定中心词 的情况下,在固定大小 的窗口中预测上下文词。
对于 是所有要优化的变量。
目标函数 是平均负对数似然度:< :有时称为成本或损失函数>
我们想要最小化目标函数:
问题:怎样计算