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

kashgari的Python项目详细描述


喀什喀什

PypiPython versionTravis (.com) branchFOSSA StatusIssuesContributions welcome

简单而强大的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支持
  • 定制型号

性能

TaskLanguageDatasetScoreDetail
Named Entity RecognitionChinesePeople's Daily Ner Corpus92.20 (F1)基于 BERT 的中文命名实体识别

路线图

教程

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

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

快速启动

要求和安装

该项目基于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('<path-to-gpt-model-folder>',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('<bert-model-folder>',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开始,然后检查这些打开的问题以了解具体的任务。

参考

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

许可证

FOSSA Status

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在设置AtomicBoolean之前检查另一个条件?   通过java将文件从windows计算机复制到另一台windows计算机   java如何在使用Cobertura时忽略与记录器相关的If条件?   java无法在Eclipse中导出Android应用程序   带GSON的java parse JSON返回null   java Extract/filter Splunk查询和条件逻辑   java ProgressBar带有一个倒计时器Android   java我应该为每个DAO编写通用方法的集成测试吗?   java从命令行访问执行JAR的文本文件   任务应用程序的java Gradle生成失败:processReleaseResources   预测函数的java DeepLearning4j NN不收敛   java如果发现特殊字符,如何删除字符串中的字符?   在Java中,从精确位置将字符串拆分为两个   将Java ByteArrayOutputStream压缩到不同的容器中   带有同心指示方块的java太空船模拟器制导计算机   java如何使用Jericho解析两条注释?   PersistenceUnit中的java多个类   连接到java中的elasticsearch?   当嵌入HTML页面时,删除java小程序中的外部白色边框   用于webstart的java CXF ClassCastException(SEIStub/ClientProxy)