pytorch模型部署到ios(pytorch模型部署到Linux)

pytorch模型部署到ios(pytorch模型部署到Linux)WORD EMBEDDINGS ENCODING LEXICAL SEMANTICS 词嵌入指的是 将用户词表中每一个单词与一个实数对应 并嵌入到一个密度向量中 在自然语言处理中 绝大多数情况研究的特征都是单词 然而 应该怎样在计算机中表示一个单词呢 一种方案是存储单词每个字母对应的 ascii 码 但这只能让我们知道我们存储的这个单词由哪些字母组成

大家好,我是讯享网,很高兴认识大家。



WORD EMBEDDINGS: ENCODING LEXICAL SEMANTICS

词嵌入指的是:将用户词表中每一个单词与一个实数对应,并嵌入到一个密度向量中。在自然语言处理中,绝大多数情况研究的特征都是单词。然而,应该怎样在计算机中表示一个单词呢?一种方案是存储单词每个字母对应的ascii码,但这只能让我们知道我们存储的这个单词由哪些字母组成,并不能表达这个单词具体的含义(或许能从词缀推断出词性、从大小写推断出属性,但这远远不够)。而且,凭什么可以将这些表示组合在一起?

我们设计的神经网络往往是pytorch部署在嵌入式_机器学习
讯享网
(词汇表的长度)维的,但是却需要从神经网络中得到低维、密集的输出(譬如需要预测的标签只有几个),我们要怎样从将数据从高维空间转移到低维空间呢?

不妨试试用one-hot编码来代替ascii码?即,对某个单词w,按以下方式表示:
pytorch部署在嵌入式_python_02
其中,每个单词都只含有1个’1’(剩余为0),而且每个单词的’1’的位置都不同。

上述方法不仅占用了巨量的空间,而且还有一个致命的弊端:这种方法将每个单词标记为独立的实体,认为他们之间没有关联。

我们真正想要的,是使用一些标记方法,来。难以理解?且看以下示例。

假设我们正在建立一个语言模型,假设有以下语句:

  • The mathematician ran to the store.
  • The physicist ran to the store.
  • The mathematician solved the open problem.

在我们的训练数据中。

现在,我们读取到了一个在训练数据中从未见过的语句:

  • The physicist solved the open problem.

我们的语言模型在这一语句上也许能表现不错,但如果能够将以下两个事实也考虑进去,相信将会更好:

  • 我们在训练语句中,发现mathematician以及physicist在句中是相同的成分,换句话说,他们有着一定的语义关系。
  • 在新语句中,虽然看到的是physicist,但是我们认为mathematician在句中的成分是和physicist一致的。

由此,推断出physicist在新语句中的拟合度很好。

这正是上述的真实含义:相似关系指的是语义上的相似,而不是指字符拼写上相似。

这一技术在训练数据和未知的数据之间建立了联系,能有效克服语言学(文本)数据的稀疏性。当然,这基于一个基本假设:出现在相似上下文之中的单词在语义上相关。这也被称为分布式假设。


Getting Dense Word Embeddings

如何获得词嵌入呢?换句话说,我们具体要如何将语义的相似性进行编码?

或许我们可以考虑一些语义属性。例如,属性:mathematicians 和 physicists 都能 “run”,因此二者在该属性上都标记为高分。再考虑一些属性,并且为这些属性对不同的单词进行打分。

如果将每个属性视为一个维度,那么我们能将每个单词表示为一个向量(词嵌入向量):
pytorch部署在嵌入式_深度学习_03

pytorch部署在嵌入式_深度学习_04

由此,我们得到了度量单词相似性的一个方法:
pytorch部署在嵌入式_机器学习_05
按照向量长度标准化后:
pytorch部署在嵌入式_深度学习_06
其中,pytorch部署在嵌入式_机器学习_07

现在回顾one-hot编码,可以将其看成词嵌入向量的一种特殊情况,每个单词的相似度为0,且为每个单词单独分配了一个唯一的语义属性。

同时,我们称新定义的向量是稠密的,也就是说这些向量的元素绝大多数不为0。

然而, 这些新定义的向量有一个大问题:我们能为相似性的度量,定义成千上万个不同的语义属性,那么到底如何为不同的属性打分呢?

深度学习的核心思想是使计算机利用神经网络自动学习特征的含义,而不是需要程序员来手动设计。那么,为何不将词嵌入作为模型参数,让词嵌入在训练过程中自动更新迭代呢?

这正是我们要做的:我们将设计一些神经网络在原则上能够进行学习的。注意,词嵌入可能是难以解释甚至不可解释的。也就是说,虽然在上述例子中,我们能通过手工标记的方法知道mathematicians以及physicists都喜欢咖啡,但是如果我们用一个神经网络去学习这些词嵌入,并且发现mathematicians以及physicists的词嵌入在某个维度上都有着很高的分数,我们也不清楚这个维度到底意味着什么(即不明该维度的语义)。他们在潜在语义属性上相似,但这对我们来说不可解释。

总而言之,词嵌入表示的是单词语义,能够高效地编码与手头任务相关的语义信息。除了语义信息,还能够嵌入其他的信息:词性标签、语义分析树、甚至任意信息!特征嵌入的思想是这一领域的核心。


Word Embeddings in Pytorch

(部分内容已省略)

在定义词嵌入时,我们需要为每一个单词定义一个索引,这些索引将会成为一个查询表中的键值。

换句话说,词嵌入将被存储为一个\(|V|×D \)的矩阵,D为词嵌入的维度。我们为。下文中,从单词到其索引的映射将被命名为 。

Pytorch中为词嵌入提供服务的模块是 ,接受两个参数:。

Out:


An Example: N-Gram Language Modeling

回顾n-gram模型,给定一个单词序列 w,我们需要计算:
pytorch部署在嵌入式_pytorch部署在嵌入式_08
其中 pytorch部署在嵌入式_机器学习_09

在本例中,我们将计算一些训练样本的然后使用。

Out:

[([‘When’, ‘forty’], ‘winters’), ([‘forty’, ‘winters’], ‘shall’), ([‘winters’, ‘shall’], ‘besiege’)]

Out:

[518.48, 516.86, 513.87, 511.23, 509.005, 506.83, 504.523, 501.99, 499.173, 497.49]


Exercise: Computing Word Embeddings: Continuous Bag-of-Words

连续词袋模型(CBOW)是自然语言处理中非常常用的一种语言模型。CBOW通过参考目标单词上下文几个单词来对目标单词进行预测。与语言建模不同的是,CBOW并非顺序模型,也不必一定是概率化的。CBOW通常被用来快速训练词嵌入,并且用这些训练得到的词嵌入来初始化那些更为复杂的词嵌入模型,通常这一过程也被称为预训练词嵌入。CBOW绝大多数情况下能够使模型表现提升数个百分点。

以下定义CBOW模型:

给定目标单词 pytorch部署在嵌入式_机器学习_09 以及左右两边大小为 N 的上下文窗口:pytorch部署在嵌入式_python_11pytorch部署在嵌入式_pytorch部署在嵌入式_12,将上述这些上下文单词记做 pytorch部署在嵌入式_深度学习_13 ,CBOW模型尝试最小化以下内容:
pytorch部署在嵌入式_机器学习_14
其中,pytorch部署在嵌入式_机器学习_15是单词w的词嵌入。

提示:

  • 考虑需要定义哪些参数/变量
  • 明确每步操作要求的形状,需要变换张量形状时,使用方法

Out:

[([‘We’, ‘are’, ‘to’, ‘study’], ‘about’), ([‘are’, ‘about’, ‘study’, ‘the’], ‘to’), ([‘about’, ‘to’, ‘the’, ‘idea’], ‘study’), ([‘to’, ‘study’, ‘idea’, ‘of’], ‘the’), ([‘study’, ‘the’, ‘of’, ‘a’], ‘idea’)]

该练习答案后续更新。


[Translation] 20204 Karl

小讯
上一篇 2025-04-14 11:32
下一篇 2025-05-01 21:15

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/183213.html