Skip to main content

lightsmile's nlp library

Project description

lightNLP, lightsmile个人的自然语言处理框架

前言

依据自然语言处理四大任务等,框架主要设计为有以下五大功能:

  • 序列标注, Sequence Labeling
  • 文本分类, Text Classification
  • 句子关系, Sentence Relation
  • 文本生成, Text Generation
  • 结构分析, Structure Parsing

因此将有五个主要的功能模块:sl(序列标注)、tc(文本分类)、sr(句子关系)、tg(文本生成)、sp(结构分析)和其他功能模块如we(字嵌入)。

当前已实现的功能

序列标注,sl

  • 中文分词,cws
  • 命名实体识别,ner
  • 词性标注,pos
  • 语义角色标注, srl

结构分析,sp

  • 基于图的依存句法分析,gdp
  • 基于转移的依存句法分析, tdp

句子关系,sr

  • 语句相似度,ss
  • 文本蕴含,te

文本分类,tc

  • 关系抽取,re
  • 情感极性分析,sa

文本生成,tg

  • 语言模型,lm

安装

本项目基于Pytorch1.0

pip install lightNLP

建议使用国内源来安装,如使用以下命令:

pip install -i https://pypi.douban.com/simple/ lightNLP

安装依赖

由于有些库如pytorch、torchtext并不在pypi源中或者里面只有比较老旧的版本,我们需要单独安装一些库。

安装pytorch

具体安装参见pytorch官网来根据平台、安装方式、Python版本、CUDA版本来选择适合自己的版本。

安装torchtext

使用以下命令安装最新版本torchtext:

pip install https://github.com/pytorch/text/archive/master.zip

模型

  • ner: BiLstm-Crf
  • cws:BiLstm-Crf
  • pos:BiLstm-Crf
  • srl:BiLstm-Crf
  • sa: TextCnn
  • re:TextCnn,当前这里只是有监督关系抽取
  • lm: Lstm,基础的LSTM,没有使用Seq2Seq模型
  • ss: 共享LSTM + 曼哈顿距离
  • te:共享LSTM + 全连接
  • tdp:lstm + mlp + shift-reduce(移入规约)
  • gdp:lstm + mlp + biaffine(双仿射)

训练数据说明

我这里仅是针对当前各任务从网上获取到的训练数据结构类型,有的形式可能并不规范或统一。

ner

BIO

训练数据示例如下:

 B_Time
明 I_Time
是 O
人 B_Person
们 I_Person
祭 O
扫 O
先 B_Person
人 I_Person
, O
怀 O
念 O
追 O
思 O
的 O
日 B_Time
子 I_Time
。 O

正 O
如 O
宋 B_Time
代 I_Time
诗 B_Person
人 I_Person

cws

BIS

训练数据示例如下:

4 S
日 S
清 B
晨 I
, S
同 B
样 I
在 S
安 B
新 I
县 I
人 B
民 I
政 I
府 I
门 B
前 I
, S
不 B
时 I
有 S
民 B
众 I
专 B
程 I
来 I
此 S
拍 B
照 I
留 B
念 I
, S
有 S
的 S
甚 B
至 I
穿 B
着 I
统 B
一 I
的 S
服 B
饰 I
拍 B
起 I
了 S
集 B
体 I
照 I
。 S

pos

BIS

训练数据示例如下:

 B-c
要 I-c
我 B-r
们 I-r
进 B-d
一 I-d
步 I-d
解 B-i
放 I-i
思 I-i
想 I-i
, S-w
实 B-i
事 I-i
求 I-i
是 I-i
, S-w
抓 B-v
住 I-v
机 B-n
遇 I-n
, S-w
开 B-l
拓 I-l
进 I-l
取 I-l
, S-w
建 B-v
设 I-v
有 S-v
中 B-ns
国 I-ns
特 B-n
色 I-n
社 B-n
会 I-n
主 I-n
义 I-n
的 S-u
道 B-n
路 I-n
就 S-c
会 S-v
越 S-d
走 S-v
越 S-d
宽 B-a
广 I-a
。 S-w

srl

CONLL

训练数据示例如下,其中各列分别为词性是否语义谓词角色,每句仅有一个谓语动词为语义谓词,即每句中第三列仅有一行取值为1,其余都为0.

宋浩京  NR      0       O
转达    VV      0       O
了      AS      0       O
朝鲜    NR      0       O
领导人  NN      0       O
对      P       0       O
中国    NR      0       O
领导人  NN      0       O
的      DEG     0       O
亲切    JJ      0       O
问候    NN      0       O
,      PU      0       O
代表    VV      0       O
朝方    NN      0       O
对      P       0       O
中国    NR      0       B-ARG0
党政    NN      0       I-ARG0
领导人  NN      0       I-ARG0
和      CC      0       I-ARG0
人民    NN      0       E-ARG0
哀悼    VV      1       rel
金日成  NR      0       B-ARG1
主席    NN      0       I-ARG1
逝世    VV      0       E-ARG1
表示    VV      0       O
深切    JJ      0       O
谢意    NN      0       O
。      PU      0       O

sa

tsv文件格式

训练数据示例如下:

        label   text
0       0       备胎是硬伤!
1       0       要说不满意的话,那就是动力了,1.5自然吸气发动机对这款车有种小马拉大车的感觉。如今天气这么热,上路肯定得开空调,开了后动力明显感觉有些不给力不过空调制冷效果还是不错的。
2       0       油耗显示13升还多一点,希望慢慢下降。没有倒车雷达真可恨
3       0       空调不太凉,应该是小问题。
4       0       1、后排座椅不能平放;2、科技感不强,还不如百万帝豪,最希望增加车联网的车机。像你好博越一样。3、全景摄像头不清楚,晚上基本上用处不大
5       1       车子外观好看,车内空间大。
6       1       最满意的真的不只一点,概括一下最满意的就是性价比了。ps:虽然没有s7性价比高(原厂记录仪,绿净)
7       0       底盘调教的很低,坐的感觉有些别扭,视角不是很好。
8       0       开空调时,一档起步动力不足。车子做工有点马虎。

re

训练数据示例如下,其中各列分别为实体1实体2关系句子

钱钟书	辛笛	同门	与辛笛京沪唱和聽钱钟书与钱钟书是清华校友,钱钟书高辛笛两班。
元武	元华	unknown	于师傅在一次京剧表演中,选了元龙(洪金宝)、元楼(元奎)、元彪、成龙、元华、元武、元泰7人担任七小福的主角。

lm

就普通的文本格式

训练数据示例如下:

第一章 陨落的天才

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

ss

tsv文件类型

训练数据示例如下,其中各列分别为语句a语句b相似关系,包括0,不相似1,相似

1       怎么更改花呗手机号码    我的花呗是以前的手机号码,怎么更改成现在的支付宝的号码手机号    1
2       也开不了花呗,就这样了?完事了  真的嘛?就是花呗付款    0
3       花呗冻结以后还能开通吗  我的条件可以开通花呗借款吗      0
4       如何得知关闭借呗        想永久关闭借呗  0
5       花呗扫码付钱    二维码扫描可以用花呗吗  0
6       花呗逾期后不能分期吗    我这个 逾期后还完了 最低还款  能分期吗        0
7       花呗分期清空    花呗分期查询    0
8       借呗逾期短信通知        如何购买花呗短信通知    0
9       借呗即将到期要还的账单还能分期吗        借呗要分期还,是吗      0
10      花呗为什么不能支付手机交易      花呗透支了为什么不可以继续用了  0

te

tsv文件类型

训练数据示例如下,其中各列分别为前提假设关系,其中关系包括entailment,蕴含neutral,中立contradiction,矛盾

是的,我想一个洞穴也会有这样的问题      我认为洞穴可能会有更严重的问题。        neutral
几周前我带他和一个朋友去看幼儿园警察    我还没看过幼儿园警察,但他看了。        contradiction
航空旅行的扩张开始了大众旅游的时代,希腊和爱琴海群岛成为北欧人逃离潮湿凉爽的夏天的令人兴奋的目的地。    航空旅行的扩大开始了许多旅游业的发展。  entailment
当两名工人待命时,一条大的白色管子正被放在拖车上。      这些人正在监督管道的装载。      neutral
男人俩互相交换一个很大的金属环,骑着火车向相反的方向行驶。      婚礼正在教堂举行。      contradiction
一个小男孩在秋千上玩。  小男孩玩秋千    entailment

tdp

格式大致如下, 其中每行代表一个sentence和对应的Actions,两者用|||分隔,其中Actions包括三种:ShiftREDUCE_RREDUCE_L,分别代表移入右规约左规约,其中sentence和Actions之间的序列长度对应关系为len(Actions) = 2 * len(sentence) - 1

Bell , based in Los Angeles , makes and distributes electronic , computer and building products . ||| SHIFT SHIFT REDUCE_R SHIFT SHIFT SHIFT SHIFT REDUCE_L REDUCE_R REDUCE_R REDUCE_R SHIFT REDUCE_R SHIFT REDUCE_L SHIFT REDUCE_R SHIFT REDUCE_R SHIFT SHIFT REDUCE_R SHIFT REDUCE_R SHIFT REDUCE_R SHIFT REDUCE_R SHIFT REDUCE_L REDUCE_R SHIFT REDUCE_R
`` Apparently the commission did not really believe in this ideal . '' ||| SHIFT SHIFT SHIFT SHIFT REDUCE_L SHIFT SHIFT SHIFT SHIFT REDUCE_L REDUCE_L REDUCE_L REDUCE_L REDUCE_L REDUCE_L SHIFT SHIFT SHIFT REDUCE_L REDUCE_R REDUCE_R SHIFT REDUCE_R SHIFT REDUCE_R

gdp

CONLL格式,其中各列含义如下:

1	ID	当前词在句子中的序号,1开始.
2	FORM	当前词语或标点  
3	LEMMA	当前词语(或标点)的原型或词干,在中文中,此列与FORM相同
4	CPOSTAG	当前词语的词性(粗粒度)
5	POSTAG	当前词语的词性(细粒度)
6	FEATS	句法特征,在本次评测中,此列未被使用,全部以下划线代替。
7	HEAD	当前词语的中心词
8	DEPREL	当前词语与中心词的依存关系

在CONLL格式中,每个词语占一行,无值列用下划线'_'代替,列的分隔符为制表符'\t',行的分隔符为换行符'\n';句子与句子之间用空行分隔。

示例如:

1       坚决    坚决    a       ad      _       2       方式
2       惩治    惩治    v       v       _       0       核心成分
3       贪污    贪污    v       v       _       7       限定
4       贿赂    贿赂    n       n       _       3       连接依存
5                   u       udeng   _       3       连接依存
6       经济    经济    n       n       _       7       限定
7       犯罪    犯罪    v       vn      _       2       受事

1       最高    最高    n       nt      _       3       限定
2       人民    人民    n       nt      _       3       限定
3       检察院  检察院  n       nt      _       4       限定
4       检察长  检察长  n       n       _       0       核心成分
5       张思卿  张思卿  n       nr      _       4       同位语

使用

ner

训练

from lightnlp.sl import NER

# 创建NER对象
ner_model = NER()

train_path = '/home/lightsmile/Download/ner/test.sample.txt'
dev_path = '/home/lightsmile/Download/ner/train.sample.txt'
vec_path = '/home/lightsmile/Projects/NLP/ChineseEmbedding/model/token_vec_300.bin'

# 只需指定训练数据路径,预训练字向量可选,开发集路径可选,模型保存路径可选。
ner_model.train(train_path, vectors_path=vec_path, dev_path=dev_path, save_path='./ner_saves')

测试

# 加载模型,默认当前目录下的`saves`目录
ner_model.load('./ner_saves')
# 对train_path下的测试集进行读取测试
ner_model.test(train_path)

预测

# 加载模型,默认当前目录下的`saves`目录
ner_model.load('./ner_saves')

from pprint import pprint

pprint(ner_model.predict('另一个很酷的事情是,通过框架我们可以停止并在稍后恢复训练。'))

预测结果:

[2019-02-02 22:42:52] [INFO] [MainThread] [model.py:29] loadding config from ./saves/config.pkl
[2019-02-02 22:42:54] [INFO] [MainThread] [model.py:102] loadding model from ./saves/model.pkl
[{'end': 12, 'entity': '框', 'start': 12, 'type': 'Thing'},
 {'end': 15, 'entity': '我们', 'start': 14, 'type': 'Person'}]

cws

训练

from lightnlp.sl import CWS

cws_model = CWS()

train_path = '/home/lightsmile/NLP/corpus/cws/train.sample.txt'
dev_path = '/home/lightsmile/NLP/corpus/cws/test.sample.txt'
vec_path = '/home/lightsmile/NLP/embedding/char/token_vec_300.bin'

cws_model.train(train_path, vectors_path=vec_path, dev_path=dev_path, save_path='./cws_saves')

测试

cws_model.load('./cws_saves')

cws_model.test(dev_path)

预测

print(cws_model.predict('抗日战争时期,胡老在与侵华日军交战中四次负伤,是一位不折不扣的抗战老英雄'))

预测结果:

['抗日战争', '时期', ',', '胡老', '在', '与', '侵华日军', '交战', '中', '四次', '负伤', ',', '是', '一位', '不折不扣', '的', '抗战', '老', '英雄']

pos

训练

from lightnlp.sl import POS

pos_model = POS()

train_path = '/home/lightsmile/NLP/corpus/pos/train.sample.txt'
dev_path = '/home/lightsmile/NLP/corpus/pos/test.sample.txt'
vec_path = '/home/lightsmile/NLP/embedding/char/token_vec_300.bin'

pos_model.train(train_path, vectors_path=vec_path, dev_path=dev_path, save_path='./pos_saves')

测试

pos_model.load('./pos_saves')

pos_model.test(dev_path)

预测

print(pos_model.predict('向全国各族人民致以诚挚的问候!'))

预测结果:

[('向', 'p'), ('全国', 'n'), ('各族', 'r'), ('人民', 'n'), ('致以', 'v'), ('诚挚', 'a'), ('的', 'u'), ('问候', 'vn'), ('!', 'w')]

srl

训练

from lightnlp.sl import SRL

srl_model = SRL()

train_path = '/home/lightsmile/NLP/corpus/srl/train.sample.tsv'
dev_path = '/home/lightsmile/NLP/corpus/srl/test.sample.tsv'
vec_path = '/home/lightsmile/NLP/embedding/word/sgns.zhihu.bigram-char'


srl_model.train(train_path, vectors_path=vec_path, dev_path=dev_path, save_path='./srl_saves')

测试

srl_model.load('./srl_saves')

srl_model.test(dev_path)

预测

word_list = ['代表', '朝方', '对', '中国', '党政', '领导人', '和', '人民', '哀悼', '金日成', '主席', '逝世', '表示', '深切', '谢意', '。']
pos_list = ['VV', 'NN', 'P', 'NR', 'NN', 'NN', 'CC', 'NN', 'VV', 'NR', 'NN', 'VV', 'VV', 'JJ', 'NN', 'PU']
rel_list = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]

print(srl_model.predict(word_list, pos_list, rel_list))

预测结果:

{'ARG0': '中国党政领导人和人民', 'rel': '哀悼', 'ARG1': '金日成主席逝世'}

sa

训练

from lightnlp.tc import SA

# 创建SA对象
sa_model = SA()

train_path = '/home/lightsmile/Projects/NLP/chinese_text_cnn/data/train.sample.tsv'
dev_path = '/home/lightsmile/Projects/NLP/chinese_text_cnn/data/dev.sample.tsv'
vec_path = '/home/lightsmile/Downloads/1410356697_浅笑哥fight/自然语言处理/词向量/sgns.zhihu.bigram-char'

# 只需指定训练数据路径,预训练字向量可选,开发集路径可选,模型保存路径可选。
sa_model.train(train_path, vectors_path=vec_path, dev_path=dev_path, save_path='./sa_saves')

测试

# 加载模型,默认当前目录下的`saves`目录
sa_model.load('./sa_saves')

# 对train_path下的测试集进行读取测试
sa_model.test(train_path)

预测

sa_model.load('./sa_saves')

from pprint import pprint

pprint(sa_model.predict('外观漂亮,安全性佳,动力够强,油耗够低'))

预测结果:

(1.0, '1') # return格式为(预测概率,预测标签)

re

训练

from lightnlp.tc import RE

re = RE()

train_path = '/home/lightsmile/Projects/NLP/ChineseNRE/data/people-relation/train.sample.txt'
dev_path = '/home/lightsmile/Projects/NLP/ChineseNRE/data/people-relation/test.sample.txt'
vec_path = '/home/lightsmile/NLP/embedding/word/sgns.zhihu.bigram-char'

re.train(train_path, dev_path=dev_path, vectors_path=vec_path, save_path='./re_saves')

测试

re.load('./re_saves')
re.test(dev_path)

预测

print(re.predict('钱钟书', '辛笛', '与辛笛京沪唱和聽钱钟书与钱钟书是清华校友,钱钟书高辛笛两班。'))

预测结果:

(0.7306928038597107, '同门') # return格式为(预测概率,预测标签)

lm

训练

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

ss

训练

from lightnlp.sr import SS

ss_model = SS()

train_path = '/home/lightsmile/Projects/NLP/sentence-similarity/input/atec/ss_train.tsv'
dev_path = '/home/lightsmile/Projects/NLP/sentence-similarity/input/atec/ss_dev.tsv'
vec_path = '/home/lightsmile/NLP/embedding/char/token_vec_300.bin'

ss_model.train(train_path, vectors_path=vec_path, dev_path=train_path, save_path='./ss_saves')

测试

ss_model.load('./ss_saves')
ss_model.test(dev_path)

预测

print(float(ss_model.predict('花呗更改绑定银行卡', '如何更换花呗绑定银行卡')))

预测结果:

0.9970847964286804

te

训练

from lightnlp.sr import TE

te_model = TE()

train_path = '/home/lightsmile/Projects/liuhuaiyong/ChineseTextualInference/data/te_train.tsv'
dev_path = '/home/lightsmile/Projects/liuhuaiyong/ChineseTextualInference/data/te_dev.tsv'
vec_path = '/home/lightsmile/NLP/embedding/char/token_vec_300.bin'

te_model.train(train_path, vectors_path=vec_path, dev_path=train_path, save_path='./te_saves')

测试

te_model.load('./te_saves')
te_model.test(dev_path)

预测

print(te_model.predict('一个小男孩在秋千上玩。', '小男孩玩秋千'))
print(te_model.predict('两个年轻人用泡沫塑料杯子喝酒时做鬼脸。', '两个人在跳千斤顶。'))

预测结果为:

(0.4755808413028717, 'entailment')
(0.5721057653427124, 'contradiction')

tdp

训练

from lightnlp.sp import TDP

tdp_model = TDP()

train_path = '/home/lightsmile/Projects/NLP/DeepDependencyParsingProblemSet/data/train.sample.txt'
dev_path = '/home/lightsmile/Projects/NLP/DeepDependencyParsingProblemSet/data/dev.txt'
vec_path = '/home/lightsmile/NLP/embedding/english/glove.6B.100d.txt'

tdp_model.train(train_path, dev_path=dev_path, vectors_path=vec_path,save_path='./tdp_saves')

测试

tdp_model.load('./tdp_saves')
tdp_model.test(dev_path)

预测

from pprint import pprint
pprint(tdp_model.predict('Investors who want to change the required timing should write their representatives '
                         'in Congress , he added . '))

预测结果如下:

{DepGraphEdge(head=(',', 14), modifier=('he', 15)),
 DepGraphEdge(head=('<ROOT>', -1), modifier=('Investors', 0)),
 DepGraphEdge(head=('Congress', 13), modifier=(',', 14)),
 DepGraphEdge(head=('Investors', 0), modifier=('who', 1)),
 DepGraphEdge(head=('he', 15), modifier=('added', 16)),
 DepGraphEdge(head=('in', 12), modifier=('Congress', 13)),
 DepGraphEdge(head=('representatives', 11), modifier=('in', 12)),
 DepGraphEdge(head=('required', 6), modifier=('timing', 7)),
 DepGraphEdge(head=('should', 8), modifier=('their', 10)),
 DepGraphEdge(head=('the', 5), modifier=('change', 4)),
 DepGraphEdge(head=('the', 5), modifier=('required', 6)),
 DepGraphEdge(head=('their', 10), modifier=('representatives', 11)),
 DepGraphEdge(head=('their', 10), modifier=('write', 9)),
 DepGraphEdge(head=('timing', 7), modifier=('should', 8)),
 DepGraphEdge(head=('to', 3), modifier=('the', 5)),
 DepGraphEdge(head=('want', 2), modifier=('to', 3)),
 DepGraphEdge(head=('who', 1), modifier=('want', 2))}

返回的格式类型为set,其中DepGraphEdge为命名元组,包含headmodifier两元素,这两元素都为(word, position)元组

gdp

训练

from lightnlp.sp import GDP

gdp_model = GDP()

train_path = '/home/lightsmile/NLP/corpus/dependency_parse/THU/train.sample.conll'
vec_path = '/home/lightsmile/NLP/embedding/word/sgns.zhihu.bigram-char'


gdp_model.train(train_path, dev_path=train_path, vectors_path=vec_path, save_path='./gdp_saves')

测试

gdp_model.load('./gdp_saves')
gdp_model.test(train_path)

预测

word_list = ['最高', '人民', '检察院', '检察长', '张思卿']
pos_list = ['nt', 'nt', 'nt', 'n', 'nr']
heads, rels = gdp_model.predict(word_list, pos_list)
print(heads)
print(rels)

预测结果如下,其中程序会自动在语句和词性序列首部填充<ROOT>,因此返回的结果长度为len(word_list) + 1

[0, 3, 3, 4, 0, 4]
['<ROOT>', '限定', '限定', '限定', '核心成分', '同位语']

项目组织结构

项目架构

  • base
    • config.py
    • model.py
    • module.py
    • tool.py
  • sl,序列标注
    • ner,命名实体识别
    • cws,中文分词
    • pos,词性标注
    • srl,语义角色标注
  • sp,结构分析
    • tdp,基于转移的依存句法分析
    • gdp,基于图的依存句法分析
  • sr,句子关系
    • ss,句子相似度
    • te,文本蕴含
  • tc,文本分类
    • re, 关系抽取
    • sa,情感分析
  • tg,文本生成
    • lm,语言模型
    • mt,机器翻译
  • utils

架构说明

base目录

放一些基础的模块实现,其他的高层业务模型以及相关训练代码都从此module继承相应父类。

config

存放模型训练相关的超参数等配置信息

model

模型的实现抽象基类,包含base.model.BaseConfigbase.model.BaseModel,包含loadsave等方法

module

业务模块的训练验证测试等实现抽象基类,包含base.module.Module,包含trainload_validatetest等方法

tool

业务模块的数据处理抽象基类,包含base.tool.Tool,包含get_datasetget_vectorsget_vocabget_iteratorget_score等方法

util目录

放一些通用的方法

todo

业务

工程

  • 增加断点重训功能。
  • 增加earlyStopping。
  • 重构项目结构,将相同冗余的地方合并起来,保持项目结构清晰
  • 现在模型保存的路径和名字默认一致,会冲突,接下来每个模型都有自己的name

功能

  • 增加词向量相关模型以及训练预测代码
  • 增加情感分析相关模型以及训练预测代码
  • 增加文本蕴含相关模型以及训练预测代码
  • 增加文本生成相关模型以及训练预测代码
  • 增加语言模型相关模型以及训练预测代码
  • 增加依存分析相关模型以及训练预测代码
  • 增加关系抽取相关模型以及训练预测代码
  • 增加中文分词相关模型以及训练预测代码
  • 增加词性标注相关模型以及训练预测代码
  • 增加事件抽取相关模型以及训练预测代码
  • 增加属性抽取相关模型以及训练预测代码
  • 增加指代消解相关模型以及训练预测代码
  • 增加自动摘要相关模型以及训练预测代码
  • 增加阅读理解相关模型以及训练预测代码
  • 增加句子相似度相关模型以及训练预测代码
  • 增加序列到序列相关模型以及训练预测代码
  • 增加关键词抽取相关模型以及训练预测代码
  • 增加命名实体识别相关模型以及预测训练代码

参考

Deep Learning

NLP

知识图谱

Pytorch教程

torchtext介绍

其他工具模块

词向量

数据集

序列标注

文本分类

命名实体识别

关系抽取

事件抽取

这里目前粗浅的将语义角色标注技术实现等同于事件抽取任务。

语言模型

文本生成

语句相似度

文本蕴含

中文分词

词性标注

指代消解

依存句法分析

自动摘要

阅读理解

其他

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lightNLP-0.3.0.2.tar.gz (62.4 kB view hashes)

Uploaded Source

Built Distribution

lightNLP-0.3.0.2-py3-none-any.whl (95.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page