路缘石文本分类库
text-classification-keras的Python项目详细描述
文本分类keras
一个高级文本分类库,实现了各种成熟的模型。具有一个干净且可扩展的接口来实现自定义架构
快速启动
安装
pip install text-classification-keras[full]
[full]
将另外安装TensorFlow、Spacy和Deep Plots。如果你想马上开始,请选择此选项。
使用量
fromtexclaimportexperiment,datafromtexcla.modelsimportTokenModelFactory,YoonKimCNNfromtexcla.preprocessingimportFastTextWikiTokenizer# input textX=['some random text','another random text lala','peter',...]# input labelsy=['a','b','a',...]# use the special tokenizer used for constructing the embeddingstokenizer=FastTextWikiTokenizer()# preprocess data (once)experiment.setup_data(X,y,tokenizer,'data.bin',max_len=100)# load datads=data.Dataset.load('data.bin')# construct basefactory=TokenModelFactory(ds.num_classes,ds.tokenizer.token_index,max_tokens=100,embedding_type='fasttext.wiki.simple',embedding_dims=300)# choose a modelword_encoder_model=YoonKimCNN()# build a modelmodel=factory.build_model(token_encoder_model=word_encoder_model,trainable_embeddings=False)# use experiment.train as wrapper for Keras.fit()experiment.train(x=ds.X,y=ds.y,validation_split=0.1,model=model,word_encoder_model=word_encoder_model)
查看更多examples
API文档
https://github.io/jfilter/text-classification-keras/
高级
嵌入
通过设置嵌入类型和相应的嵌入维度,选择预先训练的单词嵌入设置embedding_type=None
以随机初始化单词嵌入(但请确保设置trainable_embeddings=True
以便实际训练嵌入)。
factory=TokenModelFactory(embedding_type='fasttext.wiki.simple',embedding_dims=300)
快速文本
包括几个预先训练的FastText嵌入。目前,我们只有单词嵌入,没有n-gram特征。所有嵌入都有300个维度。
- English Vectors:例如
fasttext.wn.1M.300d
,check out all avaiable embeddings - Multilang Vectors:格式为
fasttext.cc.LANG_CODE
,例如fasttext.cc.en
- Wikipedia Vectors:格式为
fasttext.wiki.LANG_CODE
,例如fasttext.wiki.en
手套
GloVe嵌入是fasttext的前身。一般来说,选择FastText嵌入而不是手套预培训嵌入件的尺寸各不相同
- :例如
glove.6B.50d
,check out all avaiable embeddings
标记化
- 要在标记(或字)级别上工作,请使用标记赋予器,例如
TwokenizeTokenizer
或SpacyTokenizer
。 - 要在标记和句子级别上工作,请使用
SpacySentenceTokenizer
- 要创建自定义标记赋予器,请扩展
Tokenizer
,并实现token_generator
方法。
痉挛
您可以使用spaCy进行标记化。请参阅有关如何 download model用于目标语言。例如,对于英语:
python -m spacy download en
型号
基于令牌的模型
在令牌级别上工作时,请使用TokenModelFactory
。
fromtexcla.modelsimportTokenModelFactory,YoonKimCNNfactory=TokenModelFactory(tokenizer.num_classes,tokenizer.token_index,max_tokens=100,embedding_type='glove.6B.100d')word_encoder_model=YoonKimCNN()model=factory.build_model(token_encoder_model=word_encoder_model)
当前支持的型号包括:
TokenModelFactory.build_model
使用提供的字编码器,然后通过Dense层对其进行分类。
基于句子的模型
在句子级工作时,请使用SentenceModelFactory
。
# Pad max sentences per doc to 500 and max words per sentence to 200.# Can also use `max_sents=None` to allow variable sized max_sents per mini-batch.factory=SentenceModelFactory(10,tokenizer.token_index,max_sents=500,max_tokens=200,embedding_type='glove.6B.100d')word_encoder_model=AttentionRNN()sentence_encoder_model=AttentionRNN()# Allows you to compose arbitrary word encoders followed by sentence encoder.model=factory.build_model(word_encoder_model,sentence_encoder_model)
- Hierarchical attention networks (hans)可以通过构建两个基于注意的rnn模型来构建。当文档很大时,这很有用。
- 对于较小的文档,对句子进行编码的合理方法是对其中的单词进行平均。这可以通过使用
token_encoder_model=AveragingEncoder()
- 混合和匹配编码器,因为你认为适合你的问题。
SentenceModelFactory.build_model
创建了一个分层模型,其中首先使用
word_encoder_model
。然后使用sentence_encoder_model
对每个句子进行所有这样的编码
相关
- https://github.com/brightmart/text_classification
- https://github.com/allenai/allennlp
- https://github.com/facebookresearch/pytext
- https://docs.fast.ai/text.html
- https://github.com/dkpro/dkpro-tc
贡献
如果您有一个问题,发现了一个错误,或者希望提出一个新的功能,请查看issues page。
pull请求在修复错误或提高代码质量时尤其受欢迎。
致谢
建立在拉格万德拉·科蒂卡拉普迪的作品之上:keras-text。
引文
如果您发现文本分类对学术出版物有用,请使用以下bibtex引用:
@misc{raghakotfiltertexclakeras title={Text Classification Keras}, author={Raghavendra Kotikalapudi, and Johannes Filter, and contributors}, year={2018}, publisher={GitHub}, howpublished={\url{https://github.com/jfilter/text-classification-keras}}, }
许可证
麻省理工学院。