如何在 SpaCy 中使用预训练的 transformer 模型("en_trf_bertbaseuncased_lg")?
How to use the pretrained transformer model ("en_trf_bertbaseuncased_lg") in SpaCy?
我想知道如何使用 spacy 的预训练转换器模型 en_trf_bertbaseuncased_lg
来处理未来的 NLP 任务(NER、POS 等)。文档指出,该模块只能用于以下管道预处理模块 (https://spacy.io/models/en#en_trf_bertbaseuncased_lg):
- 判词器
- trf_wordpiecer
- trf_tok2vec
任何人都可以向我解释一下,这些组件在做什么以及它们可以用于哪些任务?或者有人知道阅读它的好资源吗?
>>> import spacy
>>> nlp = spacy.load("en_trf_bertbaseuncased_lg")
>>> nlp.pipe_names
[sentencizer, trf_wordpiecer, trf_tok2vec]
SpaCy 的 Language Processing Pipelines 应该会引导您找到您正在寻找的信息。
Sentencizer:
一个简单的管道组件,允许不需要依赖解析的自定义句子边界检测逻辑。默认情况下,句子分割由 DependencyParser
执行,因此 Sentencizer
让您可以实施更简单的基于规则的策略,不需要加载统计模型。该组件也可以通过字符串名称 "sentencizer"
获得。初始化后,通常使用 nlp.add_pipe
.
添加到处理管道中
官方文档解释说,您可以使用 BERT spacy 模型 en_trf_bertbaseuncased_lg
模型来获取句子标记的词嵌入。
安装 spacy BERT 模型和 spacy-transformers
模块:
pip install spacy-transformers
python -m spacy download en_trf_bertbaseuncased_lg
下面是官方文档中的一个稍微改编的例子:
import spacy
nlp = spacy.load("en_trf_bertbaseuncased_lg")
doc = nlp("Apple shares rose on the news. Apple pie is delicious.")
# doc[0] accesses the emmbedding of the first token = 'Apple'
print(doc[0]) # Apple
# doc[7] accesses the emmbedding of the 8th token = 'Apple'
print(doc[7]) # Apple
# they are not the same, because the embedding are context sentitive (check with cosine similarity)
print(doc[0].similarity(doc[7])) # 0.43365735
# get the shape of the last hidden layer
print(doc._.trf_last_hidden_state.shape) # (16, 768)
# get the word embeddings for all tokens
print(doc._.trf_last_hidden_state)
[[ 0.34356186 -0.23586863 -0.06684081 ... -0.17081839 0.60623395
0.15930347] [ 0.65008235 0.01991967 -0.11502014 ... -0.5832436 -0.02782568 -0.4122076 ] [ 1.499611 0.02532474 0.23262465 ... -0.3212682 0.27605072
0.18531999] ... [ 0.24741858 0.00736329 -0.28011537 ... -0.1693347 -0.20065884 -0.6950048 ] [ 0.2859776 0.00303659 -0.37783793 ... 0.37828052 0.041728 -0.5648101 ] [ 0.7320844 0.11067941 -0.04100507 ... 0.25042596 -0.21909392 -0.31274694]]
词嵌入可用于更下游的 NLP/machine 学习任务。
trf_wordpiecer分量
- 可通过
doc._.trf_alignment
访问
- 执行模型的词块pre-processing
引自docs:
Wordpiece is convenient for training neural networks, but it doesn't
produce segmentations that match up to any linguistic notion of a
"word". Most rare words will map to multiple wordpiece tokens, and
occasionally the alignment will be many-to-many.
trf_tok2vec分量
- 可通过
doc._.trf_last_hidden_state
访问
- 存储转换器的原始输出:一个张量,每个词块标记一行
- 但是,您可能想要的是
doc.tensor
中的 token-aligned 功能。
另请参阅此 blog article 介绍 spacy 的转换器集成。
我想知道如何使用 spacy 的预训练转换器模型 en_trf_bertbaseuncased_lg
来处理未来的 NLP 任务(NER、POS 等)。文档指出,该模块只能用于以下管道预处理模块 (https://spacy.io/models/en#en_trf_bertbaseuncased_lg):
- 判词器
- trf_wordpiecer
- trf_tok2vec
任何人都可以向我解释一下,这些组件在做什么以及它们可以用于哪些任务?或者有人知道阅读它的好资源吗?
>>> import spacy
>>> nlp = spacy.load("en_trf_bertbaseuncased_lg")
>>> nlp.pipe_names
[sentencizer, trf_wordpiecer, trf_tok2vec]
SpaCy 的 Language Processing Pipelines 应该会引导您找到您正在寻找的信息。
Sentencizer:
一个简单的管道组件,允许不需要依赖解析的自定义句子边界检测逻辑。默认情况下,句子分割由 DependencyParser
执行,因此 Sentencizer
让您可以实施更简单的基于规则的策略,不需要加载统计模型。该组件也可以通过字符串名称 "sentencizer"
获得。初始化后,通常使用 nlp.add_pipe
.
官方文档解释说,您可以使用 BERT spacy 模型 en_trf_bertbaseuncased_lg
模型来获取句子标记的词嵌入。
安装 spacy BERT 模型和 spacy-transformers
模块:
pip install spacy-transformers
python -m spacy download en_trf_bertbaseuncased_lg
下面是官方文档中的一个稍微改编的例子:
import spacy
nlp = spacy.load("en_trf_bertbaseuncased_lg")
doc = nlp("Apple shares rose on the news. Apple pie is delicious.")
# doc[0] accesses the emmbedding of the first token = 'Apple'
print(doc[0]) # Apple
# doc[7] accesses the emmbedding of the 8th token = 'Apple'
print(doc[7]) # Apple
# they are not the same, because the embedding are context sentitive (check with cosine similarity)
print(doc[0].similarity(doc[7])) # 0.43365735
# get the shape of the last hidden layer
print(doc._.trf_last_hidden_state.shape) # (16, 768)
# get the word embeddings for all tokens
print(doc._.trf_last_hidden_state)
[[ 0.34356186 -0.23586863 -0.06684081 ... -0.17081839 0.60623395 0.15930347] [ 0.65008235 0.01991967 -0.11502014 ... -0.5832436 -0.02782568 -0.4122076 ] [ 1.499611 0.02532474 0.23262465 ... -0.3212682 0.27605072 0.18531999] ... [ 0.24741858 0.00736329 -0.28011537 ... -0.1693347 -0.20065884 -0.6950048 ] [ 0.2859776 0.00303659 -0.37783793 ... 0.37828052 0.041728 -0.5648101 ] [ 0.7320844 0.11067941 -0.04100507 ... 0.25042596 -0.21909392 -0.31274694]]
词嵌入可用于更下游的 NLP/machine 学习任务。
trf_wordpiecer分量
- 可通过
doc._.trf_alignment
访问
- 执行模型的词块pre-processing
引自docs:
Wordpiece is convenient for training neural networks, but it doesn't produce segmentations that match up to any linguistic notion of a "word". Most rare words will map to multiple wordpiece tokens, and occasionally the alignment will be many-to-many.
trf_tok2vec分量
- 可通过
doc._.trf_last_hidden_state
访问
- 存储转换器的原始输出:一个张量,每个词块标记一行
- 但是,您可能想要的是
doc.tensor
中的 token-aligned 功能。
另请参阅此 blog article 介绍 spacy 的转换器集成。