spaCy简介和安装

spaCy是一个自然语言处理工具,可以用来词性标注、依存句法分析、命名体识别、tokenize、分句和规则匹配。spaCy支持自己用标记的数据训练自定义模型,这样就可以训练自定义类别的命名体识别分类器。

安装很简单:

pip install -U spacy

下一步是安装模型,对于英文:

python -m spacy download en_core_web_lg

但是模型太大,总是下载失败,需要手动下载。 用浏览器打开 https://github.com/explosion/spacy-models/releases/download/en_core_web_lg-2.0.0/en_core_web_lg-2.0.0.tar.gz

模型下载好后,解压,随便放在一个目录下,比如Downloads/,然后

python -m spacy link ~/Downloads/en_core_web_lg-2.0.0/en_core_web_lg en_core_web_lg

如果出现

实验结果树状图

表示安装成功。

spaCy命名体识别

spaCy的命名体识别采用transition-based模型。命名体识别用法见Named Entities。一个简单的脚本见spacyner.py

spaCy暂时没有中文完整模型,中文只支持内嵌结巴的分词。Training the named entity recognizer 说明了如何用自己标记的数据更新已有模型和训练新的模型。 训练数据形如

# training data
TRAIN_DATA = [
    ('Who is Shaka Khan?', {
        'entities': [(7, 17, 'PERSON')]
    }),
    ('I like London and Berlin.', {
        'entities': [(7, 13, 'LOC'), (18, 24, 'LOC')]
    })
]

annotate_ner.py 用来辅助标记训练数据,用法见脚本注释。辅助标记脚本的输出形如:

('旗 下 帕金森病 治疗 药物 , 是 一 种 脱羧 酶 抑制剂 , 用于 患 有 神经 退行性 运动 障碍 以及 无法 稳定 控制 病情 的 帕金森症 患者 。', {'entities': [(4, 8, 'SYMPTOM'), (23, 31, 'DRUG'), (71, 75, 'SYMPTOM')]})
('未来 NMI 将 给予 强有力 且 持续 的 微生物 研究 领域 的 联邦 投资 , 计划 在 今后 两 年 推出 总额 超过 1亿 2100万 美元 的 微生物 研究 项目 , 其中 包括 : 美国 能源部 提出 的 1000万 美元 的 对 微生物 的 跨 学科 研究', {'entities': [(3, 6, 'ORG'), (23, 32, 'DOMAIN'), (78, 84, 'DOMAIN'), (98, 104, 'ORG'), (123, 126, 'DOMAIN')]})
('另外 CAR-T 疗法 在 血液 肿瘤 上 也 取得 了 一些 很 好 的 成果 。', {'entities': [(3, 11, 'TECH'), (14, 19, 'SYMPTOM')]})
('5月 1日 脊灰 疫苗 免疫 策略 调整 后 , 我国 将 实行 「 1剂 IP V+ 3剂O PV 」 的 免疫 程序 , 即 儿童 的 四 次 脊灰 疫苗 接种 中 , 接种 1剂 脊灰 病毒 灭活疫苗 , 其他 三 次 接种 减 毒 活疫苗 。', {'entities': [(6, 11, 'DRUG'), (74, 79, 'DRUG'), (93, 103, 'DRUG'), (116, 123, 'DRUG')]})
('来自 斯坦福 大学 医学院 的 科学家 们 首 次 证实 , 靶向 GD2 的 CAR-T 细胞 能够 在 小鼠 模型 中 战胜 一 种 致命 的 儿童 脑肿瘤 —— 脑干 胶质瘤 DIPG 。', {'entities': [(3, 13, 'ORG'), (77, 80, 'SYMPTOM'), (84, 90, 'SYMPTOM'), (91, 95, 'SYMPTOM')]})

然后运行官方例子稍作修改的zh_trainer_ner.py:

训练完成后,在运行识别程序的时候,把模型改成训练的模型,整个自定义中文命名体识别器就做好了。