工具篇Flair之训练自己的Flair Embeddings

更多实时更新的个人学习笔记分享,请关注:
知乎:https://www.zhihu.com/people/yuquanle/columns
微信订阅号:AI小白入门
ID: StudyForAI

<center> </center>

Flair工具使用教程之如何训练自己的Flair Embeddings


准备文本语料库

  • 语言模型使用纯文本进行训练。 在字符LM的情况下,我们训练它们预测字符序列中的下一个字符。
  • 要训练自己的模型,首先需要一个适当大的语料库。 在作者的实验中,使用了大约10亿字的语料库。
  • 您需要将语料库拆分为训练,验证和测试部分。 我们的trainer假设语料库中有一个文件夹,其中有一个’test.txt’和一个带有测试和验证数据的’valid.txt’。 重要的是,还有一个名为“train”的文件夹,其中包含拆分中的训练数据。 例如,十亿字的语料库被分成100个部分。 如果所有数据不能一次性载入内存,则必须进行拆分,在这种情况下,trainer会随机迭代所有拆分。
  • 因此,文件夹结构必须如下所示:
corpus/
corpus/train/
corpus/train/train_split_1
corpus/train/train_split_2
corpus/train/...
corpus/train/train_split_X
corpus/test.txt
corpus/valid.txt

训练语言模型

  • 获得此文件夹结构后,只需将LanguageModelTrainer类指向它即可开始学习模型。
  • 此脚本中的参数非常小。 作者设置隐藏的大小为1024或2048,序列长度为250,batch大小为100,得到了良好的结果。根据您的资源,您可以尝试训练大型模型,但要注意您需要一个非常强大的GPU和 很多时间训练模型(作者训练> 1周)。
from flair.data import Dictionary
from flair.models import LanguageModel
from flair.trainers.language_model_trainer import LanguageModelTrainer, TextCorpus

# are you training a forward or backward LM?
is_forward_lm = True

# load the default character dictionary
dictionary: Dictionary = Dictionary.load('chars')

# get your corpus, process forward and at the character level
corpus = TextCorpus('/path/to/your/corpus',
                    dictionary,
                    is_forward_lm,
                    character_level=True)

# instantiate your language model, set hidden size and number of layers
language_model = LanguageModel(dictionary,
                               is_forward_lm,
                               hidden_size=128,
                               nlayers=1)

# train your language model
trainer = LanguageModelTrainer(language_model, corpus)

trainer.train('resources/taggers/language_model',
              sequence_length=10,
              mini_batch_size=10,
              max_epochs=10)

使用LM作为嵌入

一旦你训练了LM,使用它作为嵌入很容易。 只需将模型加载到CharLMEmbeddings类中,就像使用Flair中的任何其他嵌入一样使用:

sentence = Sentence('I love Berlin')

# init embeddings from your trained LM
char_lm_embeddings = FlairEmbeddings('resources/taggers/language_model/best-lm.pt')

# embed sentence
char_lm_embeddings.embed(sentence)
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务