NTAP-CSSL

ntap的Python项目详细描述


NTAP:神经文本分析管道

ntap是一个python包,它构建在tensorflowsklearnpandasgensimnltk和其他库之上,以方便使用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)

参数

  • sourcestr,单个数据文件的路径。支持的格式:换行分隔的.json.csv.tsv,将pandas数据帧保存为.pkl文件
  • 标记器str,选择要使用的标记器。如果none,则将基于空白进行标记。选项基于单词标记器:"wordpunct"…(其他当前不支持)
  • vocab_sizeint,按频率保留顶部的vocab_size类型。用于文字袋特征,以及神经方法。如果没有,请使用所有词汇表。
  • embedstr,选择要用于初始化嵌入层的单词嵌入。目前仅支持手套
  • min_tokenint表示调用clean之后要包含的文档的最小大小(按令牌数)
  • stopWordsiterablestr,要排除的单词集。默认值为none,不包括任何单词。选项包括列表/集合,以及指示使用已保存列表的字符串:nltk是当前唯一受支持的选项,并指示默认的nltkenglish list
  • stemboolstr,如果false则不要执行stem/lemmatize,否则遵循由stem命名的词干处理过程。选项是雪球
  • 小写bool,如果为真则将所有字母字符转换为小写
  • max_lenint,建模过程中要包含的文档的最大长度(按有效令牌数)。将导致由现有文档集计算的最大长度
  • 包含numsbool,如果true,则不要丢弃包含数字字符的标记。例如日期、数字和其他数字数据类型。
  • 包含符号bool,如果true,则不要丢弃包含非字母数字符号的标记
  • num-topicsint,设置在以后调用lda方法时要使用的默认主题数。
  • lda_max_iterint,设置lda模型拟合期间要运行的gibbs采样的默认迭代次数

方法

数据集类有许多方法用于控制类的内部功能,这些功能由方法对象调用。最重要的独立方法如下:

  • 数据集.设置参数(**kwargs)
    • 可以随时调用以重置数据集中的参数子集
    • 待办事项:呼叫特定改装(即\u learn\u vocab
  • dataset.clean(column,remove=["hashtags","inspections","links"],mode="remove")
    • 移除与remove列表中的描述匹配的任何标记(在调用标记赋予器之前)。然后标记列中的文档,定义词汇表,从不符合长度条件的数据集实例中删除文档。所有这些都是违抗的由数据集中存储的参数确定
    • str,表示文本文件的列名
    • removelistofstr,每个项都指示要删除的令牌类型。如果none或list为空,则不删除任何标记
    • modestr对于以后的迭代,可能会存储标签或链接。当前唯一的选项是删除

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将在更高版本中添加
    • 可能的kwargsincludeembed,可用于设置嵌入源(即embed="word2vec",但尚未添加此功能)
  • 数据集.tfidf(列)
    • 使用gensimtfidf实现。如果以前学过vocab,请使用它。否则,重新学习并计算docterm矩阵
    • str,文本列
  • 以后的方法将包括bert,手套嵌入平均值

示例

下面是数据集对象的一组用例。像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提供了两种(当前)基线方法,svmlmSVM使用sklearn的支持向量机分类器实现,而lm使用elasticnet(支持正则线性回归)或linear regressionfromsklearn。两个模型都支持相同类型的核心建模功能:cvtrain,和predict,其中cv可选地支持网格搜索。

所有方法都是使用类似于r的公式语法创建的。基本模型如SVMlm仅支持单个目标模型,而其他模型支持多个目标。

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>;)
  • 数据数据集,现有的数据集实例
  • tolfloat,停止标准(不同时期的损失差异)
  • max-iterint,训练期间的最大迭代次数
  • 随机状态int

SVM:

  • cfloat,对应于SVM分类器中的sklearn"c"参数
  • dualbool,对应于SVM分类器中的sklearn"dual"参数
  • 惩罚字符串,要使用的正则化函数,对应于sklearn"惩罚"参数
  • loss字符串,要使用的loss函数,对应于sklearn"loss"参数

LM: < /P>

  • alphafloat,控制正则化。alpha=0.0对应于最小二乘回归。alpha=1.0是默认的elasticnet设置
  • l1_比率浮动,l1和l2正则化之间的权衡。如果l1比值=1.0则为套索,如果l1比值=0.0则为脊形

功能

许多函数对lmsvm

都是通用的。
  • 设置参数(**kwargs)
  • cv
    • 隐式支持网格搜索的交叉验证。如果给定了参数值列表(而不是单个值),则cv对所有可能的参数组合运行网格搜索
    • lmcv(data,num_folds=10,metric="r2",random_state=none)
    • SVMcv(数据,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和其他神经变体。所有模型类(cnnrnn等)都有以下方法:cvpredict,以及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)单元。选项包括bilstmlstmgru,和bigru(双向门循环单元)
  • rnn_dropoutfloat,在应用于rnn输出的层中,网络中的参数在dropout期间随机归零的比例。如果无>,不申请退学(不建议)
  • 嵌入中断str,未实现
  • 优化器str,培训期间使用的优化器。选项有:adamsgdmomentum,和rmsprop
  • 学习率:培训期间的学习率
  • rnn_池:strint。如果int,则模型具有自我注意,并且大小为rnn_pooling的前向层应用于rnn层的输出以产生注意字母。如果是字符串,可能的选项是last(默认RNN行为,其中最后一个隐藏向量作为句子表示,先前的状态被删除)mean(整个序列中的平均隐藏状态)和max(选择最大隐藏向量)
  • 嵌入源代码str,可以是手套或(其他未实现的)
  • 随机状态int

功能

  • cv(数据,num椆folds,num椆epochs,comp='精度',model椆dir=none)
    • 如果为特定参数指定了多个值,则自动执行网格搜索
    • 数据要对其执行cv的数据集
    • num_foldsint
    • compstr,比较不同参数网格的度量(如果没有网格搜索,则不适用)
    • model\u dir:如果none,则训练的模型保存在临时目录中,然后在脚本退出后丢弃。否则,cv会尝试将每个模型保存在model\u dir指定的路径中
    • 返回:cv_results具有最佳模型统计信息(如果是网格搜索)和最佳参数(不支持)的实例
  • 列车(数据,num-epochs=30,批量大小=256,索引=none,模型路径=none)
    • cv调用的方法,可以独立调用。可以对所有数据(索引=无)或指定子集进行训练。如果model\u pathnone,则不保存模型,否则尝试将模型保存在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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java读取SSLSocket的最快或最佳方式   JavaGuice向类构造函数注入对象   java类不是抽象的,并且不会覆盖OnClickListener中的抽象方法onClick(视图)   java OpenGL 1.1更改颜色更改以前的颜色?   c#将Java/Android连接到。网络服务   java在节点上生成AES密钥   java Liferay与MarkLogic XDBC数据库集成   java使用静态初始化块来提高性能   java如何在需要不同参数的另一个方法中使用同一类中的方法   音频Java多种声音   Java显式引用转换   java Intellij,如何在maven项目中导入模块   java在什么条件下调用ELResolver的setValue方法?   java在beanshell中计算代码字符串并获取beanshell解释器返回的值   javascript将音频文件上载到服务器并从服务器响应设置图像   编码风格清理java代码,多个else if语句   java是否需要使此变量可变?   java线程未更新GlassPane上的进度条   java关闭调试模式@Vaadin Spring启动应用程序