fix some return problems; add namener;
Project description
NLUTOOLS: NLU 工具包
nlutools 是一系列模型与算法的nlu工具包,提供以下功能:
- 切词
- 切句
- 词向量
- 句向量
- 预训练模型
- 实体
- 情感分析
- 关键字提取
- 句子相似性计算
- 动宾提取
- 句子合理性判定
- 姓名识别
1 切词
切词工具暂时提供四种模式,接口函数:cut(text, mode, pos, cut_all)
其中
-
text 为要切词的原始文本
-
mode 为分词模式,'accurate' or 'fast' (暂时只支持fast模式,请忽略这个参数)
-
pos为词性保留选项,True or False
-
cut_all为切词粒度控制 True or False (暂时只支持False, 忽略这个参数)
调用方式为:
from nlutools import tools as nlu
nlu.cut('这是一个能够输出名词短语的分词器,欢迎试用!')
返回结果:
{
'np': ['分词器'], // 除去百度百科之外,其他的名词短语
'entity' : ['名词短语'], // 百度百科中会出现的词条
'text': '这是一个能够输出名词短语的分词器,欢迎试用!', // 原始文本
'items' : ['这', '是', '一个', '能够', '输出', '名词短语', '的', '分词器', ',', '欢迎', '试用', '!'], // 分词结果
'pos': ['r', 'v', 'm', 'v', 'v', 'ne', 'uj', 'np', 'x', 'v', 'vn', 'x'] // 词性
}
2 切句
切句工具提供两种模式,接口函数:split(text, mode=0) 【简易接口】 or getSubSentences(text,mode=0)
其中
-
text 为需要进行切句的原始文本序列
-
mode 为切句模式,默认值0(暂时只有这个默认值,忽略这个参数吧)
调用方式:
from nlutools import tools as nlu
nlu.split(['我喜欢在春天去观赏桃花。在夏天去欣赏荷花 在秋天去观赏红叶。但更喜欢在冬天去欣赏雪景。'])
返回结果:
[['我喜欢在春天去观赏桃花', '在夏天去欣赏荷花 在秋天去观赏红叶', '但更喜欢在冬天去欣赏雪景']]
3 词向量
3.1 离线词向量
获得词向量文件,可以根据版本号获取,目前版本号包括:v1.0
默认是下载最新版。获取到的文件夹下面包含两个文件,一个是词向量文件,一个是字向量文件。
from nlutools import tools as nlu
nlu.getW2VFile('v1.0', '/local/path/')
3.2 在线词向量
支持两个来源的词向量,腾讯版(200维)和e成版(300维),通过type参数控制('ifchange' or 'tencent', 默认ifchange)
ifchange词向量基于全量cv工作经历,加入了领域相关实体,通过fasttext训练,没有oov问题。参考:https://fasttext.cc
腾讯词向量具体信息参见:https://ai.tencent.com/ailab/nlp/embedding.html
3.2.1 在线请求词向量
from nlutools import tools as nlu
# type 默认'ifchange'
nlu.w2v('深度学习')
# 腾讯词向量
nlu.w2v('深度学习', type='tencent')
# 或者传入多个词
nlu.w2v(['深度学习', '机器学习'])
3.2.2 获取词向量相似的词:
from nlutools import tools as nlu
# 默认使用e成词向量
nlu.simiwords('深度学习', 10) # 10表示最多返回10个最相似的词
# 或者传入多个词
nlu.simiwords(['深度学习', '机器学习'], 10)
3.2.3 获得两个词的相似度
from nlutools import tools as nlu
# 使用腾讯词向量
nlu.simiscore('深度学习','机器学习',type='tencent')
# 使用echeng词向量
nlu.simiscore('深度学习','机器学习',type='ifchange')
4 句向量
4.1 基于词向量
from nlutools import tools as nlu
nlu.senvec(['主要负责机器学习算法的研究', '训练模型、编写代码、以及其他一些工作']) // 300维
nlu.senvec(['主要负责机器学习算法的研究', '训练模型、编写代码、以及其他一些工作'], type = 'tencent') // 200维
返回结果:
{
'dimention': 300, # 维度
'veclist': [[0.01, ...,0.56],[0.89,...,-0.08]]
}
4.2 基于bert
bert向量有两个版本:基于哈工大全词mask的预训练句向量表征;基于cv中工作经历全词mask的预训练句向量表征 调用方式:
nlu.bertvec(['主要负责机器学习算法的研究', '训练模型、编写代码、以及其他一些工作']) # 哈工大版
nlu.bertvec(['主要负责机器学习算法的研究', '训练模型、编写代码、以及其他一些工作'], mode='cv') # ifchange版本
5 下载预训练中文语言模型
可用的模型有:
- base_cn: Google官方中文Base
- wwm: 哈工大全词MASK_v1
- wwm_ext: 哈工大全词MASK_v2
- ernie_cv: 使用工作经历文本重新训练的ernie模型
调用方式:
# 若给定输出目录,直接进行下载
nlu.bertmodels('wwm_ext', './bert_models')
6 实体
实体识别(转发自图谱组)
基于输入的自然文本,识别 学校(school)、职能(function)、技能(skill)、学历(degree)、专业(major)、公司(company)、证书(certificate) 七大实体
nlu.ner(["我毕业于北京大学"],'ner')
返回结果:
[
[
{
'type': 'school',
'text': '北京大学',
'boundary': [4, 8],
'entityIdCandidates': [{'entityID': '0', 'entityName': '', 'score': 1.0}]
}
]
]
7 情感分析
返回句子的情感极性,持正向和负向情感
参数说明:
- sentences 输入的文本列表
- prob 值为False,不返回预测句子的情感预测得分,只返回情感类别(pos或者neg);值为True,则都返回。
调用方式:
from nlutools import tools as nlu
nlu.emotion(['这家公司很棒','这家公司很糟糕'], prob=False)
返回结果:
{
'text': ['这家公司很棒','这家公司很糟糕'],
'labels': ['pos','neg']
}
8 关键字提取
方法:keywords(content,topk,with_weight)
参数说明:
- content 为输入文本.
- topk 为最大返回关键字个数. 默认3
- with_weight 是否返回关键字的权值. 默认False
调用方式:
from nlutools import tools as nlu
nlu.keywords('主要负责机器学习算法的研究以及搭建神经网络,训练模型,编写代码,以及其他的一些工作',4,True)
返回结果:
{'weights': [9.64244, 9.36891, 6.2782, 5.69476], 'keywords': ['机器学习算法', '神经网络', '训练', '模型']}
9 句子相似度计算
句子相似有2种计算方式,
1基于ifchange词向量的句向量的cosine
2基于腾讯词向量的句向量的cosine
方法: sensimi(text1,text2,precision=100,type='ifchange')
参数说明:
- text1 为待计算句子1
- text2 为待计算句子2
- precision 为计算结果刻度,如1000,则返回0~1000的值
- type : ifchange | tencent 调用方式:
from nlutools import tools as nlu
nlu.sensimi('你家的地址是多少','你住哪里',1000)
返回结果:
{'result': 600}
10 动宾提取
方法: vob(content,mode)
参数说明:
- content 输入文本,str
- mode 提取模式,可选值为 fast 或accurate. 目前仅支持fast,忽略次参数
调用方式:
from nlutools import tools as nlu
nlu.vob('要负责机器学习算法的研究以及搭建神经网络,训练模型,编写代码,以及其他的一些工作')
返回结果:
{'content': [['编写', ' 代码']]}
11 句子合理性判别
方法: rationality(text,with_word_prob)
参数说明:
- text, 带判定句子,类型是list
- with_word_prob,返回结果中是否包含每个词合理性的概率,str,取值范围为 'true' 或 'false'。 默认'false'
调用方式:
from nlutools import tools as nlu
nlu.rationality(['床前明月光,疑是地上霜', '床前星星光,疑是地上霜', '床前白月光,疑是地上霜'])
返回结果:
{
'ppl': [63.2965, 187.2091, 71.3999]
}
12 姓名识别服务
来自nb2组的姓名识别
方法: nlu.namener("刘德华的⽼老老婆叫叶丽倩")
结果: ['刘德华', '叶丽倩']
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.