kashgari的Python项目-NLP框架(实体识别(NER)、词性标注(PoS)和文本分类任务)

简单而强大的NLP框架,在5分钟内为命名实体识别(NER)、词性标注(PoS)和文本分类任务构建最新模型

喀什是:

  • 人性化。喀什噶尔的代码是直截了当的,有很好的文档和测试,这使得它非常容易理解和修改。
  • 功能强大且简单。喀什允许您将最先进的自然语言处理(nlp)模型应用于文本,如命名实体识别(ner)、词性标注(pos)和分类。
  • keras基础。Kashgare直接构建在Keras上,使您可以轻松地训练模型,并使用不同的嵌入和模型结构尝试新方法。
  • 易于微调。Kashgare构建了预先训练的Bert和Word2Vec嵌入模型,这使得基于此嵌入对模型进行微调变得非常简单。
  • 完全可伸缩。喀什为快速实验提供了一个简单、快速、可扩展的环境。

功能列表

  • 嵌入式支架
    • 经典word2vec嵌入
    • 伯特嵌入
    • gpt-2嵌入
  • 序列(文本)分类模型
    • cnnmodel
    • blstm模型
    • cnnlstm模型
    • avcnnmodel
    • KMaxnn模型
    • RCNN模型
    • avrnnmodel
    • dropoutbrumodel
    • 删除avrnnmodel
  • 序列(文本)标签模型(NER、POS)
    • cnnlstm模型
    • blstm模型
    • BLSTMCRFModel
  • 模特训练
  • 模型评估
  • GPU支持/多GPU支持
  • 定制型号

性能

Task Language Dataset Score Detail
Named Entity Recognition Chinese People's Daily Ner Corpus 92.20 (F1) 基于 BERT 的中文命名实体识别

路线图

  • []Migrate to tf.keras
  • []elmo嵌入
  • []经过培训的模特
  • []更多模型结构

教程

下面是一组快速教程,帮助您开始使用库:

  • Tutorial 1: Word Embeddings
  • Tutorial 2: Classification Model
  • Tutorial 3: Sequence labeling Model

还有一些文章和帖子说明了如何使用喀什喀里:

  • 15分钟搭建中文文本分类模型
  • 基于 BERT 的中文命名实体识别(NER)
  • Multi-Class Text Classification with Kashgari in 15 minutes

快速启动

要求和安装

该项目基于Keras 2.2.0+和Python 3.6+,因为现在是2019年,类型提示很酷

pip install kashgari
# CPU
pip install tensorflow==1.12.0
# GPU
pip install tensorflow-gpu==1.12.0

示例用法

让我们使用cnn模型在SMP 2017 ECDT Task1上运行文本分类。

>>>fromkashgari.corpusimportSMP2017ECDTClassificationCorpus>>>fromkashgari.tasks.classificationimportCNNLSTMModel>>>x_data,y_data=SMP2017ECDTClassificationCorpus.get_classification_data()>>>x_data[0]['你','知','道','我','几','岁']>>>y_data[0]'chat'# provided classification models `CNNModel`, `BLSTMModel`, `CNNLSTMModel` >>>classifier=CNNLSTMModel()>>>classifier.fit(x_data,y_data)_________________________________________________________________Layer(type)OutputShapeParam#   =================================================================input_1(InputLayer)(None,10)0_________________________________________________________________embedding_1(Embedding)(None,10,100)87500_________________________________________________________________conv1d_1(Conv1D)(None,10,32)9632_________________________________________________________________max_pooling1d_1(MaxPooling1(None,5,32)0_________________________________________________________________lstm_1(LSTM)(None,100)53200_________________________________________________________________dense_1(Dense)(None,32)3232=================================================================Totalparams:153,564Trainableparams:153,564Non-trainableparams:0_________________________________________________________________Epoch1/51/35[..............................]-ETA:32s-loss:3.4652-acc:0.0469...>>>x_test,y_test=SMP2017ECDTClassificationCorpus.get_classification_data('test')>>>classifier.evaluate(x_test,y_test)precisionrecallf1-scoresupportcalc0.750.750.758chat0.830.860.85154contacts0.540.700.6110cookbook0.970.940.9589datetime0.670.670.676email1.000.880.938epg0.610.560.5836flight1.000.900.9521...

运行gpt-2嵌入

fromkashgari.embeddingsimportGPT2Embeddingfromkashgari.tasks.classificationimportCNNLSTMModelfromkashgari.corpusimportSMP2017ECDTClassificationCorpusgpt2_embedding=GPT2Embedding('',sequence_length=30)model=CNNLSTMModel(gpt2_embedding)train_x,train_y=SMP2017ECDTClassificationCorpus.get_classification_data()model.fit(train_x,train_y)

运行时嵌入Bert

fromkashgari.embeddingsimportBERTEmbeddingfromkashgari.tasks.classificationimportCNNLSTMModelfromkashgari.corpusimportSMP2017ECDTClassificationCorpusbert_embedding=BERTEmbedding('',sequence_length=30)model=CNNLSTMModel(bert_embedding)train_x,train_y=SMP2017ECDTClassificationCorpus.get_classification_data()model.fit(train_x,train_y)

使用word2vec嵌入运行

fromkashgari.embeddingsimportWordEmbeddingsfromkashgari.tasks.classificationimportCNNLSTMModelfromkashgari.corpusimportSMP2017ECDTClassificationCorpusbert_embedding=WordEmbeddings('sgns.weibo.bigram',sequence_length=30)model=CNNLSTMModel(bert_embedding)train_x,train_y=SMP2017ECDTClassificationCorpus.get_classification_data()model.fit(train_x,train_y)

支持多个GPU

fromkashgari.embeddingsimportBERTEmbeddingfromkashgari.tasks.classificationimportCNNLSTMModeltrain_x,train_y=prepare_your_classification_data()# build model with embeddingbert_embedding=BERTEmbedding('bert-large-cased',sequence_length=128)model=CNNLSTMModel(bert_embedding)# or without pre-trained embeddingmodel=CNNLSTMModel()# Build model with your corpusmodel.build_model(train_x,train_y)# Add multi gpu supportmodel.build_multi_gpu_model(gpus=8)# Train, 256 / 8 = 32 samples for every GPU per batchmodel.fit(train_x,train_y,batch_size=256)

贡献

感谢您对贡献的兴趣!有很多方法可以参与进来;从contributor guidelines开始,然后检查这些打开的问题以了解具体的任务。

参考

这个图书馆受到以下框架和论文的启发和参考。

  • flair - A very simple framework for state-of-the-art Natural Language Processing (NLP)
  • anago - Bidirectional LSTM-CRF and ELMo for Named-Entity Recognition, Part-of-Speech Tagging
  • Chinese-Word-Vectors

你可能感兴趣的:(自然语言,python,keras,深度学习)