跳转至

Kashgari

GitHub Coverage Status PyPI

Kashgari 是一个极简且强大的 NLP 框架,可用于文本分类和标注的学习,研究及部署上线。

  • 方便易用 Kashgari 提供了简洁统一的 API 和完善的文档,使其非常方便易用。
  • 内置迁移学习模块 Kashgari 通过提供 BertEmbedding, GPT2EmbeddingWordEmbedding 等特征提取类,方便利用预训练语言模型实现迁移学习。
  • 易扩展 Kashgari 提供简便的接口和继承关系,自行扩展新的模型结构非常方便。
  • 可用于生产 通过把 Kashgari 模型导出为 SavedModel 格式,可以使用 TensorFlow Serving 模块提供服务,直接在线上环境使用。

我们的使命#

  • 学术研究者 提供易于实验的环境,可快速验证理论。
  • NLP初学者 提供易于学习模仿的生产级别工程。
  • NLP工作者 提供快速搭建文本分类、文本标注的框架,简化日常工作流程。

教程#

这是一些详细的教程:

还有一些博客文章介绍如何使用 Kashgari:

快速开始#

安装#

Important

tf.keras 版本 pypi 包重命名为 kashgari-tf

该项目基于 Tensorflow 1.14.0 和 Python 3.6+.

pip install kashgari-tf
# CPU
pip install tensorflow==1.14.0
# GPU
pip install tensorflow-gpu==1.14.0

基础用法#

下面我们用 Bi_LSTM 模型实现一个命名实体识别任务:

from kashgari.corpus import ChineseDailyNerCorpus
from kashgari.tasks.labeling import BiLSTM_Model

# 加载内置数据集,此处可以替换成自己的数据集,保证格式一致即可
train_x, train_y = ChineseDailyNerCorpus.load_data('train')
test_x, test_y = ChineseDailyNerCorpus.load_data('test')
valid_x, valid_y = ChineseDailyNerCorpus.load_data('valid')

model = BiLSTM_Model()
model.fit(train_x, train_y, valid_x, valid_y, epochs=50)

"""
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
input (InputLayer)           (None, 97)                0
_________________________________________________________________
layer_embedding (Embedding)  (None, 97, 100)           320600
_________________________________________________________________
layer_blstm (Bidirectional)  (None, 97, 256)           235520
_________________________________________________________________
layer_dropout (Dropout)      (None, 97, 256)           0
_________________________________________________________________
layer_time_distributed (Time (None, 97, 8)             2056
_________________________________________________________________
activation_7 (Activation)    (None, 97, 8)             0
=================================================================
Total params: 558,176
Trainable params: 558,176
Non-trainable params: 0
_________________________________________________________________
Train on 20864 samples, validate on 2318 samples
Epoch 1/50
20864/20864 [==============================] - 9s 417us/sample - loss: 0.2508 - acc: 0.9333 - val_loss: 0.1240 - val_acc: 0.9607

"""

使用 Bert 语言模型#

from kashgari.embeddings import BERTEmbedding
from kashgari.tasks.labeling import BiGRU_Model
from kashgari.corpus import ChineseDailyNerCorpus

# 此处需要自行下载 BERT 权重
bert_embedding = BERTEmbedding('<bert-model-folder>', sequence_length=30)
model = BiGRU_Model(bert_embedding)

train_x, train_y = ChineseDailyNerCorpus.load_data()
model.fit(train_x, train_y)

性能指标#

任务 语言 数据集 得分 详情
命名实体识别 中文 人民日报数据集 94.46 (F1) Text Labeling Performance Report

贡献#

如果对 Kashgari 感兴趣,可以通过多种方式加入到该项目。可以通过查阅 贡献指南 来了解更多。