NTAP-CSSL
ntap的Python项目详细描述
NTAP:神经文本分析管道
ntap
是一个python包,它构建在tensorflow
、sklearn
、pandas
、gensim
、nltk
和其他库之上,以方便使用nlp的现代方法进行文本分析的核心功能。
数据加载和文本功能化
所有NTAP
功能都使用数据集对象类,该类负责从文件加载数据集、清除文本、将文本转换为功能并将结果保存到文件。
ntap.data.dataset
Dataset(source, tokenizer="wordpunct", vocab_size=5000, embed="glove",
min_token=5, stopwords=None, stem=False, lower=True, max_len=100,
include_nums=False, include_symbols=False, num_topics=100,
lda_max_iter=500)
参数
source
:str,单个数据文件的路径。支持的格式:换行分隔的.json
,.csv
,.tsv
,将pandas数据帧保存为.pkl
文件标记器
:str,选择要使用的标记器。如果none
,则将基于空白进行标记。选项基于单词标记器:"wordpunct"…(其他当前不支持)vocab_size
:int,按频率保留顶部的vocab_size
类型。用于文字袋特征,以及神经方法。如果没有,请使用所有词汇表。embed
:str,选择要用于初始化嵌入层的单词嵌入。目前仅支持手套min_token
:int表示调用clean
之后要包含的文档的最小大小(按令牌数)stopWords
:iterable或str,要排除的单词集。默认值为none
,不包括任何单词。选项包括列表/集合,以及指示使用已保存列表的字符串:nltk
是当前唯一受支持的选项,并指示默认的nltk
english liststem
:bool或str,如果false
则不要执行stem/lemmatize,否则遵循由stem
命名的词干处理过程。选项是雪球
小写
:bool,如果为真
则将所有字母字符转换为小写max_len
:int,建模过程中要包含的文档的最大长度(按有效令牌数)。无
将导致由现有文档集计算的最大长度包含nums
:bool,如果true
,则不要丢弃包含数字字符的标记。例如日期、数字和其他数字数据类型。包含符号
:bool,如果true
,则不要丢弃包含非字母数字符号的标记num-topics
:int,设置在以后调用lda
方法时要使用的默认主题数。lda_max_iter
:int,设置lda模型拟合期间要运行的gibbs采样的默认迭代次数
方法
数据集类有许多方法用于控制类的内部功能,这些功能由方法对象调用。最重要的独立方法如下:
数据集.设置参数(**kwargs)
:- 可以随时调用以重置
数据集中的参数子集
- 待办事项:呼叫特定改装(即
\u learn\u vocab
) - 待办事项:呼叫特定改装(即
- 可以随时调用以重置
dataset.clean(column,remove=["hashtags","inspections","links"],mode="remove")
:- 移除与
remove
列表中的描述匹配的任何标记(在调用标记赋予器之前)。然后标记列中的文档,定义词汇表,从不符合长度条件的数据集实例中删除文档。所有这些都是违抗的由数据集中存储的参数确定
列
:str,表示文本文件的列名remove
:listofstr,每个项都指示要删除的令牌类型。如果none
或list为空,则不删除任何标记mode
:str对于以后的迭代,可能会存储标签或链接。当前唯一的选项是删除
- 移除与
dataset对象支持许多特征方法(例如lda、tfidf),这些方法可以由用户直接调用,也可以在方法构造期间隐式调用(请参见方法文档)
dataset.lda(column,method="mallet",save_model=none,load_model=none)
:- < >< <代码> >代码> Mallet > Java应用程序的包装。虽然可以添加lda的其他实现,但目前仅支持此功能。
保存模型
和加载模型
当前不受支持列
:str,文本列方法
:仅支持"mallet"保存模型
:str,指示保存训练主题模型的路径。尚未实施加载模型
:str,指示加载训练主题模型的路径。尚未实施
dataset.ddr(列、字典、**kwargs)
:
- 只有必须提前调用的方法(当前;高级版本将在内部存储字典
列
:数据集中包含文本的列。不必标记化。字典
:str,字典文件的路径。当前支持的类型是.json
和.csv
。.dic
将在更高版本中添加- 可能的
kwargs
includeembed
,可用于设置嵌入源(即embed="word2vec"
,但尚未添加此功能)
数据集.tfidf(列)
:
- 使用
gensim
tfidf实现。如果以前学过vocab,请使用它。否则,重新学习并计算docterm矩阵 列
:str,文本列
示例
下面是数据集对象的一组用例。像SVM
这样的方法在其他地方有介绍,这里仅作说明之用。
from ntap.data import Dataset
from ntap.models import RNN, SVM
gab_data = Dataset("./my_data/gab.tsv")
other_gab_data = Dataset("./my_data/gab.tsv", vocab_size=20000, stem="snowball", max_len=1000)
gab_data.clean()
other_gab_data.clean() # using stored parameters
other_gab_data.set_params(include_nums=True) # reset parameter
other_gab_data.clean() # rerun using updated parameters
gab_data.set_params(num_topics=50, lda_max_iter=100)
base_gab = SVM("hate ~ lda(text)", data=gab_data)
base_gab2 = SVM("hate ~ lda(text)", data=other_gab_data)
基本型号
对于监督学习任务,ntap
提供了两种(当前)基线方法,svm
和lm
。SVM
使用sklearn
的支持向量机分类器实现,而lm
使用elasticnet
(支持正则线性回归)或linear regression
fromsklearn
。两个模型都支持相同类型的核心建模功能:cv
,train
,和predict
,其中cv
可选地支持网格搜索。
所有方法都是使用类似于r
的公式语法创建的。基本模型如SVM
和lm
仅支持单个目标模型,而其他模型支持多个目标。
ntap.models.svm
SVM(formula, data, C=1.0, class_weight=None, dual=False, penalty='l2', loss='squared_hinge', tol=0.0001, max_iter=1000, random_state=None)
LM(formula, data, alpha=0.0, l1_ratio=0.5, max_iter=1000, tol=0.001, random_state=None)
参数
- 公式:str,包含一个
~
符号,将左侧(目标/因变量)与右侧(一系列+
划定的文本标记)分开。右侧标记可以是给定给构造函数的数据集对象中的列,也可以是以下形式的功能调用:<;featurename>;(<;column>;)
数据
:数据集,现有的数据集实例tol
:float,停止标准(不同时期的损失差异)理>max-iter
:int,训练期间的最大迭代次数随机状态
:int
SVM:
c
:float,对应于SVM分类器中的sklearn
"c"参数dual
:bool,对应于SVM分类器中的sklearn
"dual"参数惩罚
:字符串,要使用的正则化函数,对应于sklearn
"惩罚"参数loss
:字符串,要使用的loss函数,对应于sklearn
"loss"参数
LM: < /P>
alpha
:float,控制正则化。alpha=0.0
对应于最小二乘回归。alpha=1.0
是默认的elasticnet设置l1_比率
:浮动,l1和l2正则化之间的权衡。如果l1比值=1.0
则为套索,如果l1比值=0.0
则为脊形
功能
许多函数对lm
和svm
设置参数(**kwargs)
cv
:- 隐式支持网格搜索的交叉验证。如果给定了参数值列表(而不是单个值),则
cv
对所有可能的参数组合运行网格搜索 lm
:cv(data,num_folds=10,metric="r2",random_state=none)
SVM
:cv(数据,num-epochs,num-folds=10,分层=真,metric="准确性")
num_epochs
:要训练的epochs/迭代次数。这应该修改折叠次数
:交叉折叠次数分层
:如果为真,则使用分层折叠拆分数据(甚至参照目标变量进行拆分)metric
:用于比较来自不同参数网格的不同cv结果的度量(如果未指定网格搜索,则不进行比较并且忽略metric
)
- 返回:类的实例
- 包含所有可能的分类(或回归)指标的信息,对于每个cv折叠和跨折叠的平均值
- 包含保存的参数集
- 隐式支持网格搜索的交叉验证。如果给定了参数值列表(而不是单个值),则
列车
- 目前不建议用户申请。使用
cv
代替
- 目前不建议用户申请。使用
- 目前不建议用户申请。使用
cv
代替
示例
from ntap.data import Dataset
from ntap.models import SVM
data = Dataset("./my_data.csv")
model = SVM("hate ~ tfidf(text)", data=data)
basic_cv_results = model.CV(num_folds=5)
basic_cv_results.summary()
model.set_params(C=[1., .8, .5, .2, .01]) # setting param
grid_searched = model.CV(num_folds=5)
basic_cv_results.summary()
basic_cv_results.params
型号
已经为ntap
实现了一个基本模型:rnn
。以后的模型将包括cnn
和其他神经变体。所有模型类(cnn
,rnn
等)都有以下方法:cv
,predict
,以及train
在神经架构中使用文本的模型公式应使用以下语法:
"<;因变量>;~序列(<;文本列>;)"
ntap.models.rnn
RNN(formula, data, hidden_size=128, cell="biLSTM", rnn_dropout=0.5, embedding_dropout=None,
optimizer='adam', learning_rate=0.001, rnn_pooling='last', embedding_source='glove',
random_state=None)
参数
公式
- 类似于基本方法,但支持多目标(多任务学习)。格式为:
"hate+moral~seq(text)"
- 类似于基本方法,但支持多目标(多任务学习)。格式为:
数据
:数据集对象隐藏大小
:int,1层RNN类型模型中的隐藏单元数单元格
:str,RNN单元格的类型。默认为双向长短期内存(LSTM)单元。选项包括bilstm
,lstm
,gru
,和bigru
(双向门循环单元)rnn_dropout
:float,在应用于rnn输出的层中,网络中的参数在dropout期间随机归零的比例。如果无>,不申请退学(不建议)
嵌入中断
:str,未实现优化器
:str,培训期间使用的优化器。选项有:adam
,sgd
,momentum
,和rmsprop
学习率
:培训期间的学习率rnn_池:str或int。如果int,则模型具有自我注意,并且大小为
rnn_pooling
的前向层应用于rnn层的输出以产生注意字母。如果是字符串,可能的选项是last
(默认RNN行为,其中最后一个隐藏向量作为句子表示,先前的状态被删除)mean
(整个序列中的平均隐藏状态)和max
(选择最大隐藏向量)嵌入源代码
:str,可以是手套
或(其他未实现的)随机状态
:int
功能
cv(数据,num椆folds,num椆epochs,comp='精度',model椆dir=none)
- 如果为特定参数指定了多个值,则自动执行网格搜索
数据
:要对其执行cv的数据集num_folds
:intcomp
:str,比较不同参数网格的度量(如果没有网格搜索,则不适用)model\u dir
:如果none
,则训练的模型保存在临时目录中,然后在脚本退出后丢弃。否则,cv
会尝试将每个模型保存在model\u dir指定的路径中
- 返回:cv_results具有最佳模型统计信息(如果是网格搜索)和最佳参数(不支持)的实例
列车(数据,num-epochs=30,批量大小=256,索引=none,模型路径=none)
- 由
cv
调用的方法,可以独立调用。可以对所有数据(索引=无
)或指定子集进行训练。如果model\u path
是none
,则不保存模型,否则尝试将模型保存在model\u path
索引
:要么是none
(对所有数据进行训练),要么是int的列表,其中每个值都是(0,len(data)-1)范围内的索引
- 由
预测(数据,模型路径,索引=无,批量大小=256,检索=列表())
- 根据新数据进行预测。要求保存的模型存在于
model\u路径
索引
:要么是none
(对所有数据进行训练),要么是int的列表,其中每个值都是(0,len(data)-1)范围内的索引
retrieve
:包含字符串列表,这些字符串指示在预测期间要检索哪些模型变量。包括:rnn_alpha
(如果是注意力模式)和hidden_states
(任何模式)- 返回:带{变量名:值列表}的字典。内容是每个目标变量和在
retrieve
中给定的任何模型变量的预测值。
- 根据新数据进行预测。要求保存的模型存在于
from ntap.data import Dataset
from ntap.models import RNN
data = Dataset("./my_data.csv")
base_lstm = RNN("hate ~ seq(text)", data=data)
attention_lstm = RNN("hate ~ seq(text)", data=data, rnn_pooling=100) # attention
context_lstm = RNN("hate ~ seq(text) + speaker_party", data=data) # categorical variable
base_model.set_params({"hidden"=[200, 50], lr=[0.01, 0.05]}) # enable grid search during CV
# Grid search and print results from best parameters
base_results = base_model.CV()
base_results.summary()
# Train model and save. Predict for 6 specific instances and get alphas
attention_lstm.train(data, model_path="./trained_model")
predictions = attention_lstm.predict(data, model_path="./trained_model",
indices=[0,1,2,3,4,5], retrieve=["rnn_alphas"])
for alphas in predictions["rnn_alphas"]:
print(alphas) # prints list of floats, each the weight of a word in the ith document
即将推出…
mil(公式,数据,…)
- 未实现
han(公式,数据,…)
- 未实现
cnn()
- 未实现
ntap.data.tagme
未实现
标记名(token="system",p=0.15,tweet=false)
令牌
(str
):个人标记名
令牌。用户可以通过创建帐户。DEFault behavior("system")假设在安装ntap
期间设置了tagme
标记。 成员:- 获取标记(字符串列表)
- 将
摘要
和类别
存储为成员变量
- 将
- reset()
摘要
:实体id的字典:摘要文本…
}类别
:实体id的字典{类别1,类别2,
}
data = Dataset("path.csv")
data.tokenize(tokenizer='tweettokenize')
abstracts, categories = data.get_tagme(tagme_token=ntap.tagme_token, p=0.15, tweet=False)
# tagme saved as data object at data.entities
data.background_features(method='pointwise-mi', ...) # assumes data.tagme is set; creates features
saves features at data.background
background_mod = RNN("purity ~ seq(words) + background", data=data)
background_mod.CV(kfolds=10)
ntap.data.tacit
未实施。包装默认实例
tacit(path_to_tacit_目录,params to create tacit session)