NLP学习笔记(1)

news/2024/7/7 9:18:54

实现word2vec 的方法


direct prediction的两个方法:


skip gram模型

在这里插入图片描述

  • 这是skip gram模型,中间dx1的向量就是单词的representation v c v_c vc,Vx1的向量是对所有单词出现在某个单词的语境中的可能性,其中的第o行是 u o T v c u_o^Tv_c uoTvc,表示U这个矩阵的第o行和 v c v_c vc相乘的结果,要通过softmax归一化才能是概率值。然后这从上到下这3个VX1的向量应该是一样的,因为matrix只有一个,所以可能是画错了。
  • 训练方式是从语料库中取window,只更新window内出现的作为正例,负例则在语料库中随机取两个词作为负例。也就是说,并不是每次都取一整个VXd的矩阵,只需要取其中的一行,比如,当center word为deep时,window中出现了learning这个单词,那么只需要取V×d中对应learning的这一行,这样只得到对应learning这一个单词的score。事实上如果真的去算softmax,你还是需要对所有的单词都算一遍score的,也就是说在每个window你都需要算一个dx1乘以V×d的矩阵乘法。但是这样非常浪费,因为对于一个center word,绝大多数单词并不会出现在他的outside word里面,如果可以只从语料库中随机选取一小部分作为负例,把出现的作为正例,能减少很多计算量。这就是skip gram的内在含义,就是说它并不是真的去算softmax,所以真正的loss函数其实是这样的:第二项是从语料库中随机选取5-10个单词作为负例。另外,不会遍历完整个语料库再进行梯度更新,一般是一个window更新一次或者几个window更新一次
    在这里插入图片描述

CBOW模型

在这里插入图片描述


count based的方法:

  • 这类方法主要基于对整个语料库进行co-occurence 计数,即先遍历一遍整个语料库, 记下所有的单词的window里出现的其它单词的总次数,这个V×V的矩阵成为co-occurence matrix, 然后通过对这个矩阵进行SVD操作等,也就是说先将语料库转化成矩阵,后面就对这个矩阵操作就行,这叫count based的word2vec模型。这类方法的性能稍弱于skip gram 在这里插入图片描述

Global Vectors model (GloVe)

  • GloVe事实上结合了skip gram和count based的方法,这里的P就是计数矩阵,而ui,vj和skip gram的一样。GloVe在实践各项指标都很出色。
    在这里插入图片描述
    在这里插入图片描述

评估

  • 对于一个word vector的方法的效果评估分为两方面,一方面是intrinsic,一方面是extrinsic。intrinsic指的是sub function的评估,是指还为用到下游应用的时候,对某些指标如相似性、完备性、计算速度等的评估,这种评估的优点是非常快,缺点是有可能与最终效果的关系不大,比如你花了一个月提高了相似性,最后用到应用上发现提高前和提高后对应用的影响并不大,日常使用可能并不需要专家级的word vector;另一种是extrinsic,指的是应用效果的评估,优点是直接,缺点是很慢,为了评估某个word vector的超参数改变给应用效果带来的影响你可能需要训练一周时间来完成整个流程,而intrinsic你甚至不需要训练。

intrinsic

  • word vector analogies
    希望看到word vector具有这种特性,即woman的向量减去man的向量加上king的向量等于queen的向量。可以对比这样计算得到的向量和queen的向量的差别比较算法的效果
    在这里插入图片描述
  • correlation
    首先请一些研究生来对一些词对之间的相关性给出自己的分数,取平均。然后对word vector也计算同样词对的相关性,看看是否符合正常人的判断,作为算法的效果的评估。word vector之间的相似性可以用欧氏距离也可以用余弦相似度。判断word vector的相似性度量是否符合人类的相似性度量可以计算人类评估的相似性向量和预测的相似性向量之间的相关性
    在这里插入图片描述

extrinsic

  • 常用的是在entity recognition这个任务上的性能,因为他简单实用。用同一个entity recognition的模型,使用用不同方法生成的word vector,检验一下模型的最终效果,就可以评估word vector的好坏从而评估生成word vector算法的好坏

http://www.niftyadmin.cn/n/3658064.html

相关文章

.NET SDK中CorFlags.Exe的用法

CorFlags是.NET Framework中一个用于查看.NET 可执行文件(PE)的运行参数的非常有用的工具,但是这个工具输出的结果不是特别直观,文档中并没有做出解释,本文将用实际例子解释CORFLAGS的用法。首先我们来看一个一般的情况,随便写一个…

pytong之语音环境:edge-tts and edge-playback

系统平台:windows10 一、安装python3.x 二、安装edge-tts(文本转换为声音文件) 启动windows命令行(cmd),执行如下命令: pip install edge-tts 可能会因为网络的问题出现错误。用ping测试pypi.org是否通畅:ping pyp…

嵌入式系统学习笔记(8)——定时器计数器

定时器计数器的操作是通过对SFR的赋值实现的,定时器计数器的结果是通过对SFR的读取得到的。注意T0和T1并不是16位寄存器而是4个8位寄存器,单片机内部只有一个真正意义上的16位寄存器:DPTR。实际上定时器就是计数器,定时是通过对固…

.NET/Rotor源码研究1补遗 - 解决无法检测操作系统版本的错误

最近不少朋友反映在编译Rotor的时候出现无法检测操作系统版本的错误,具体现象为执行env.bat的时候报错:Could not get platform OS version 出现该错误的原因是env.bat会调用env.core.pl设置环境,而env.core.pl在检测操作系统版本的时候会使用…

.NET Main函数参数解释过程和特殊规则

最近正在准备一个小型开发工具的发布工作(具体的内容请容我先卖个关子,等发布之后我会详细给大家介绍的)。在使用时不经意中发现,使用.NET开发的命令行工具的对引号和反斜杠 /和一般命令行程序有着不同的解释规则。举例来说&#…

python 打印表格(如深度学习想打印混淆矩阵)

来源:prettytable confusion_matrix [[0 for j in range(4)] for i in range(4)]for i, j in zip(new_predicted, new_targets):confusion_matrix[i][j] 1tb pt.PrettyTable( ["predicted\\label", class1, class2, class3, class4])for i in range(4)…

SSD论文阅读笔记

SSD: Single Shot MultiBox Detector 论文arxiv链接:https://arxiv.org/pdf/1605.06409v2.pdf 亮点在于对多个size的featuremap产生各自scale的bbox: scale采取的是0-1的归一化scale,假设一共利用了m个大小不同的feature map,就…

Calling Convention的总结

因为经常需要和不同的Calling Convention打交道,前段时间整理了一下它们之间的区别,如下:清理堆栈参数压栈顺序命名规则 (MSVC)备注Cdecl调用者 (Caller)从右往左 FuncName因为是调用者清理Stack,因此允许变参 (如printf)Pascal被…