| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 斯坦福大学CS224N-深度学习与自然语言处理:课程1-笔记 -> 正文阅读 |
|
[人工智能]斯坦福大学CS224N-深度学习与自然语言处理:课程1-笔记 |
课程1-笔记大纲:
关键:词义的结果可以用一个很大的实数向量很好地表示。 课程学习目标:
语言和语意Word2Vec介绍通过离散符号表示单词传统的NLP将单词视为离散的符号,因为在统计机器学习系统中,这些符号是稀疏的,表示这些符号的标准方法例如统计模型就将其整理成向量,OneHot就是其中一种。
一个显然的问题就是需要建立一个跟文字库一样大的向量,比如《新华字典》中有13000个汉字,那么相应的OneHot编码向量的长度就是13000。 另外一个问题就是这种向量没有办法表示单词之间的相关性和相似性。OneHot编码向量在数学中是相互正交的,也就是说任何两个词向量之间都不相关,显然跟实际的语意不符。 通过上下文表示单词分布语意:一个单词的含义是由经常出现在该单词附近的单词决定的。 通过上下文来表示单词的语意是一个重大成功,应用在很多深度学习NLP方法中。 当一个词出现在文本中时,一般是有一个上下文的语境的,而它的含义也由上下文的语境决定。 一般一个单词有两种表示,一种是这个单词作为核心的时候,由它的上下文得到的词向量,另一种是这个单词作为其它单词的上下文时,用于计算其它单词词向量的表示。 词向量(词嵌入)Word2Vec为每个单词建立一个密集向量,这样语意相近的单词词向量也相近,可以通过向量点积来衡量两个单词的相似性。 Word2VecWord2Vec是一种学习词向量的框架。 思想:
Word2Vec目标函数对于每一个位置 t = 1, …, T,预测固定窗口大小m的上下文单词 给定中心词 w t w_{t} wt?,数据可能性为: L ( θ ) = ∏ ? t = 1 T ∏ ? m ≤ j ≤ m j ≠ 0 P ( w t + j ∣ w t ; θ ) L(\theta)=\prod_{\sub{t=1}}^{T} \prod_{\sub{m \leq j \leq m \\ j \neq 0}} P\left(w_{t+j} \mid w_{t} ; \theta\right) L(θ)=∏?t=1T?∏?m≤j≤mj?=0?P(wt+j?∣wt?;θ), θ \theta θ是要优化的模型参数。 目标函数是负的平均对谁似然: J ( θ ) = ? 1 T log ? L ( θ ) = ? 1 T ∑ t = 1 T ∑ ? ? m ≤ j ≤ m j ≠ 0 log ? P ( w t + j ∣ w t ; θ ) J(\theta)=-\frac{1}{T} \log L(\theta)=-\frac{1}{T} \sum_{t=1}^{T} \sum_{\sub{-m \leq j \leq m \\ j \neq 0}} \log P\left(w_{t+j} \mid w_{t} ; \theta\right) J(θ)=?T1?logL(θ)=?T1?∑t=1T?∑??m≤j≤mj?=0?logP(wt+j?∣wt?;θ)。 之所以做对数转换是因为对于计算机来说加法计算处理起来比乘法计算更容易,最小化目标函数即可最大化预测概率。 那怎么计算在给定中心词 w t w_{t} wt?时预测上下文的概率 P ( w t + j ∣ w t ; θ ) P\left(w_{t+j} \mid w_{t} ; \theta\right) P(wt+j?∣wt?;θ)呢? 对于每个单词w都有两种表示向量:
然后对于中心单词c和上下文单词o: P ( o ∣ c ) = exp ? ( u o T v c ) ∑ w ∈ V exp ? ( u w T v c ) P(o \mid c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} P(o∣c)=∑w∈V?exp(uwT?vc?)exp(uoT?vc?)?
这是Softmax函数的一个样例, softmax ? ( x i ) = exp ? ( x i ) ∑ j = 1 n exp ? ( x j ) = p i \operatorname{softmax}\left(x_{i}\right)=\frac{\exp \left(x_{i}\right)}{\sum_{j=1}^{n} \exp \left(x_{j}\right)}=p_{i} softmax(xi?)=∑j=1n?exp(xj?)exp(xi?)?=pi?,Softmax函数可以将任意给定值 x i x_{i} xi?映射为概率分布 p i p_{i} pi?。
怎么训练词向量为了训练模型,我们逐步调整参数,使损失最小化。 θ \theta θ是一个表示我们模型的所有参数的长向量,也就是词向量,每个单词都有两种表示,并且拥有相同的维度。 接下来就是通过梯度下降算法计算所有向量的梯度 以上只是对中心单词参数进行求导,还需要对上下文单词参数进行求导,然后才能进行最小化。 优化:梯度下降我们有一个损失函数
J
(
θ
)
J(\theta)
J(θ),想要最小化它,可以采用梯度下降算法,对于当前参数
θ
i
\theta_{i}
θi?,计算
J
(
θ
)
J(\theta)
J(θ)的梯度,然后朝着负梯度的方向重复缓步更新。 梯度更新公式: θ new? = θ o l d ? α ? θ J ( θ ) \theta^{\text {new }}=\theta^{o l d}-\alpha \nabla_{\theta} J(\theta) θnew?=θold?α?θ?J(θ) 随机梯度下降J ( θ ) J(\theta) J(θ)是语料库中所有窗口的函数(可能有数十亿!),所以 ? θ J ( θ ) \nabla_{\theta} J(\theta) ?θ?J(θ)计算成本很高,可以通过随机梯度下降解决,重复采样窗口并更新。 Word2Vec的效果https://colab.research.google.com/drive/19qBGayk3pVBqsG0RMHz0CduVCdvAj8dw?usp=sharing |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:46:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |