word2vec有啥应用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了word2vec有啥应用?相关的知识,希望对你有一定的参考价值。

参考技术A

我觉得word2vec在工业上或者是网络上还是有很多应用的。

理解这种学术工具,重要的是搞懂它背后的道理和设计哲学。


word2vec

很多人对word2vec不是了解,不知道word2vec是什么,其实word2vec是一个将单词转换成向量形式的工具,通过转换,可以把文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度这在实际应用中就有很大的价值。

应用

word2vec在应用方面也是呈多样化的,其目的用一个向量去表示一个对象,然后基于向量相似度去计算对象的相似度,找到相关的对象。对象可以是任何目标。一个单词,一个句子,一个文章,一个图片,一个用户,一个商品。。发现相关关系,发现知识,比如同位词,别名。也可以做推荐运用,推荐文章、朋友、商品、店铺等等。


找相关词

找相关词,注意是相关词而不是同义词。例如你输入”雷军”,计算出来的相关词就会有:手机,小米,乔布斯等等;根据上下文预测句子中缺失的单词, 根据不同语种里相同单词的词向量之间的特定关系做机器翻译;由词向量构建句子向量。


总述

word2vec在多方面的应用上还是很多的。

参考技术B

我觉得,它的应用主要还是数据分析这一块。


Word2vec本质上是一个矩阵分解模型。

Word2evc本质

它简单地指出,矩阵是每个单词和它的上下文的一组词的特征。要分解这个矩阵,只需要在隐含空间中取对应于向量的每个词。所以word2vec的合适之处是,对于一个序列的数据,序列的本地数据之间有很强的相关性。

工作原理

典型的是文本的顺序,单词的接近性非常强,甚至一个词的上下文也可以预测中间的单词是什么。所学习的词向量代表了词汇的语义含义,可以用来分类、聚类,也可以用来计算单词的相似度。而Word2vec本身,对流行项的分类器或抽样方式的水平是一个很好的惩罚,所以不像一般的矩阵分解,最后计算语义方法是一个热门词,它是一个非常好的Word2vec特性

论文分类

对于论文的分类。

直接将文档中所有对应向量的线性相加,作为文本的特征训练分类器,效果也很好。这种方法也适用于word2vec训练过程。此外,如果将非线性分类器替换为RBF核SVM,分类精度也会更高,这也符合预期。其他的数据序列也可以做到这一点,记住一篇文章DeepWalk KDD,在一个社交网络节点生成随机漫步在一组序列上,然后通过word2vec训练每个节点对应的向量。

总结

我觉得,可能做关方面工作的人才会有更深的体验吧。所谓,干一行才能了解这一行的情况。

“脚本”和“应用程序”有啥区别?

【中文标题】“脚本”和“应用程序”有啥区别?【英文标题】:What's the difference between a "script" and an "application"?“脚本”和“应用程序”有什么区别? 【发布时间】:2010-09-11 00:39:35 【问题描述】:

我指的是this answer中的区别:

...bash 不是用来编写应用程序的,它是用来编写脚本的。可以肯定的是,您的应用程序可能有一些管理脚本,但不要编写 critical-business-logic.sh,因为另一种语言可能更适合此类内容。

作为一名使用过多种语言的程序员,这似乎是对 C、Java 和其他编译语言的势利。我不是在寻找强化我的观点或挥手回答的问题。相反,我真的很想知道所指的技术差异。

(而且我在日常工作中使用 C,所以我不仅仅是防御性的。)

【问题讨论】:

这些与“程序”和“解决方案”有什么区别(-: @hippietrail 一个“解决方案”可以解决问题,但一个“程序”会破坏问题! 特定语言是否会导致它成为脚本与应用程序? 我认为没有任何固定的正确答案,而是根据具体情况。通常,我使用脚本来指代不需要使用编译器构建的小程序。其他一切对我来说都是应用程序。 我会说脚本是一种单一的解释语言(例如 PHP script 或 Javascript),而程序通常更比起那个来说。但我认为没有真正的技术定义。 【参考方案1】:

传统上,一个程序被编译并一个脚本被解释,但这已经不再重要了。如果您真的愿意,您可以生成大多数脚本的编译版本,而其他“编译”语言(如 Java)实际上是解释的(在字节码级别)。

更现代的定义可能是程序旨在供客户使用(可能是内部程序),因此应包括文档和支持,而脚本主要供作者使用。

网络是一个有趣的反例。我们都喜欢使用 Google 搜索引擎查找内容。用于创建它引用的“数据库”的大部分代码仅供其作者和维护者使用。这是否使它成为一个脚本?

【讨论】:

【参考方案2】:

我会说应用程序倾向于以交互方式使用,脚本将运行它的过程,适合批处理工作。我不认为这是一个具体的区别。

【讨论】:

我想我同意这个答案。我意识到询问脚本与编程语言可能会更好。 我喜欢这个定义。否则不会想到它。 好点,但没有说明为什么有“编程语言”和“脚本语言”。您可以在其中编写非交互式作业。【参考方案3】:

通常是“脚本”与“程序”。

我和你一样,这种区别主要是“编译语言势利”,或者引用拉里沃尔的话说,“演员有剧本,观众有节目”。

【讨论】:

+1“演员有剧本,观众有节目”。【参考方案4】:

这是一个有趣的话题,我认为区分“脚本”和“应用程序”没有很好的指导方针。

让我们看一些 Wikipedia 文章以了解其中的区别。

Script(*** -> 脚本语言):

脚本语言、脚本语言或扩展语言,是一种控制软件应用程序的编程语言。 “脚本”通常被视为与“程序”不同,后者独立于任何其他应用程序执行。同时,它们与应用程序的核心代码不同,后者通常用不同的语言编写,并且通过可供最终用户访问,它们使应用程序的行为能够适应用户的需求。

Application(*** -> 应用软件 -> 术语)

在计算机科学中,应用程序是一种计算机程序,旨在帮助人们执行某种类型的工作。因此,应用程序不同于操作系统(运行计算机)、实用程序(执行维护或通用杂务)和编程语言(用于创建计算机程序)。根据设计的工作,应用程序可以操作文本、数字、图形或这些元素的组合。

阅读上述条目似乎表明,区别在于脚本由另一个软件“托管”,而应用程序不是。我想这是可以争论的,例如控制 shell 行为的 shell 脚本,以及控制解释器行为以执行所需操作的 perl 脚本。 (我觉得这可能有点牵强,所以我可能不完全同意。)

归根结底,我认为可以根据节目的规模来区分口语。与应用程序相比,脚本的规模通常较小。

此外,就目的而言,脚本通常执行需要处理的任务,例如,构建为某个软件生成多个发布版本的脚本。另一方面,应用程序的目标是提供更精细的功能,并面向最终用户。例如,记事本或 Firefox。

【讨论】:

【参考方案5】:

John Ousterhout(TCL 的发明者)在http://www.tcl.tk/doc/scripting.html 有一篇很好的文章,他在其中提出了系统编程语言(用于实现构建块,强调正确性,类型安全)与脚本语言(用于组合构建块,强调对不断变化的环境和要求的响应能力,以及文本表示形式的轻松转换)。如果您使用该分类系统,那么 99% 的程序员所做的工作更适合脚本语言而不是系统编程语言。

【讨论】:

PS 关于 Stack Overflow 的机制:我认为这篇文章具有相关性和显着性,值得一提,但是在添加一个四个月前的答案集中在 48 分钟内。 我们在这里,过了一段时间。 两年后我更新了链接,因为我认为这是一个很好的参考。 七年后我点击了这个链接,发现它很有趣。【参考方案6】:

脚本往往是一系列启动、运行和终止的命令。它通常不需要/很少的人机交互。应用程序是一个“程序”……它通常需要人工交互,而且往往更大。

【讨论】:

【参考方案7】:

对我来说,脚本意味着对代码的逐行解释。您可以打开脚本并查看其程序员可读的内容。应用程序意味着独立编译的可执行文件。

【讨论】:

【参考方案8】:

这通常只是一个语义论点,甚至是贬低某些编程语言的一种方式。就我而言,“脚本”是一种程序,确切的定义有些模糊,并因上下文而异。

我可能会使用术语“脚本”来表示主要以线性方式执行的程序,而不是具有大量顺序逻辑或子例程的程序,就像好莱坞的“脚本”是演员执行的线性指令序列一样。我可能会用它来表示以嵌入在更大程序中的语言编写的程序,以驱动该程序。例如,在旧的 Mac OS 下使用 AppleScript 自动执行任务,或者使用嵌入式 TCL 接口驱动以某种方式暴露自身的程序。

但在所有这些情况下,脚本都是一种程序。

术语“脚本语言”已用于动态解释(有时是编译)语言,通常这些语言具有许多共同特征,例如非常高级的指令、内置散列和任意长度列表以及其他高级数据结构等等。但是这些语言能够编写非常大、复杂、模块化、设计良好的程序,所以如果你认为“脚本”不是程序,这个词可能会让你感到困惑。

另请参阅 perlfaq1 中的 Is it a Perl program or a Perl script?。

【讨论】:

【参考方案9】:

脚本通常作为脚本引擎内较大应用程序的一部分运行 例如。 JavaScript -> 浏览器 这与传统的静态类型编译语言和动态语言形成对比,其中代码旨在构成应用程序的主要部分。

【讨论】:

【参考方案10】:

应用程序是针对一组常见问题的脚本集合。

脚本是用于执行一项相当具体的任务的一段代码。

IMO,区别与所使用的语言无关。可以用 bash 编写复杂的应用程序,也可以用 C++ 编写简单的脚本。

【讨论】:

【参考方案11】:

首先,我想明确一点,脚本就是程序。换句话说,脚本就是一组指令。

计划:

将要编译的一组指令称为程序。

脚本:

将被解释的一组指令称为脚本。

【讨论】:

【参考方案12】:

以perl为例,可以编写perl脚本或perl应用程序。

脚本意味着单个文件或单个命名空间。 (例如 updateFile.pl)。

应用程序是由文件或命名空间/类的集合组成的(例如,带有许多 .pm 模块文件的 OO 设计的 perl 应用程序)。

【讨论】:

【参考方案13】:

就我个人而言,我认为分离是从实际实施中退后一步。

据我估计,一个应用程序已经计划好了。它有多个目标,有多个可交付成果。在编码之前的设计时,应用程序必须满足一些任务。

然而,脚本只是作为套装组合在一起,几乎没有计划。

然而,缺乏适当的计划并不会将您降级为脚本。可能,它使您的应用程序成为组织不良的脚本集合。

此外,应用程序可以包含聚合构成整体的脚本。但是脚本只能引用一个应用程序。

【讨论】:

您对脚本的定义(“作为套装组合在一起,几乎没有计划”)与我的编程和维护经验不符。脚本可以“放在一起”,但在我的例子中,它们的规划与用 C 语言编写函数一样多。【参考方案14】:

一个应用程序很大,会被人们一遍又一遍地使用,并可能卖给客户。

脚本一开始很小,如果幸运的话,它会保持很小,很少出售给客户,并且可能会自动运行或被废弃。

【讨论】:

【参考方案15】:

怎么样:

脚本:

脚本是用一种语言编写的编程语句的文本文件(或文本文件的集合),允许将其中编写的单个语句解释为机器可执行代码直接在之前执行每个并有此发生的意图

应用:

应用程序是主要功能涉及向人类 Actor 提供服务的任何计算机程序。

因此,理论上,用脚本语言编写的基于脚本的程序可以在执行脚本时更改其文本语句(当然,风险很大)。编译程序的类似情况是内存中的位翻转。

有接受者吗? :)

【讨论】:

【参考方案16】:

@Jeff 的回答很好。我最喜欢的解释是

许多(大多数?)脚本语言是解释型的,很少有编译型的 语言被认为是脚本语言,但问题 编译的与解释的只是松散地连接到问题 “脚本”与“严肃”语言的区别。

这里的很多问题是“脚本”非常模糊 指定——它意味着一种便于书写的语言 脚本,而不是编写“成熟的程序”(或 应用程序)。但是如何区分复杂的脚本和 简单的应用?这是一个本质上无法回答的问题。 通常,脚本是一系列命令,应用于某组 数据,可能按用户定义的顺序...但是,可以拉伸 该描述适用于 Photoshop,这显然是一个主要的 应用。脚本通常比应用程序小,做 一些定义明确的东西,使用起来“更简单”,通常可以 被分解成一系列清晰的子操作,但所有这些 事情是主观的。

引用自here。

【讨论】:

【参考方案17】:

我认为代码是编译还是解释都没有关系。

真正的区别在于代码的核心逻辑:

如果代码产生了系统中其他程序未实现的新功能 - 它就是一个程序。它甚至可以通过脚本进行操作。

如果代码主要通过其他程序的操作进行操作,并且总结果主要是被操作程序的工作结果 - 它是一个脚本。字面意思是某些程序的动作脚本。

【讨论】:

【参考方案18】:

实际上脚本(或脚本语言)和应用程序之间的区别在于脚本不需要将其编译为机器语言。您使用解释器运行脚本的源代码。应用程序编译将源代码转换为机器代码,以便您可以将其作为独立应用程序运行。

【讨论】:

【参考方案19】:

我会说脚本通常是一组以纯文本编写的命令或指令由托管应用程序执行(浏览器、命令解释器或 shell,. ..)。

这并不意味着它在实际执行时不强大或没有以某种方式编译。但是脚本本身不能做任何事情,它只是纯文本。 本质上它只能是一个片段,需要组合起来构建一个程序或应用程序,但扩展和完全开发的脚本或脚本集在主机执行时可以视为程序或应用程序,就像一堆源文件编译后可以成为应用程序。

【讨论】:

【参考方案20】:

脚本语言没有标准库或平台(或者没有多少)。它小巧轻便,旨在嵌入到更大的应用程序中。 Bash 和 Javascript 是脚本语言的绝佳示例,因为它们的功能完全依赖于其他程序。

使用此定义,脚本是为驱动更大的应用程序(套件)而设计的代码。 Javascript 可能会调用 Firefox 来打开窗口或操作 DOM。 Bash 脚本执行现有程序或其他脚本,并通过管道将它们连接在一起。


你还问为什么不用脚本语言,所以:

是否有任何脚本语言的单元测试工具?对于完全缺失的“真实”应用程序来说,这似乎是一个非常重要的工具。而且很少有真正的脚本语言库绑定。

在大多数情况下,无论如何,脚本都可以替换为真正的轻量级语言,例如 Python 或 Ruby。

【讨论】:

Python 和 Ruby 有时被轻视为“脚本语言”。 ;-) Python 和 Ruby 是脚本语言恕我直言 :) Python 和 Ruby 不是脚本语言,除非“脚本”被重新定义为无意义。 那么什么是“Javacript 应用程序”。蛇油? :P 我要抱怨我不能在我的咖啡机上运行 C,或者在计算机的虚拟现实中实例化的对象无法在现实世界中生存。因此,一切都是脚本。 :p

以上是关于word2vec有啥应用?的主要内容,如果未能解决你的问题,请参考以下文章

基于word2vec的文档向量模型的应用

python应用实战系列-一文教你深入解读word2vec

word2vec负采样中softmax的应用

NLP之——Word2Vec详解

word2vec词向量训练及中文文本相似度计算

Spark推荐系列之Word2vec算法介绍实现和应用说明