首发于AI+X

Spacy 集成 BERT,XLNET,GPT-2 与Robert

之前用 Spacy 写了个英文科技论文写作问题检查程序 proofread, 发现 Spacy 是自然语言处理领域非常强大又简单好上手的工具,拥有良好的用户接口。最近,它集成了一大堆流行的 Transformer 架构的自然语言理解与生成的工具,如BERT,XLNET, GPT-2与 Robert。这样的Spacy既简单又强大,想来应该会风靡一时,尚未看到国内报道,特下载尝试并向各位推荐。Github 链接如下,

explosion/spacy-pytorch-transformersgithub.com图标

下载软件可用命令:

pip install spacy-pytorch-transformers

下载预训练的神经网络权重用:

python -m spacy download en_pytt_bertbaseuncased_lg
python -m spacy download de_pytt_bertbasecased_lg
python -m spacy download en_pytt_xlnetbasecased_lg
python -m spacy download en_pytt_robertabase_lg

上面是四个独立的命令,分别下载了 (1)不区分英文大小写的 Bert 预训练权重 (2)区分英文大小写的 Bert 预训练权重 (3)区分英文大小写的 XLNET 预训练权重 (4)RoBert 预训练神经网络权重。作为简单的测试,可以单独下载其中一个,并在后续的测试中使用,个人测试第二个与四个权重无法下载,第一个与第三个可正常下载。Spacy 现在还不支持中文,测试仅用英文。

import spacy

nlp = spacy.load("en_pytt_bertbaseuncased_lg")
doc = nlp("Apple shares rose on the news. Apple pie is delicious. Apple sold fewer iPhones this quarter.")
print(doc[0].similarity(doc[7]))
print(doc[0].similarity(doc[12]))
print(doc._.pytt_last_hidden_state.shape)

上面这段代码使用刚刚下载的 Bert 预训练权重,对一句话进行上下文相关的词嵌入,得到三个不同位置出现的 Apple 的向量表示(doc 中第 0, 7, 12 个单词), 并比较其相似性。最后一个 print 打印出 doc 的向量表示的矩阵形状。输出结果如下,

0.4536172
0.6465952
(26, 768)

结果表示 第一个 Apple(公司) 与 第二个 Apple (水果)的相似度小于第一个 Apple 与 第三个 Apple (公司) 的相似度。输出的每个单词,包括标点,都用一个 768 维的向量表示。doc 里总共的字数小于 26 (总共18个), Spacy 应该是对不同长度的文本分 Batch 进行了预训练,并使用了 Padding。这种上下文相关的词嵌入原则上不能用来比较相似度,因为里面有位置信息,这里仅作示例,请不要当真!

当然,这些预训练模型最大的用处是在新的训练数据上微调。方法非常简单,官方的 Github 页面写的很详细,大家可以下载尝试,做一些好玩的东西。如果想对 Spacy 了解的更深一点,可以参考我之前写的一个简介,

hahakity:自然语言处理就这么简单有趣zhuanlan.zhihu.com图标

发布于 2019-08-28

文章被以下专栏收录

    此专栏会关注AI领域的最新进展,代码复现,交叉学科应用