语言模型,lm

1.训练数据

就普通的文本格式

训练数据示例如下:

第一章 陨落的天才
    
    “斗之力,三段!”
    望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字,少年面无表情,唇角有着一抹自嘲,紧握的手掌,因为大力,而导致略微尖锐的指甲深深的刺进了掌心之中,带来一阵阵钻心的疼痛……
    “萧炎,斗之力,三段!级别:低级!”测验魔石碑之旁,一位中年男子,看了一眼碑上所显示出来的信息,语气漠然的将之公布了出来……
    中年男子话刚刚脱口,便是不出意外的在人头汹涌的广场上带起了一阵嘲讽的骚动。
    “三段?嘿嘿,果然不出我所料,这个“天才”这一年又是在原地踏步!”
    “哎,这废物真是把家族的脸都给丢光了。”
    “要不是族长是他的父亲,这种废物,早就被驱赶出家族,任其自生自灭了,哪还有机会待在家族中白吃白喝。”
    “唉,昔年那名闻乌坦城的天才少年,如今怎么落魄成这般模样了啊?”

2.使用示例

训练

from lightnlp.tg import LM

lm_model = LM()

train_path = '/home/lightsmile/NLP/corpus/lm_test.txt'
dev_path = '/home/lightsmile/NLP/corpus/lm_test.txt'
vec_path = '/home/lightsmile/NLP/embedding/char/token_vec_300.bin'

lm_model.train(train_path, vectors_path=vec_path, dev_path=train_path, save_path='./lm_saves')

测试

lm_model.load('./lm_saves')

lm_model.test(dev_path)

预测

文本生成

默认生成30个

print(lm_model.generate_sentence('少年面无表情,唇角有着一抹自嘲'))

结果:

少年面无表情,唇角有着一抹自嘲,紧握的手掌,因,无所谓的面上,那抹讥讽所莫下了脚步,当时的

得到给定上文下,下一个字的topK候选集及其概率

默认输出top5个

print(lm_model.next_word_topk('少年面无表情,唇角'))

结果:

[('有', 0.9791949987411499), ('一', 0.006628755945712328), ('不', 0.004853296559303999), ('出', 0.0026260288432240486), ('狠', 0.0017451468156650662)]

评估语句分数

结果为以10为底的对数,即log10(x)

print(lm_model.sentence_score('少年面无表情,唇角有着一抹自嘲'))

结果:

-11.04862759023672

评估当前上文下,某一个字作为下一个字的可能性

print(lm_model.next_word('要不是', '萧'))

结果:

0.006356663070619106