Kashgari

GitHub Kashgari - 图2 Coverage Status Kashgari - 图4 PyPI

!!! danger 该文档只包括 Kashgari 1.x,Kashgari 2.x 请阅读 https://kashgari.readthedocs.io/en/v2.0.0/

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+.

  1. pip install kashgari-tf
  2. # CPU
  3. pip install tensorflow==1.14.0
  4. # GPU
  5. pip install tensorflow-gpu==1.14.0

基础用法

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

  1. from kashgari.corpus import ChineseDailyNerCorpus
  2. from kashgari.tasks.labeling import BiLSTM_Model
  3. # 加载内置数据集,此处可以替换成自己的数据集,保证格式一致即可
  4. train_x, train_y = ChineseDailyNerCorpus.load_data('train')
  5. test_x, test_y = ChineseDailyNerCorpus.load_data('test')
  6. valid_x, valid_y = ChineseDailyNerCorpus.load_data('valid')
  7. model = BiLSTM_Model()
  8. model.fit(train_x, train_y, valid_x, valid_y, epochs=50)
  9. """
  10. _________________________________________________________________
  11. Layer (type) Output Shape Param #
  12. =================================================================
  13. input (InputLayer) (None, 97) 0
  14. _________________________________________________________________
  15. layer_embedding (Embedding) (None, 97, 100) 320600
  16. _________________________________________________________________
  17. layer_blstm (Bidirectional) (None, 97, 256) 235520
  18. _________________________________________________________________
  19. layer_dropout (Dropout) (None, 97, 256) 0
  20. _________________________________________________________________
  21. layer_time_distributed (Time (None, 97, 8) 2056
  22. _________________________________________________________________
  23. activation_7 (Activation) (None, 97, 8) 0
  24. =================================================================
  25. Total params: 558,176
  26. Trainable params: 558,176
  27. Non-trainable params: 0
  28. _________________________________________________________________
  29. Train on 20864 samples, validate on 2318 samples
  30. Epoch 1/50
  31. 20864/20864 [==============================] - 9s 417us/sample - loss: 0.2508 - acc: 0.9333 - val_loss: 0.1240 - val_acc: 0.9607
  32. """

使用 Bert 语言模型

  1. from kashgari.embeddings import BERTEmbedding
  2. from kashgari.tasks.labeling import BiGRU_Model
  3. from kashgari.corpus import ChineseDailyNerCorpus
  4. # 此处需要自行下载 BERT 权重
  5. bert_embedding = BERTEmbedding('<bert-model-folder>', sequence_length=30)
  6. model = BiGRU_Model(bert_embedding)
  7. train_x, train_y = ChineseDailyNerCorpus.load_data()
  8. model.fit(train_x, train_y)

性能指标

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

贡献

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