首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为OOV词添加新向量的适当方法

为OOV词添加新向量的适当方法
EN

Stack Overflow用户
提问于 2020-07-28 23:28:48
回答 1查看 2.5K关注 0票数 5

我使用的是一些特定于领域的语言,它有大量的OOV单词和一些排字。我注意到Spacy会为这些OOV单词分配一个全零向量,所以我想知道如何正确地处理这个问题。如果可能的话,我感谢对所有这些问题的澄清:

  1. 训练前的命令到底是做什么的?老实说,我似乎无法正确地解析来自网站的解释:

采用近似语言建模的方法,对管道组件的“令牌到矢量”(tok2vec)层进行预训练.具体来说,我们加载预训练向量,并训练像CNN、BiLSTM等组件来预测与预训练向量匹配的向量。

tok2vec不是生成向量的部分吗?那么,这个命令不应该改变生成的向量吗?什么意味着加载预先训练过的向量,然后训练一个组件来预测这些向量?这么做的目的是什么?

--使用向量标志是做什么的?-init-Tok2vec标志是做什么的?这是否被错误地包括在文档中?

  1. 似乎预训练不是我想要的,它不会改变给定单词的向量。什么是最简单的方法来生成一个新的向量集,其中包括我的OOV词,但仍然包含语言的一般知识?
  2. 据我所知,Spacy的预训练模型使用快速文本向量。Fasttext网站提到:

一个不错的功能是,您还可以查询没有出现在您的数据中的单词!实际上,单词是用它的子串的和来表示的。只要未知的单词是由已知的子串组成的,就有它的表示!

但是Spacy似乎没有使用这个功能。还有什么方法可以用这个来做OOV单词吗?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-21 09:32:50

我认为对于不同的组件存在一些混淆--我将试图澄清:

  1. 标记器不产生向量。它只是一个将文本分割成令牌的组件。在spaCy中,它是基于规则的,不可训练的,与向量无关.它查看空格和标点符号,以确定哪些是句子中唯一的标记。
  2. nlp模型在spaCy中可以具有可在Token级别上访问的预定义(静态)字向量。每个具有相同依西米的令牌都得到相同的向量。有些符号/词可能确实是OOV,比如拼写错误。如果要重新定义/扩展模型中使用的所有向量,可以使用类似于init-model (init vectors in spaCy v3)的方法。
  3. tok2vec层是一个机器学习组件,它学习如何为令牌生成合适的(动态)向量。它通过查看令牌的词法属性来做到这一点,但也可能包括令牌的静态向量(cf项2)。这个组件通常不是由它自己使用的,而是另一个组件的一部分,例如一个NER。它将是NER模型的第一层,它可以作为训练NER的一部分进行训练,以生成适合于您的NER任务的向量。

在spaCy v2中,您可以首先使用pretrain训练tok2vec组件,然后将该组件用于后续的train命令。请注意,所有设置都需要在两个命令之间保持相同,才能使层兼容。

回答你的问题:

tok2vec不是生成向量的部分吗?

如果你指的是静态向量,那就不是。tok2vec组件在静态向量的基础上生成新的向量(可能具有不同的维度),但是它不会改变静态向量。

什么意味着加载预先训练过的向量,然后训练一个组件来预测这些向量?这么做的目的是什么?

其目的是从外部向量数据中获得已经预先训练过的tok2vec组件。外部向量数据已经嵌入了令牌的一些“含义”或“相似性”,这就是-so --传递到tok2vec组件中,后者学会产生相同的相似性。重点是可以使用这个新的tok2vec组件&在后续的train命令(cf项目3)中进行进一步的微调。

还有什么方法可以用这个来做OOV单词吗?

这真的取决于你的“用途”是什么。正如https://stackoverflow.com/a/57665799/7961860所提到的,您可以自己设置向量,也可以实现一个用户钩子,它将在如何定义token.vector上实现决定

我希望这能帮到你。如果不理解为什么要使用OOV向量/用例是什么,我就不能真正地向您推荐最佳的方法。很高兴在评论中进一步讨论!

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63144230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档