精华内容
下载资源
问答
  • 关于一项对国外硕士论文引言语类研究 小编为您提供一篇关于关于一项对国外硕士论文引言语类研究毕业论文开题报告,欢迎参考! 摘要: *依据swalescars 模式, 对50 篇国外语言学方向硕士论文引言进行了语类...
  • 本文旨在研究普通话中零主语现象,这是一种以话语为导向激进前言语言,以及造成该语言中是否存在明显主语代词因素。 对11名中国高中生进行了问卷调查,以收集有关以汉语为母语母语使用者使用空语数据。 ...
  • 内蒙古工业大学 理学院物理系 内蒙古呼和浩特 010051)摘 要:本文结合Matlab语言的特点,对大学物理教学内容适当应用matlab模拟,使一些物理现象直观观察到,让学生体会到学习物理并非枯燥乏味,而是一种乐趣,以此...

    导读:本文是一篇关于大学物理教学改革论文范文,可作为相关选题参考,和写作参考文献。

    (1.长江师范学院大学物理教研室 重庆 408100, 2.内蒙古工业大学 理学院物理系 内蒙古呼和浩特 010051)

    摘 要:本文结合Matlab语言的特点,对大学物理的教学内容适当应用matlab模拟,使一些物理现象直观的观察到,让学生体会到学习物理并非枯燥乏味,而是一种乐趣,以此激发学生学习的兴趣,达到教学改革的目的.

    关键词:大学物理 改革 MATLAB

    中图分类号:G642.0文献标识码:A文章编号:1672-3791(2013)03(c)-0214-01

    大学物理是理工科院校学生必修的一门基础课,一般在大一的下学期开设,这时学生虽然有一定的数学基本知识,但由于物理教学仍停留在理论的层次上,繁琐的数学推导,让学生感觉到大学物理的理论性太强,与实际应用偏离很大,这导致一部分学生失去学习物理的兴趣,这一现象引起物理教师的对如何讲授大学物理做了一系列的探索改革,主要在教学方法上、教学内容上以及教学手段上都做了相应的改革方式,关于大学物理改革方法的文章也很多,如闫玉丽撰写的关于大学物理教学改革的思考[1],管薇的工科大学物理教学改革的思考[2],张明霞浅谈大学物理教学改革[3]等等.

    如今,计算机技术的迅速发展,给我们提供了强大的计算能力,如mathematic、matlab等具有计算能力并有作图功能的软件被引入到物理教学当中,尤其是matlab,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成一个方便、界面友好的用户环境[4].大学物理课程中有许多抽象、复杂的物理规律和现象,用传统的方法讲授会使教学受到一定的限制.本文结合matlab语言特点,对大学物理的教学内容适当运用matlab模拟,让学生体会到学习大学物理的乐趣,激发他们的学习兴趣.

    1. Matlab在大学物理教学内容中的模拟应用

    1..1 Matlab在质点力学中的应用

    运动学对刚刚进入大学校园的大一学生来说,既熟悉又陌生,内容上都接触过,但计算方法是大学学过的微积分,看似多了这么一点,给学生却带来很大的困扰.一部分学生由于微积分没学好,感觉物理难学,还有的学生觉得是高中的知识,简单,对大学物理也不够重视,等等原因,导致学生对大学物理失去兴趣.如果我们在课堂上,能用其他的方法解决同样的问题,会收到很好的效果.

    这里举一简单的例子,用Matlab模拟一下斜抛运动.图1是抛体的射程和射高与抛出角之间的关系.从图1中我们可以直观的看出,抛出角是锐角时,射高随抛出角的增大而增大,而射程是先随抛出角增大而增大,然后随抛出角增大而减小.

    61220492120312589462.jpg

    612616351203125971409.jpg

    1..2 Matlab在声学中的应用

    Matlab在机械振动方面的模拟应用也有很多,比如宿刚等写的《Matlab在大学物理课程教学中的应用》[5],代红权所撰写的教学论文《Matlab在物理教学上的一些辅助应用》[6]等等,论文里所列举的Matlab的应用实例,在这里就不在重复了,我们都可以把这些引入到物理课堂上,让学生感到学习物理能够开阔他们的视野,体会到物理与现实处处接轨.比如多普勒效应可以应用在医学上、移动通信和交通上、农业和气象等等方面,下面给出多普勒在声学一种常见的现象.火车人人熟悉,而火车从远而近时其汽笛声变响,音调变尖,相反地,火车从近而远时汽笛声变弱,音调变低这其中的原理未必有人去探究,实际上这就是一种多普勒效应.现在用Matlab模拟一下.如图2上半部分是声源信号的波形图,下半部分是观测者接收到信号的波形图.从图2中可以很清楚的知道,观测者接收到的波像是被压缩了,很明显,其频率大于波源发出的信号频率.这样给学生讲火车汽笛声的变化就很容易理解,易被学生接受.

    2. 结论

    Matlab在大学物理其它方面的应用也很多,光学、热学以及电磁学,我们都可以适当的引入Matlab,比如光学中的杨氏双缝干涉、牛顿环等,热学中的麦克斯韦速率分布,电磁学中电偶极子的电场以及电势分布、电流环的磁场分布等,都可以用Matlab进行模拟演示.总之,巧妙的利用Matlab,不仅对大学物理的教学内容甚至教学手段都做到了适当的改进,这对学生来说,学习物理的积极主动性得到了提高,对教师来讲,不断的去探索教学改革,达到提高大学物理的教学质量.

    大学物理:论文范文845171818-《探究功与物体速度变化的关系》第五届全国中学物理教学改革创新大赛 名

    参考文献

    [1]闫玉丽.大学物理教学改革的思考[J].教学研究,2011(6下).

    [2]管薇.工科大学物理教学改革的思考[J].新课程研究,2012(4中旬).

    [3]张明霞.浅谈大学物理教学改革[J].科技创新导报,2012(9).

    [4]王沫然.MATLAB与科学计算[M].电子工业出版社,2003,9.

    [5]宿刚,郑敏章,丛令梅.MATLABb在大学物理课程教学中的应用[J].浙江海洋学院学报:自然科学版,2008,6.

    [6]代红权.MATLAB在物理教学上的一些辅助应用[J].电脑知识与技术,2011(12).

    大学物理教学改革范文

    大学物理参考文献总结:

    适合大学物理教学改革论文写作的大学硕士及相关本科毕业论文,相关大学物理教学改革开题报告范文和学术职称论文参考文献下载。

    展开全文
  • 栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAIword2vec是谷歌2013年开源的语言工具。两层网络,就能把词变成向量,在NLP领域举足轻重,是许多功能实现基础。可是现在,有一位叫做bollu (简称菠萝) 程序员,大声...

    dcf4871386904141bf46f2cd1247291d.png
    栗子 发自 凹非寺
    量子位 出品 | 公众号 QbitAI

    word2vec是谷歌2013年开源的语言工具。

    两层网络,就能把词变成向量,在NLP领域举足轻重,是许多功能实现的基础。

    可是现在,有一位叫做bollu (简称菠萝) 的程序员,大声对世界说:

    “关于word2vec,你所知道的一切都是错的。”

    5650e47c5f69db12a09cefee20ca7a35.png

    在他看来,论文里的算法解释,和代码实现一比,讲的根本是两回事。

    是不是只要开源了代码,论文写不写清楚都没关系?

    一番仔细的论述,引起了许多人的讨论和共鸣,不出半日Hacker News热度已近300点:

    f8f4166f998b951fc17669e819a50e76.png

    那么,菠萝的世界观是怎样崩塌的,他眼里真实的word2vec是什么样子呢?

    不一样的天空

    菠萝说,word2vec有种经典解释 (在Skip-Gram里、带负采样的那种) ,论文和数不胜数的博客都是这样写的:

    8d17218bc5b8da43b5c9226549c28645.png

    只能看出有两个向量。

    可程序员说,看了word2vec最原本的C语言实现代码,就会发现完全不一样。

    (多数用word2vec做词嵌入的人类,要么是直接调用C实现,要么是调用gensim实现。gensim是从C实现上翻译过来的,连变量的名字都不变。)

    C实现长这样

    每个单词有两个向量,分别有不同的角色:

    一个表示这个词作为中心词 (Focus Word) 时的样子。
    一个表示它作为另一个中心词的上下文 (Context Word) 时的样子。

    菠萝说:耳熟吧,GloVe就是借用了这里的思路,只是没有谁明确说出来而已。

    在C语言的源代码里,设定已经非常完好,这些向量由两个数组 (Array) 分别负责:

    syn0数组,负责某个词作为中心词时的向量。是随机初始化的。

    1 

    syn1neg数组,负责这个词作为上下文时的向量。是零初始化的。

    1 

    训练的话,要先选出一个中心词。在正、负样本训练的时候,这个中心词就保持不变 (Constant) 了。

    中心词向量的梯度 (Gradients) ,会在缓冲器 (Buffer) 里累积起来。经过正、负样本的作用之后,这些梯度会被应用到中心词上:

    1 

    那么问题来了,为什么是随机初始化,为什么是零初始化

    关于初始化

    这些东西,也没见论文和博客里讲过,菠萝只能自己推测了一下:

    因为负样本 (Negative Sample) 来自全文上下,并没太根据词频来定权重,这样选哪个单词都可以,通常这个词的向量还没经过多少训练。
    而如果这个向量已经有了一个值,那么它就可以随意移动 (Move Randomly) 中心词了。
    解决方法是,把所有负样本设为零,这样依赖只有那些比较高频出现的向量,才会影响到另外一个向量的表征。

    程序员说,如果是这样,真的很巧妙。他也从来没想过,初始化策略能有这么重要,读论文也看不出。

    直接看代码,不相信论文了

    e566129d46f3d07573d3d28f1e3f679d.png

    在这之前,菠萝已经花了两个月来复现word2vec,也读了无数文章,就是不成功。

    不管试了多少次,还是得不到论文说的分数。又不能认为分数是论文作者编的。

    最后,他决定去仔细读源代码。初读还以为打开方式错了,因为和之前看过的资料都不一样:

    我不明白,为什么原始论文和网上的博客,都不去写word2vec真正是怎么工作的。所以就想自己写出来。

    也是在这个过程中,他才像上文提到的那样,发现GloVe给上下文 (Context) 一个单独的向量这种做法,是从word2vec那里来的。

    而GloVe的作者并没有提到过这一点。

    想到这里,程序员又有了新的质疑:

    这样不算学术不诚实 (Academic Dishonesty) 么?我也不知道算不算,但觉得至少是个很严重的问题。

    伤感之余,菠萝作出了一个机智的决定:以后先不看论文对算法的解释,直接去读源代码

    都是这种习惯么?

    探讨起论文和实现不一致的情况,一个用编译器读了40年论文的资深程序员 (DannyBee) ,占据了Hacker News评论区的顶楼。

    他细数了这些年来,论文作者的习惯变化

    早期许多算法的实现,原理都和描述相符,性能也和描述相符。只是论文会用伪代码 (Pseudocode) ,用伪代码的部分,和实现的差别到底在哪,也会详细说明。后来,人们便开始走远了。有些论文的算法,要么是工作原理不像描述那样,要么是效率低到没法用。看源码的时候也会发现,不是论文说的那回事。SSAPRE就是一个典型。时至今日,大家读起它的论文还是会觉得难懂。把源码放进Open64编译器去读,也发现和论文大相径庭 (Wildly Different) 。再后来,有了github这类社区,事情好像又朝着早期的健康方向发展了。
    在这样的环境里,word2vec算个反例吧,可能他们觉得已经把代码开源了,论文里写不清也没关系

    紧接着,楼下便有人 (nullwasamistake) 表示,反例不止这一个:

    我在实现一个哈希表排序算法的时候,发现一篇近期的论文也有类似的问题。
    论文里从来没提到过,表格尺寸必须是2的n次方。
    而这篇研究的全部意义,似乎就是比现有的其他算法,内存效率更高。
    我做了2/3才发现,根本没有比现有方法更高效,反而更差了,除非把表的尺寸调成2^n。
    虽然不是彻头彻尾的骗人,但这个疏漏算是很有创意了

    不过,当有人劝ta把那篇论文挂出来,这位吐槽的网友也实诚地表示:

    现在批评科技巨头有风险,以后可能还想去工作呢。

    由此观之,菠萝是个有勇气的少年。

    传送门

    菠萝对word2vec的完整意见发表在github上,有兴趣可前去观赏:

    https://github.com/bollu/bollu.github.io

    另外,还有Hacker News评论区,便于寻找更多同感:

    https://news.ycombinator.com/item?id=20089515

    量子位 · QbitAI

    վ'ᴗ' ի 追踪AI技术和产品新动态

    戳右上角「+关注」获取最新资讯↗↗

    如果喜欢,请分享or点赞吧~比心❤

    展开全文
  • 栗子发自 凹非寺量子位 出品 | 公众号 QbitAIword2vec是谷歌2013年开源的语言工具。两层网络,就能把词变成向量,在NLP领域举足轻重,是许多功能实现基础。可是现在,有一位叫做bollu (简称菠萝) 程序员,大声对...
    栗子 发自 凹非寺 
    量子位 出品 | 公众号 QbitAI

    word2vec是谷歌2013年开源的语言工具。

    两层网络,就能把词变成向量,在NLP领域举足轻重,是许多功能实现的基础。

    可是现在,有一位叫做bollu (简称菠萝) 的程序员,大声对世界说:

    “关于word2vec,你所知道的一切都是错的。”

    6ca88a27c543f067f9fc9c1b50321e9c.png

    在他看来,论文里的算法解释,和代码实现一比,讲的根本是两回事。

    是不是只要开源了代码,论文写不写清楚都没关系?

    一番仔细的论述,引起了许多人的讨论和共鸣,不出半日Hacker News热度已近300点:

    3cc270db7560f4228fd7a78052682dba.png

    那么,菠萝的世界观是怎样崩塌的,他眼里真实的word2vec是什么样子呢?

    不一样的天空

    word2vec有种经典解释 (在Skip-Gram里、带负采样的那种) ,论文和数不胜数的博客都是这样写的:

    10d5370865f6ac080b053274acaabc9c.png

    只能看出有两个向量。

    可程序员说,看了word2vec最原本的C语言实现代码,就会发现完全不一样。

    (多数用word2vec做词嵌入的人类,要么是直接调用C实现,要么是调用gensim实现。gensim是从C实现上翻译过来的,连变量的名字都不变。)

    C实现长这样

    每个单词有两个向量,分别有不同的角色:

    一个表示这个词作为中心词 (Focus Word) 时的样子。

    一个表示它作为另一个中心词的上下文 (Context Word) 时的样子。

    菠萝说:耳熟吧,GloVe就是借用了这里的思路,只是没有谁明确说出来而已。

    在C语言的源代码里,设定已经非常完好,这些向量由两个数组 (Array) 分别负责:

    syn0数组,负责某个词作为中心词时的向量。是随机初始化的。

    1https://github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L369
    2  for (a = 0; a for (b = 0; b 3    next_random = next_random * (unsigned long long)25214903917 + 11;
    4    syn0[a * layer1_size + b] = 
    5       (((next_random & 0xFFFF) / (real)65536) - 0.5) / layer1_size;
    6  }

    syn1neg数组,负责这个词作为上下文时的向量。是零初始化的。

    1https://github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L365
    2for (a = 0; a for (b = 0; b 3  syn1neg[a * layer1_size + b] = 0;

    训练的话,要先选出一个中心词。在正、负样本训练的时候,这个中心词就保持不变 (Constant) 了。

    中心词向量的梯度 (Gradients) ,会在缓冲器 (Buffer) 里累积起来。经过正、负样本的作用之后,这些梯度会被应用到中心词上:

     1if (negative > 0for (d = 0; d 1; d++) {
    2  // if we are performing negative sampling, in the 1st iteration,
    3  // pick a word from the context and set the dot product target to 1
    4  if (d == 0) {
    5    target = word;
    6    label = 1;
    7  } else {
    8    // for all other iterations, pick a word randomly and set the dot
    9    //product target to 0
    10    next_random = next_random * (unsigned long long)25214903917 + 11;
    11    target = table[(next_random >> 16) % table_size];
    12    if (target == 0) target = next_random % (vocab_size - 1) + 1;
    13    if (target == word) continue;
    14    label = 0;
    15  }
    16  l2 = target * layer1_size;
    17  f = 0;
    18
    19  // find dot product of original vector with negative sample vector
    20  // store in f
    21  for (c = 0; c 22
    23  // set g = sigmoid(f) (roughly, the actual formula is slightly more complex)
    24  if (f > MAX_EXP) g = (label - 1) * alpha;
    25  else if (f 0) * alpha;
    26  else g = (label - expTable[(int)((f + MAX_EXP) * (EXP_TABLE_SIZE / MAX_EXP / 2))]) * alpha;
    27
    28  // 1. update the vector syn1neg,
    29  // 2. DO NOT UPDATE syn0
    30  // 3. STORE THE syn0 gradient in a temporary buffer neu1e
    31  for (c = 0; c 32  for (c = 0; c 33}
    34// Finally, after all samples, update syn1 from neu1e
    35https://github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L541
    36// Learn weights input -> hidden
    37for (c = 0; c 

    那么问题来了,为什么是随机初始化,为什么是零初始化

    关于初始化

    这些东西,也没见论文和博客里讲过,菠萝只能自己推测了一下:

    因为负样本 (Negative Sample) 来自全文上下,并没太根据词频来定权重,这样选哪个单词都可以,通常这个词的向量还没经过多少训练。

    而如果这个向量已经有了一个值,那么它就可以随意移动 (Move Randomly) 中心词了。

    解决方法是,把所有负样本设为零,这样依赖只有那些比较高频出现的向量,才会影响到另外一个向量的表征。

    程序员说,如果是这样,真的很巧妙。他也从来没想过,初始化策略能有这么重要,读论文也看不出。

    直接看代码,不相信论文了

    41f0c7baf01cd7c7738456c6d40563e6.png

    在这之前,菠萝已经花了两个月来复现word2vec,也读了无数文章,就是不成功。

    不管试了多少次,还是得不到论文说的分数。又不能认为分数是论文作者编的。

    最后,他决定去仔细读源代码。初读还以为打开方式错了,因为和之前看过的资料都不一样:

    我不明白,为什么原始论文和网上的博客,都不去写word2vec真正是怎么工作的。所以就想自己写出来。

    也是在这个过程中,他才像上文提到的那样,发现GloVe给上下文 (Context) 一个单独的向量这种做法,是从word2vec那里来的。

    而GloVe的作者并没有提到过这一点。

    想到这里,程序员又有了新的质疑:

    这样不算学术不诚实 (Academic Dishonesty) 么?我也不知道算不算,但觉得至少是个很严重的问题。

    伤感之余,菠萝作出了一个机智的决定:以后先不看论文对算法的解释,直接去读源代码

    都是这种习惯么?

    探讨起论文和实现不一致的情况,一个用编译器读了40年论文的资深程序员 (DannyBee) ,占据了Hacker News评论区的顶楼。

    他细数了这些年来,论文作者的习惯变化

    早期许多算法的实现,原理都和描述相符,性能也和描述相符。只是论文会用伪代码 (Pseudocode) ,用伪代码的部分,和实现的差别到底在哪,也会详细说明。

    后来,人们便开始走远了。有些论文的算法,要么是工作原理不像描述那样,要么是效率低到没法用。看源码的时候也会发现,不是论文说的那回事。

    SSAPRE就是一个典型。时至今日,大家读起它的论文还是会觉得难懂。把源码放进Open64编译器去读,也发现和论文大相径庭 (Wildly Different) 。

    再后来,有了github这类社区,事情好像又朝着早期的健康方向发展了。

    在这样的环境里,word2vec算个反例吧,可能他们觉得已经把代码开源了,论文里写不清也没关系

    紧接着,楼下便有人 (nullwasamistake) 表示,反例不止这一个:

    我在实现一个哈希表排序算法的时候,发现一篇近期的论文也有类似的问题。

    论文里从来没提到过,表格尺寸必须是2的n次方。

    而这篇研究的全部意义,似乎就是比现有的其他算法,内存效率更高。

    我做了2/3才发现,根本没有比现有方法更高效,反而更差了,除非把表的尺寸调成2^n。

    虽然不是彻头彻尾的骗人,但这个疏漏算是很有创意了

    不过,当有人劝ta把那篇论文挂出来,这位吐槽的网友也实诚地表示:

    现在批评科技巨头有风险,以后可能还想去工作呢。

    由此观之,菠萝是个有勇气的少年。

    传送门

    菠萝对word2vec的完整意见发表在github上,有兴趣可前去观赏:

    https://github.com/bollu/bollu.github.io

    另外,还有Hacker News评论区,便于寻找更多同感:

    https://news.ycombinator.com/item?id=20089515

    小程序|全类别AI学习教程

    5df839d3fa9939d375a737602cc3fb68.png

    AI社群|与优秀的人交流

    5a81a6ceed87e3c3ee16d2bd13fc8d20.png

    1d56b23220542d783294ec019acd032b.png

    量子位 QbitAI · 头条号签约作者

    վ'ᴗ' ի 追踪AI技术和产品新动态

    喜欢就点「在看」吧 !

    展开全文
  • 栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAIword2vec是谷歌2013年开源的语言工具。两层网络,就能把词变成向量,在NLP领域举足轻重,是许多功能实现基础。可是现在,有一位叫做bollu (简称菠萝) 程序员,大声...

    aa22eac758a8460d042a436ae991f78f.png
    栗子 发自 凹非寺
    量子位 出品 | 公众号 QbitAI

    word2vec是谷歌2013年开源的语言工具。

    两层网络,就能把词变成向量,在NLP领域举足轻重,是许多功能实现的基础。

    可是现在,有一位叫做bollu (简称菠萝) 的程序员,大声对世界说:

    “关于word2vec,你所知道的一切都是错的。”

    8e0657445215605830787fae0abe6561.png

    在他看来,论文里的算法解释,和代码实现一比,讲的根本是两回事。

    是不是只要开源了代码,论文写不写清楚都没关系?

    一番仔细的论述,引起了许多人的讨论和共鸣,不出半日Hacker News热度已近300点:

    ed3890cb53ad73f563646f3bf049ec5f.png

    那么,菠萝的世界观是怎样崩塌的,他眼里真实的word2vec是什么样子呢?

    不一样的天空

    菠萝说,word2vec有种经典解释 (在Skip-Gram里、带负采样的那种) ,论文和数不胜数的博客都是这样写的:

    02ea4a54e9f0a8df09e8eb78797addb2.png

    只能看出有两个向量。

    可程序员说,看了word2vec最原本的C语言实现代码,就会发现完全不一样。

    (多数用word2vec做词嵌入的人类,要么是直接调用C实现,要么是调用gensim实现。gensim是从C实现上翻译过来的,连变量的名字都不变。)

    C实现长这样

    每个单词有两个向量,分别有不同的角色:

    一个表示这个词作为中心词 (Focus Word) 时的样子。
    一个表示它作为另一个中心词的上下文 (Context Word) 时的样子。

    菠萝说:耳熟吧,GloVe就是借用了这里的思路,只是没有谁明确说出来而已。

    在C语言的源代码里,设定已经非常完好,这些向量由两个数组 (Array) 分别负责:

    syn0数组,负责某个词作为中心词时的向量。是随机初始化的。

    1 https://github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L369
    2  for (a = 0; a < vocab_size; a++) for (b = 0; b < layer1_size; b++) {
    3     next_random = next_random * (unsigned long long)25214903917 + 11;
    4     syn0[a * layer1_size + b] = 
    5        (((next_random & 0xFFFF) / (real)65536) - 0.5) / layer1_size;
    6   }

    syn1neg数组,负责这个词作为上下文时的向量。是零初始化的。

    1 https://github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L365
    2 for (a = 0; a < vocab_size; a++) for (b = 0; b < layer1_size; b++)
    3   syn1neg[a * layer1_size + b] = 0;

    训练的话,要先选出一个中心词。在正、负样本训练的时候,这个中心词就保持不变 (Constant) 了。

    中心词向量的梯度 (Gradients) ,会在缓冲器 (Buffer) 里累积起来。经过正、负样本的作用之后,这些梯度会被应用到中心词上:

     1 if (negative > 0) for (d = 0; d < negative + 1; d++) {
     2   // if we are performing negative sampling, in the 1st iteration,
     3   // pick a word from the context and set the dot product target to 1
     4   if (d == 0) {
     5     target = word;
     6     label = 1;
     7   } else {
     8     // for all other iterations, pick a word randomly and set the dot
     9     //product target to 0
    10     next_random = next_random * (unsigned long long)25214903917 + 11;
    11     target = table[(next_random >> 16) % table_size];
    12     if (target == 0) target = next_random % (vocab_size - 1) + 1;
    13     if (target == word) continue;
    14     label = 0;
    15   }
    16   l2 = target * layer1_size;
    17   f = 0;
    18 
    19   // find dot product of original vector with negative sample vector
    20   // store in f
    21   for (c = 0; c < layer1_size; c++) f += syn0[c + l1] * syn1neg[c + l2];
    22 
    23   // set g = sigmoid(f) (roughly, the actual formula is slightly more complex)
    24   if (f > MAX_EXP) g = (label - 1) * alpha;
    25   else if (f < -MAX_EXP) g = (label - 0) * alpha;
    26   else g = (label - expTable[(int)((f + MAX_EXP) * (EXP_TABLE_SIZE / MAX_EXP / 2))]) * alpha;
    27 
    28   // 1. update the vector syn1neg,
    29   // 2. DO NOT UPDATE syn0
    30   // 3. STORE THE syn0 gradient in a temporary buffer neu1e
    31   for (c = 0; c < layer1_size; c++) neu1e[c] += g * syn1neg[c + l2];
    32   for (c = 0; c < layer1_size; c++) syn1neg[c + l2] += g * syn0[c + l1];
    33 }
    34 // Finally, after all samples, update syn1 from neu1e
    35 https://github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L541
    36 // Learn weights input -> hidden
    37 for (c = 0; c < layer1_size; c++) syn0[c + l1] += neu1e[c];

    那么问题来了,为什么是随机初始化,为什么是零初始化

    关于初始化

    这些东西,也没见论文和博客里讲过,菠萝只能自己推测了一下:

    因为负样本 (Negative Sample) 来自全文上下,并没太根据词频来定权重,这样选哪个单词都可以,通常这个词的向量还没经过多少训练。
    而如果这个向量已经有了一个值,那么它就可以随意移动 (Move Randomly) 中心词了。
    解决方法是,把所有负样本设为零,这样依赖只有那些比较高频出现的向量,才会影响到另外一个向量的表征。

    程序员说,如果是这样,真的很巧妙。他也从来没想过,初始化策略能有这么重要,读论文也看不出。

    直接看代码,不相信论文了

    e1f53651d5e0554faf14e185551dda78.png

    在这之前,菠萝已经花了两个月来复现word2vec,也读了无数文章,就是不成功。

    不管试了多少次,还是得不到论文说的分数。又不能认为分数是论文作者编的。

    最后,他决定去仔细读源代码。初读还以为打开方式错了,因为和之前看过的资料都不一样:

    我不明白,为什么原始论文和网上的博客,都不去写word2vec真正是怎么工作的。所以就想自己写出来。

    也是在这个过程中,他才像上文提到的那样,发现GloVe给上下文 (Context) 一个单独的向量这种做法,是从word2vec那里来的。

    而GloVe的作者并没有提到过这一点。

    想到这里,程序员又有了新的质疑:

    这样不算学术不诚实 (Academic Dishonesty) 么?我也不知道算不算,但觉得至少是个很严重的问题。

    伤感之余,菠萝作出了一个机智的决定:以后先不看论文对算法的解释,直接去读源代码

    都是这种习惯么?

    探讨起论文和实现不一致的情况,一个用编译器读了40年论文的资深程序员 (DannyBee) ,占据了Hacker News评论区的顶楼。

    他细数了这些年来,论文作者的习惯变化

    早期许多算法的实现,原理都和描述相符,性能也和描述相符。只是论文会用伪代码 (Pseudocode) ,用伪代码的部分,和实现的差别到底在哪,也会详细说明。后来,人们便开始走远了。有些论文的算法,要么是工作原理不像描述那样,要么是效率低到没法用。看源码的时候也会发现,不是论文说的那回事。SSAPRE就是一个典型。时至今日,大家读起它的论文还是会觉得难懂。把源码放进Open64编译器去读,也发现和论文大相径庭 (Wildly Different) 。再后来,有了github这类社区,事情好像又朝着早期的健康方向发展了。
    在这样的环境里,word2vec算个反例吧,可能他们觉得已经把代码开源了,论文里写不清也没关系

    紧接着,楼下便有人 (nullwasamistake) 表示,反例不止这一个:

    我在实现一个哈希表排序算法的时候,发现一篇近期的论文也有类似的问题。
    论文里从来没提到过,表格尺寸必须是2的n次方。
    而这篇研究的全部意义,似乎就是比现有的其他算法,内存效率更高。
    我做了2/3才发现,根本没有比现有方法更高效,反而更差了,除非把表的尺寸调成2^n。
    虽然不是彻头彻尾的骗人,但这个疏漏算是很有创意了

    不过,当有人劝ta把那篇论文挂出来,这位吐槽的网友也实诚地表示:

    现在批评科技巨头有风险,以后可能还想去工作呢。

    由此观之,菠萝是个有勇气的少年。

    传送门

    菠萝对word2vec的完整意见发表在github上,有兴趣可前去观赏:

    https://github.com/bollu/bollu.github.io

    另外,还有Hacker News评论区,便于寻找更多同感:

    https://news.ycombinator.com/item?id=20089515

    量子位 · QbitAI

    վ'ᴗ' ի 追踪AI技术和产品新动态

    戳右上角「+关注」获取最新资讯↗↗

    如果喜欢,请分享or点赞吧~比心❤

    展开全文
  • 关于语言和混语言合成, 实际上是我为了方便这么强行去称呼: 跨语言指, 只有中国人说中文+英国人说英文, 让中国人去"跨"说英文 混语言指, 无论如何, 合成出同音色语言句子, 里面有Code-Swith现象发生 之前...
  • 这不仅反映了该汉语方言中异语动态语言现象,而且表明了人类语言异质性。 该研究试图扩大我们对漳州南部闽语变种中异义音排列理解,并作为研究其他Sinitic语言/方言及其他语言中异义音如何构建模型。
  • 在本文中,我们提出了关于代数作为学校学科观点。 要准确地说出该主题内容,必须使用抽象代数的语言。 因此,该内容包括自然数系统中操作属性建立和应用,然后将其转移到扩展系统中。 在这些扩展最后一个...
  • 来源:AINLPer微信公众号 ...其中第一篇主要解释了暴露偏差和过度校正现象,提出了一种新解决方法并该方法与试图解决该类问题其他方法进行了对比。第二篇针对神经机器翻译模型,非自回归模型容...
  • 句子中对不连续依存关系的约束已被称为“岛屿约束”。 岛现象可以用多种语言观察到。 但是,尽管英语中的岛效应非常明显,但日语中的岛效应似乎并不明显。... 我们建议表观句法现象的一部分可以归因于处理因素。
  • CS 4650和7650 ... 在每个级别,我们将讨论突出的语言现象和最成功的计算模型。 在此过程中,我们将介绍与自然语言处理特别相关的机器学习技术。 学习目标 。 可以从发表的论文,博客文章和教
  • 该生查阅文献资料能力强,能全面收集关于考试系统资料,写作过程中能综合运用考试系统知识,全面分析考试系统问题,综合运用知识能力强。*篇幅完全符合学院规定,内容完整,层次结构安排科学,主要观点突出,逻辑...
  • 多智能体语言5

    2021-03-29 11:25:59
    hello,这是论文分享站,今天分享的文章是Emergent Linguistic Phenomena in Multi-Agent Communication Games,是一篇关于多智能体语言的论文,我们一起看看吧~ 摘要: 我们描述了一个多智能体通信框架,用于检查...
  • 康定斯基认为,画家作为创造者应该追求对自己内心世界表现,不应把模仿自然现象当做自己目的,画家应当用绘画自身形式语言,创造出能够展现意图画面;美国视觉艺术批评家苏珊格朗在《艺术问题》中指出:...
  • 这项研究探索了学校领导者关于全球化对巴基斯坦吉尔吉特-巴尔斯坦山区(Ghizer)领导实践和整个学校文化影响/影响观点。 从理论上讲,该研究以全球化和教育领导力为基础,从方法上着眼于定性现象学案例研究...
  • 这个问题与还原主义有关,即声称主观性可以被认为是大脑过程一种现象,理由是我们所有感官知觉,运动控制,我们清醒或无意识状态都可以与激活或到我们大脑皮层特定区域阻滞。 在这个概念框架中,自由...
  • 相信不太了解 AI 朋友这几天也或多或少看到了一些关于 GPT-3 重磅消息,甚至有媒体称其为 “继比特币之后又一个轰动全球的现象级新技术”。 请注意,现在站在你面前是:互联网原子弹,人工智能界卡丽熙,算...
  • keil c51 是美国Keil Software 公司出品51 系列兼容单片机C 语言软件开发 系统,和汇编相比,C 在功能上、结构性、可读性、可维护性上有明显优 势,因而易学易用。 Keil c51 软件提供丰富库函数和功能强大...
  • [公司] 混语言stage2,LID修正,做PPT讨论并且描述清楚多说话人数据集问题definetion,多增加几个说话人防止过拟合, 移到春春, 如何预训练后再训春春, 请教下陈峰,之后关于loss(比如了l1和l2, 读论文), ...
  • 嵌入式系统详细文档

    热门讨论 2004-04-28 00:00:00
    出现这种现象的原因主要是外部设备种类繁多,所基于的协议也是千差万别,如果要实现一种比较通用的驱动很不容易。但是我们可以考虑提供一个一般工程人员非常熟悉的开发环境,在这个环境中通过简单易行的操作实现数据...
  • 求学期间与人合著的一篇论文荣列近20年来被引用次数最多的论文之一。 Jeffrey David Ullman,美国国家工程院院士,计算机科学家,斯坦福大学教授。Ullman早年在贝尔实验室工作,之后任教于普林斯顿大学,十年后加入...
  • 求学期间与人合著的一篇论文荣列近20年来被引用次数最多的论文之一。 Jeffrey David Ullman,美国国家工程院院士,计算机科学家,斯坦福大学教授。Ullman早年在贝尔实验室工作,之后任教于普林斯顿大学,十年后加入...
  • 一个关于在线考试web系统,具有试卷生成功能ASP+SQL Server源码-an examination of online web system, Generating function papers with the ASP SQL Server source code ======================== 考试系统...
  • 关于北邮报考有疑惑:什么是中心?什么是组?院与院之间差别?报学硕还是专硕?北邮学费、奖助学金如何?有没有夏令营?。。。(请查阅高频问题答疑) 分不清国家线、校线、院线、组线?不知道它们之间有什么区别...
  • 数学基础研究基本数学概念(数、几何形状、集合、函数...),及其 如何构成更复杂结构和概念 层次结构,特别是一类 也被称为元数学概念 基础性重要结构,用它们来形成数学语言(公式、理论、以及它们 用来表意...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

关于语言现象的论文