训练bi-lm模型并将其用作特征提取方法

keras-bi-lm的Python项目详细描述


路缘石BI lm

TravisCoverage

简介

存储库包含一个类,用于训练双向语言模型,该模型为句子中的每个位置提取特征。

安装

pip install keras-bi-lm

用法

训练并保存bi-lm模型

在将其作为一种特征提取方法之前,必须在一个大型语料库上训练语言模型。

fromkeras_bi_lmimportBiLMsentences=[['All','work','and','no','play'],['makes','Jack','a','dull','boy','.'],]token_dict={'':0,'<UNK>':1,'<EOS>':2,'all':3,'work':4,'and':5,'no':6,'play':7,'makes':8,'a':9,'dull':10,'boy':11,'.':12,}token_dict_rev={v:kfork,vintoken_dict.items()}inputs,outputs=BiLM.get_batch(sentences,token_dict,ignore_case=True,unk_index=token_dict['<UNK>'],eos_index=token_dict['<EOS>'])bi_lm=BiLM(token_num=len(token_dict),embedding_dim=10,rnn_units=10)bi_lm.model.summary()bi_lm.fit(np.repeat(inputs,2**12,axis=0),[np.repeat(outputs[0],2**12,axis=0),np.repeat(outputs[1],2**12,axis=0),],epochs=5)bi_lm.save_model('bi_lm.h5')

BiLM()

包含要训练和使用的模型的核心类。关键参数:

  • token_num:字数或字符数。
  • embedding_dim:嵌入层的维数。
  • rnn_layer_num:堆叠的双向rnn的数目。
  • rnn_units:表示一个方向上rnn的单位数的整数或列表。
  • rnn_keep_num:有多少层用于预测下一个单词的概率。
  • rnn_type:rnn、gru或lstm的类型。

BiLM.get_batch()

一种帮助函数,它将句子转换成批输入和输出,用于训练模型。

  • sentences:令牌列表。
  • token_dict:将标记映射到整数的dict。<UNK><EOS>应该保留。
  • ignore_case:是否忽略令牌的大小写。
  • unk_index:未知标记的索引。
  • eos_index:句子结尾的索引。

加载并使用bi-lm模型

fromkeras_bi_lmimportBiLMbi_lm=BiLM(model_path='bi_lm.h5')# or `bi_lm.load_model('bi_lm.h5')`input_layer,output_layer=bi_lm.get_feature_layers()model=keras.models.Model(inputs=input_layer,outputs=output_layer)model.summary()

output_layer是时间分布特征,模型各层参数不可训练。

使用训练层的类elmo加权和

fromkeras_bi_lmimportBiLMbi_lm=BiLM(token_num=20000,embedding_dim=300,rnn_layer_num=3,rnn_keep_num=4,rnn_units=300,rnn_type='lstm',use_normalization=True)# ...# Train the Bi-LM model# ...input_layer,output_layer=bi_lm.get_feature_layers(use_weighted_sum=True)model=keras.models.Model(inputs=input_layer,outputs=output_layer)model.summary()

rnn_keep_num大于rnn_layer_num时,嵌入层也用于加权。

演示

请参阅demo目录:

cd demo
./get_data.sh
pip install -r requirements.txt
python setiment_analysis.py

引文

引用你看过的报纸。

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

推荐PyPI第三方库


热门话题
java需要64位jdk 1.5 for windows   eclipse运算符+对于参数类型java是未定义的。双,爪哇。双人   未下载文件扩展名为的java文件   java不支持带有POST的媒体类型   从动态创建的多个EditText读取文本时发生java错误   java无法为同一xpath单击多个按钮   如何在Java中动态格式化字符串   java Android Clear Middle活动   多线程Java内存模型volatile和x86   git在Java中通过Jgit忽略文件或文件夹   java“决策无法区分输入的备选方案1、2…”   子类的javajpa继承   java需要弄清楚如何操作mutator来弄清楚一个类,教授说,我对如何操作感到困惑   java如何使用JDBC将数据从文件复制到PostgreSQL?