Bal*_*dML 5 python nlp spacy fasttext
我正在使用一些特定于领域的语言,这些语言有很多 OOV 词以及一些拼写错误。我注意到 Spacy 只会为这些 OOV 词分配一个全零向量,所以我想知道处理这个问题的正确方法是什么。如果可能,我感谢对所有这些要点的澄清:
使用近似的语言建模目标对管道组件的“令牌到向量”(tok2vec)层进行预训练。具体来说,我们加载预训练向量,并训练像 CNN、BiLSTM 等组件来预测与预训练向量匹配的向量
tok2vec 不是生成向量的部分吗?那么这个命令不应该改变产生的向量吗?加载预训练向量然后训练一个组件来预测这些向量是什么意思?这样做的目的是什么?
--use-vectors 标志有什么作用?--init-tok2vec 标志有什么作用?这是否错误地包含在文档中?
似乎 pretrain 不是我要找的,它不会改变给定单词的向量。生成一组新的向量的最简单方法是什么,其中包含我的 OOV 单词但仍包含语言的一般知识?
据我所知,Spacy 的预训练模型使用 fasttext 向量。Fasttext 网站提到:
一个不错的功能是您还可以查询未出现在您的数据中的单词!实际上,单词由其子串的总和表示。只要未知词是由已知子串组成的,就有它的表示!
但似乎 Spacy 不使用此功能。有没有办法仍然将这个用于 OOV 词?
非常感谢
我认为对不同的组件存在一些混淆 - 我将尝试澄清:
nlpspaCy 中的模型可以具有可在Token级别上访问的预定义(静态)词向量。具有相同Lexeme 的每个标记
获得相同的向量。某些标记/词素可能确实是 OOV,例如拼写错误。如果要重新定义/扩展模型中使用的所有向量,可以使用类似init-model.tok2vec层是一个机器学习组件,它学习如何为令牌生成合适的(动态)向量。它通过查看标记的词汇属性来实现这一点,但也可能包括标记的静态向量(参见第 2 项)。该组件通常不单独使用,而是另一个组件的一部分,例如 NER。它将是 NER 模型的第一层,并且可以作为训练 NER 的一部分进行训练,以生成适合您的 NER 任务的向量。在 spaCy v2 中,您可以先用 训练一个 tok2vec 组件pretrain,然后将该组件用于后续train命令。请注意,两个命令的所有设置都需要相同,以使图层兼容。
回答您的问题:
tok2vec 不是生成向量的部分吗?
如果你的意思是静态向量,那么不。tok2vec 组件在静态向量之上生成新向量(可能具有不同的维度),但不会更改静态向量。
加载预训练向量然后训练一个组件来预测这些向量是什么意思?这样做的目的是什么?
目的是获得一个tok2vec已经从外部向量数据预训练的组件。外部向量数据已经嵌入了标记的一些“含义”或“相似性”,这可以说是转移到tok2vec组件中,该组件学习产生相同的相似性。关键是tok2vec可以在随后的train命令中使用和进一步微调这个新组件(参见第 3 项)
有没有办法仍然将这个用于 OOV 词?
这实际上取决于您的“用途”是什么。正如/sf/answers/4036605961/提到的,你可以自己设置向量,或者你可以实现一个用户钩子来决定如何定义token.vector.
我希望这有帮助。在不了解为什么需要 OOV 向量/用例是什么的情况下,我无法真正为您推荐最佳方法。很高兴在评论中进一步讨论!
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |