SpaCy v2.0(四)实例 - 训练分析模型NER

训练NER

在example/training中有spaCy提供的几个模型训练样例,直接拷贝一个train_ner.py到spaCy的根目录,然后修改代码中的训练语料,改成中文训练语料:

TRAIN_DATA = [

    ('到底谁是张三?',{

        'entities': [(4, 6,'PERSON')]

    }),

    ('我非常喜欢伦敦和柏林.',{

        'entities': [(5, 7,'LOC'), (8, 10, 'LOC')]

    })

]

其中,'entities': [(4, 6, 'PERSON')]:标记出语句中实体所在位置和实体类型,位置计数从0开始,4, 6表示第4各自开始,到第6个字之前,类型为‘PERSON’。然后运行代码:

python train_ner_cn.py -mzh_model -o zh_model

其中:-m 为语言模型名称,-o 为ner模型训练后保存的路径。

代码运行完成后输出:

Entities [('伦敦', 'LOC'), ('柏林', 'LOC')]

Tokens [('我', '', 2), ('非常', '', 2), ('喜欢', '', 2), ('伦敦', 'LOC', 3), ('和', '', 2), ('柏林', 'LOC', 3), ('.', '', 2)]

Entities [('张三', 'PERSON')]

Tokens [('到底', '', 2), ('谁', '', 2), ('是', '', 2), ('张', 'PERSON', 3), ('三', 'PERSON', 1), ('?', '', 2)]

在zh_model目录中可以看到生成了ner目录,目录结构如下:

zh_model

└──ner

    ├──cfg

    ├──lower_model

    ├──moves

    ├──tok2vec_model

    └──upper_model

打开cfg文件查看,可以看到其中的labels已经有了PERSON和LOC两个实体类别。

到此,中文的ner模型就训练完成了,对于精度提升,需要准备至少几百条标注语料才能达到一定的好结果,准备好语料后重新运行训练代码即可。

添加实体分类

实体的分类可以进行自定义添加,同样可以直接使用example/training中的样例,拷贝一个train_new_entity_type.py到spaCy的根目录,然后修改代码中的训练语料,写入中文训练语料:

LABEL = 'ANIMAL'

# training data

# Note: If you're using an existing  model, make sure to mix in examples of

# other entity types that spaCy  correctly recognized before. Otherwise, your

# model might learn the new type, but  "forget" what it previously knew.

# https://explosion.ai/blog/pseudo-rehearsal-catastrophic-forgetting

TRAIN_DATA = [

  ("马是又高大又善良的动物,是人类的好伙伴。", { 'entities': [(0, 1, 'ANIMAL')]}),

  ("它们咬人不?", {'entities': []}),

  ("很多人都很喜爱马。", {'entities': [(7, 8, 'ANIMAL')]}),

  ("人善人欺,马善人骑。", {'entities': [(5, 6, 'ANIMAL')]}),

  ("蒙古有一种马的品种,个子很矮。", {'entities': [(5, 6, 'ANIMAL')]}),

  ("马?", {'entities': [(0, 1, 'ANIMAL')]})

]

在代码的后面(115行)是一个简单的验证,需要修改text文本为中文,而且包含训练样本中指定的实体:

test_text = '您喜欢马吗?'

运行

python train_new_entity_type.py -m zh_model -nm animal -o zh_model

输出结果为:

Entities in '您喜欢马吗?'

ANIMAL 马

此时,再打开cfg文件查看,可以看到其中的labels新增了ANIMAL这个实体分类。

文中完整代码可参考 https://github.com/jeusgao/spaCy-new-language-test-Chinese

你可能感兴趣的:(SpaCy v2.0(四)实例 - 训练分析模型NER)