训练bi-lm模型并将其用作特征提取方法
keras-bi-lm的Python项目详细描述
路缘石BI lm
简介
存储库包含一个类,用于训练双向语言模型,该模型为句子中的每个位置提取特征。
安装
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
引文
引用你看过的报纸。