1 回答
TA贡献1796条经验 获得超4个赞
我认为不同组件存在一些混淆 - 我将尝试澄清:
分词器不产生向量。它只是一个将文本分割成标记的组件。在 spaCy 中,它是基于规则的,不可训练,与向量没有任何关系。它查看空格和标点符号以确定哪些是句子中的独特标记。
spaCy 中的模型
nlp
可以具有预定义的(静态)词向量,这些词向量可在级别上访问Token
。具有相同 Lexeme的每个标记都获得相同的向量。一些标记/词素可能确实是 OOV,比如拼写错误。如果你想重新定义/扩展模型中使用的所有向量,你可以使用类似的东西init-model
(init vectors
在 spaCy v3 中)。该
tok2vec
层是一个机器学习组件,它学习如何为令牌生成合适的(动态)向量。它通过查看令牌的词法属性来完成此操作,但也可能包括令牌的静态向量(参见第 2 项)。该组件通常不单独使用,而是作为另一个组件的一部分,例如 NER。它将是 NER 模型的第一层,它可以作为训练 NER 的一部分进行训练,以生成适合您的 NER 任务的向量。
在 spaCy v2 中,您可以先使用 训练一个 tok2vec 组件pretrain
,然后将此组件用于后续train
命令。请注意,两个命令的所有设置都必须相同,以使图层兼容。
回答你的问题:
tok2vec 不是生成向量的部分吗?
如果你的意思是静态向量,那么没有。tok2vec 组件在静态向量之上生成新向量(可能具有不同的维度),但它不会更改静态向量。
加载预训练向量然后训练一个组件来预测这些向量是什么意思?这样做的目的是什么?
目的是获得一个tok2vec
已经从外部向量数据中预训练的组件。外部向量数据已经嵌入了标记的某些“含义”或“相似性”,并且可以说是转移到组件中,tok2vec
组件学习产生相同的相似性。关键是这个新tok2vec
组件可以在后续命令中使用和进一步微调train
(参见第 3 项)
有没有办法仍然将它用于 OOV 词?
这真的取决于你的“用途”是什么。
添加回答
举报