百度自然语言处理API服务

提供者:刘晓
地址:http://ai.baidu.com/tech/nlp

下载地址

百度自然语言处理:http://ai.baidu.com/tech/nlp
SDK下载地址:http://ai.baidu.com/sdk#nlp

简介

Python SDK文档,主要针对Python开发者描述百度自然语言处理接口服务的相关技术内容。

接口能力:

  • 接口名称: 接口能力简要描述
  • 词法分析: 分词、词性标注、专名识别
  • 依存句法分析: 自动分析文本中的依存句法结构信息
  • 词向量表示: 查询词汇的词向量,实现文本的可计算
  • DNN语言模型: 判断一句话是否符合语言表达习惯,输出分词结果并给出每个词在句子中的概率值
  • 词义相似度: 计算两个给定词语的语义相似度
  • 短文本相似度: 判断两个文本的相似度得分
  • 评论观点抽取: 提取一个句子观点评论的情感属性
  • 情感倾向分析: 对包含主观观点信息的文本进行情感极性类别(积极、消极、中性)的判断,并给出相应的置信度
  • 中文分词: 切分出连续文本中的基本词汇序列(已合并到词法分析接口)
  • 词性标注: 为自然语言文本中的每个词汇赋予词性(已合并到词法分析接口)

版本更新:
2018.01.25 2.2.0 新增文本标签API
2017.12.22 2.0.0 SDK代码重构
2017.5.11 1.0.0 自然语言处理服务上线

安装

安装自然语言处理 Python SDK

自然语言处理 Python SDK目录结构:

|── README.md

├── aip //SDK目录

│ ├── init.py //导出类

│ ├── base.py //aip基类

│ ├── http.py //http请求

│ └── nlp.py //自然语言处理

└── setup.py //setuptools安装

支持Python版本:2.7.+ ,3.+

安装使用Python SDK有如下方式:

如果已安装pip:

pip install baidu-aip  

如果已安装setuptools:

python setup.py install  

使用教程

新建AipNlp

AipNlp是自然语言处理的Python SDK客户端,为使用自然语言处理的开发人员提供了一系列的交互方法。

参考如下代码新建一个AipNlp:

from aip import AipNlp

""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'

client = AipNlp(APP_ID, API_KEY, SECRET_KEY)  

在上面代码中,常量APP_ID在百度云控制台中创建,常量API_KEY与SECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。

注意:如您以前是百度云的老用户,其中API_KEY对应百度云的“Access Key ID”,SECRET_KEY对应百度云的“Access Key Secret”。

配置AipNlp

如果用户需要配置AipNlp的网络请求参数(一般不需要配置),可以在构造AipNlp之后调用接口设置参数,目前只支持以下参数:

接口 说明
setConnectionTimeoutInMillis 建立连接的超时时间(单位:毫秒
setSocketTimeoutInMillis 通过打开的连接传输数据的超时时间(单位:毫秒)

接口说明

词法分析
词法分析接口向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。

text = "百度是一家高科技公司"

""" 调用词法分析 """
client.lexer(text);  
  • 参数 –> text : 必选,string类型,是一个待分析文本(目前仅支持GBK编码),长度不超过65536字节。
  • 返回参数分析:
参数名称 类型 必需 详细说明
text string 原始单条请求文本
items array(object) 词汇数组,每个元素对应结果中的一个词
+item string 词汇的字符串
+ne string 命名实体类型,命名实体识别算法使用。词性标注算法中,此项为空串
+pos string 词性,词性标注算法使用。命名实体识别算法中,此项为空串
+byte_offset int 在text中的字节级offset(使用GBK编码)
+byte_length int 字节级length(使用GBK编码)
+uri string 链指到知识库的URI,只对命名实体有效。对于非命名实体和链接不到知识库的命名实体,此项为空串
+formal string 词汇的标准化表达,主要针对时间、数字单位,没有归一化表达的,此项为空串
+basic_words array(string) 基本词成分
+loc_details array(object) 地址成分,非必需,仅对地址型命名实体有效,没有地址成分的,此项为空数组。
++type string 成分类型,如省、市、区、县
++byte_offset int 在item中的字节级offset(使用GBK编码)
++byte_length nt 字节级length(使用GBK编码)
  • 词法分析返回示例:

     {
         "status":0,
         "version":"ver_1_0_1",
         "results":[
         {
           "retcode":0,
           "text":"百度是一家高科技公司",
          "items":[
         {
            "byte_length":4,
            "byte_offset":0,
            "formal":"",
            "item":"百度",
            "ne":"ORG",
            "pos":"",
            "uri":"",
            "loc_details":[ ],
            "basic_words":["百度"]
          },
          {
            "byte_length":2,
            "byte_offset":4,
            "formal":"",
            "item":"是",
            "ne":"",
            "pos":"v",
            "uri":"",
            "loc_details":[ ],
            "basic_words":["是"]
          },
          {
            "byte_length":4,
            "byte_offset":6,
            "formal":"",
            "item":"一家",
            "ne":"",
            "pos":"m",
            "uri":"",
            "loc_details":[ ],
            "basic_words":["一","家"]
           },
           {
            "byte_length":6,
            "byte_offset":10,
            "formal":"",
            "item":"高科技",
            "ne":"",
            "pos":"n",
            "uri":"",
            "loc_details":[ ],
            "basic_words":["高","科技"]
           },
           {
           "byte_length":4,
           "byte_offset":16,
           "formal":"",
           "item":"公司",
           "ne":"",
           "pos":"n",
           "uri":"",
           "loc_details":[ ],
           "basic_words":["公司"]
           }
          ]
       }
      ]
    }
    
  • 词性缩略说明:
词性 含义 词性 含义 词性 含义 词性 含义
n 普通名词 f 方位名词 s 处所名词 t 时间名词
nr 人名 ns 地名 nt 机构团体名 nw 作品名
nz 其他专名 v 普通动词 vd 动副词 vn 名动词
a 形容词 ad 副形词 an 名形词 d 副词
m 数量词 q 量词 r 代词 p 介词
c 连词 u 助词 xc 其他虚词 w 标点符号
  • 专名识别缩略词含义:
缩略词 含义 缩略词 含义 缩略词 含义 缩略词 含义
PER 人名 LOC 地名 ORG 机构名 TIME 时间

词法分析(定制版)
词法分析接口向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。定制版接口的使用教程请看链接:http://ai.baidu.com/forum/topic/show/496975

text = "百度是一家高科技公司"

""" 调用词法分析(定制版) """
client.lexerCustom(text);
  • 词法分析(定制版) 请求参数详情
参数名称 是否必选 类型 说明
text string 待分析文本(目前仅支持GBK编码),长度不超过65536字节
  • 词法分析(定制版) 返回数据参数详情
参数名称 类型 必需 详细说明
text string 原始单条请求文本
items array(object) 词汇数组,每个元素对应结果中的一个词
+item string 词汇的字符串
+ne string 命名实体类型,命名实体识别算法使用。词性标注算法中,此项为空串
+pos string 词性,词性标注算法使用。命名实体识别算法中,此项为空串
+byte_offset int 在text中的字节级offset(使用GBK编码)
+byte_length int 字节级length(使用GBK编码)
+uri string 链指到知识库的URI,只对命名实体有效。对于非命名实体和链接不到知识库的命名实体,此项为空串
+formal string 词汇的标准化表达,主要针对时间、数字单位,没有归一化表达的,此项为空串
+basic_words array(string) 基本词成分
+loc_details array(object) 地址成分,非必需,仅对地址型命名实体有效,没有地址成分的,此项为空数组。
++type string 成分类型,如省、市、区、县
++byte_offset int 在item中的字节级offset(使用GBK编码)
++byte_length int 字节级length(使用GBK编码)

依存句法分析

依存句法分析接口可自动分析文本中的依存句法结构信息,利用句子中词与词之间的依存关系来表示词语的句法结构信息(如“主谓”、“动宾”、“定中”等结构关系),并用树状结构来表示整句的结构(如“主谓宾”、“定状补”等)。

text = "张飞"

""" 调用依存句法分析 """
client.depParser(text);

""" 如果有可选参数 """
options = {}
options["mode"] = 1

""" 带参数调用依存句法分析 """
client.depParser(text, options)  
  • 依存句法分析 请求参数详情
参数名称 是否必选 类型 说明
text string 待分析文本(目前仅支持GBK编码),长度不超过256字节
mode string 模型选择。默认值为0,可选值mode=0(对应web模型);mode=1(对应query模型)
  • 依存句法分析 返回数据参数详情
参数名称 类型 详细说明
log_id uint64 随机数,本次请求的唯一标识码
id number 词的ID
word string
postag string 词性,请参照API文档中的词性(postag)取值范围
head int 词的父节点ID
+deprel string 词与父节点的依存关系,请参照API文档的依存关系标识
  • 依存句法分析 返回示例

    {
    "log_id": 12345,
    "text":"今天天气怎么样",
    "items":[
    {
    "id":"1", //id
    "word":"今天", //word
    "postag":"t", //POS tag
    "head":"2", //id of current word's parent
    "deprel":"ATT"  //depend relations between current word and parent
    },
    {
    "id":"2",
    "word":"天气",
    "postag":"n",
    "head":"3",
    "deprel":"SBV",
    },
    {
    "id":"3",
    "word":"怎么样",
    "postag":"r",
    "head":"0",
    "deprel":"HED",
    }
    ]
    }  
    

词向量表示

词向量表示接口提供中文词向量的查询功能。

word = "张飞"

""" 调用词向量表示 """
client.wordEmbedding(word);
  • 词向量表示 请求参数详情
参数名称 是否必选 类型 说明

word 是 string 文本内容(GBK编码),最大64字节

  • 词向量表示 返回数据参数详情
参数 类型 描述
log_id uint64 请求唯一标识码
word string 查询词
vec float 词向量结果表示
  • 词向量表示 返回示例

    {
      "word": "张飞",
      "vec": [
    0.233962,
    0.336867,
    0.187044,
    0.565261,
    0.191568,
    0.450725,
    ...
    0.43869,
    -0.448038,
    0.283711,
    -0.233656,
    0.555556
      ]
    }  
    

DNN语言模型

中文DNN语言模型接口用于输出切词结果并给出每个词在句子中的概率值,判断一句话是否符合语言表达习惯。

text = "床前明月光"

""" 调用DNN语言模型 """
client.dnnlm(text);
  • DNN语言模型 请求参数详情
参数名称 是否必选 类型 说明
text string 文本内容(GBK编码),最大512字节,不需要切词
  • DNN语言模型 返回数据参数详情
参数 类型 说明
log_id uint64 请求唯一标识码
word string 句子的切词结果
prob float 该词在句子中的概率值,取值范围[0,1]
ppl float 描述句子通顺的值:数值越低,句子越通顺
{
  "text": "床前明月光",
  "items": [
    {
      "word": "床",
      "prob": 0.0000385273
    },
    {
      "word": "前",
      "prob": 0.0289018
    },
    {
      "word": "明月",
      "prob": 0.0284406
    },
    {
      "word": "光",
      "prob": 0.808029
    }
  ],
  "ppl": 79.0651
}  

词义相似度

输入两个词,得到两个词的相似度结果。

word1 = "北京"

word2 = "上海"

""" 调用词义相似度 """
client.wordSimEmbedding(word1, word2);

""" 如果有可选参数 """
options = {}

""" 带参数调用词义相似度 """
client.wordSimEmbedding(word1, word2, options)
  • 词义相似度 请求参数详情
参数名称 是否必选 类型 说明
word_1 string 词1(GBK编码),最大64字节
word_2 string 词1(GBK编码),最大64字节
  • 词义相似度 返回数据参数详情
参数 类型 描述
log_id number 请求唯一标识码,随机数
score number 相似度分数
words array 输入的词列表
+word_1 string 输入的word1参数
+word_2 string 输入的word2参数
  • 词义相似度 返回示例

    {
        "score": 0.456862,
        "words": {
        "word_1": "北京",
        "word_2": "上海"
        }
    }
    

短文本相似度

短文本相似度接口用来判断两个文本的相似度得分。

text1 = "浙富股份"

text2 = "万事通自考网"

""" 调用短文本相似度 """
client.simnet(text1, text2);

""" 如果有可选参数 """
options = {}
options["model"] = "CNN"

""" 带参数调用短文本相似度 """
client.simnet(text1, text2, options)
  • 短文本相似度 请求参数详情
参数名称 是否必选 类型 可选值范围 说明
text_1 string 待比较文本1(GBK编码),最大512字节
text_2 string 待比较文本2(GBK编码),最大512字节
model string BOW /CNN /GRNN 默认为”BOW”,可选”BOW”、”CNN”与”GRNN”
  • 短文本相似度 返回数据参数详情
参数 类型 描述
log_id number 请求唯一标识
score number 两个文本相似度得分
texts array 输入文本
+text_1 string 第一个短文本
+text_2 string 第二个短文本
  • 短文本相似度 返回示例

    {
        "log_id": 12345,
        "texts":{
        "text_1":"浙富股份",
        "text_2":"万事通自考网"
        },
       "score":0.3300237655639648 //相似度结果
    },  
    

评论观点抽取

评论观点抽取接口用来提取一条评论句子的关注点和评论观点,并输出评论观点标签及评论观点极性。

text = "三星电脑电池不给力"

""" 调用评论观点抽取 """
client.commentTag(text);

""" 如果有可选参数 """
options = {}
options["type"] = 13

""" 带参数调用评论观点抽取 """
client.commentTag(text, options)
  • 评论观点抽取 请求参数详情
参数名称 是否必选 类型 可选值范围 说明
text string 评论内容(GBK编码),最大10240字节
type string 1 - 酒店 2 - KTV 3 - 丽人 4 - 美食餐饮 5 - 旅游 6 - 健康 7 - 教育 8 - 商业 9 - 房产 10 - 汽车 11 - 生活 12 - 购物 13 - 3C 评论行业类型,默认为4(餐饮美食)
  • 评论观点抽取 返回数据参数详情
参数 类型 描述
log_id uint64 请求唯一标识码
prop string 匹配上的属性词
adj string 匹配上的描述词
sentiment int 该情感搭配的极性(0表示消极,1表示中性,2表示积极)
begin_pos int 该情感搭配在句子中的开始位置
end_pos int 该情感搭配在句子中的结束位置
abstract string 对应于该情感搭配的短句摘要
  • 评论观点抽取 返回示例

    {
        "items": [
        {
        "prop":"电池",
        "adj": "不给力",
        "sentiment": 0,
        "begin_pos": 8,
        "end_pos": 18,
        "abstract":"三星电脑<span>电池不给力</span>"
        }
        ]
    }  
    

情感倾向分析

对包含主观观点信息的文本进行情感极性类别(积极、消极、中性)的判断,并给出相应的置信度。

text = "苹果是一家伟大的公司"

""" 调用情感倾向分析 """
client.sentimentClassify(text);
  • 情感倾向分析 请求参数详情
参数名称 是否必选 类型 说明
text string 文本内容(GBK编码),最大2048字节
  • 情感倾向分析 返回数据参数详情
参数 是否必须 类型 说明
text string 输入的文本内容
items array 输入的词列表
+sentiment number 表示情感极性分类结果, 0:负向,1:中性,2:正向
+confidence number 表示分类的置信度
+positive_prob number 表示属于积极类别的概率
+negative_prob number 表示属于消极类别的概率
  • 情感倾向分析 返回示例

    {
        "text":"苹果是一家伟大的公司",
        "items":[
        {
        "sentiment":2,//表示情感极性分类结果
        "confidence":0.40, //表示分类的置信度
        "positive_prob":0.73, //表示属于积极类别的概率
        "negative_prob":0.27  //表示属于消极类别的概率
        }
        ]
    }
    

文章标签

文章标签服务能够针对网络各类媒体文章进行快速的内容理解,根据输入含有标题的文章,输出多个内容标签以及对应的置信度,用于个性化推荐、相似文章聚合、文本内容分析等场景。

title = "iphone手机出现“白苹果”原因及解决办法,用苹果手机的可以看下"

content = "如果下面的方法还是没有解决你的问题建议来我们门店看下成都市锦江区红星路三段99号银石广场24层01室。"

""" 调用文章标签 """
client.keyword(title, content);
  • 文章标签 请求参数详情
参数名称 是否必选 类型 说明
title string 篇章的标题,最大80字节
content string 篇章的正文,最大65535字节
  • 文章标签 返回数据参数详情
参数 是否必选 类型 说明
items array(object) 关键词结果数组,每个元素对应抽取到的一个关键词
+tag string 关注点字符串
+score number 权重(取值范围0~1)
  • 文章标签 返回示例
{
    "log_id": 4457308639853058292,
    "items": [
    {
        "score": 0.997762,
        "tag": "iphone"
    },
    {
        "score": 0.861775,
        "tag": "手机"
    },
    {
        "score": 0.845657,
        "tag": "苹果"
    },
    {
        "score": 0.83649,
        "tag": "苹果公司"
    },
    {
        "score": 0.797243,
        "tag": "数码"
    }
    ]
}  

文章分类

对文章按照内容类型进行自动分类,首批支持娱乐、体育、科技等26个主流内容类型,为文章聚类、文本内容分析等应用提供基础技术支持。

title = "欧洲冠军杯足球赛"

content = "欧洲冠军联赛是欧洲足球协会联盟主办的年度足球比赛,代表欧洲俱乐部足球最高荣誉和水平,被认为是全世界最高素质、最具影响力以及最高水平的俱乐部赛事,亦是世界上奖金最高的足球赛事和体育赛事之一。"

""" 调用文章分类 """
client.topic(title, content);
  • 文章分类 请求参数详情
参数名称 是否必选 类型 说明
title string 篇章的标题,最大80字节
content string 篇章的正文,最大65535字节
  • 文章分类 返回数据参数详情
参数名称 类型 详细说明
item object 分类结果,包含一级与二级分类
+lv1_tag_list array of objects 一级分类结果
+lv2_tag_list array of objects 二级分类结果
++score float 类别标签对应得分,范围0-1
++tag string 类别标签
  • 文章分类 返回示例

    {
        "log_id": 5710764909216517248,
        "item": {
        "lv2_tag_list": [
        {
        "score": 0.895467,
        "tag": "足球"
        },
        {
        "score": 0.794878,
        "tag": "国际足球"
        }
        ],
        "lv1_tag_list": [
        {
        "score": 0.88808,
        "tag": "体育"
        }
        ]
        }
    }
    

错误信息

错误返回格式

若请求错误,服务器将返回的JSON文本包含以下参数:

  • error_code:错误码。
  • error_msg:错误描述信息,帮助理解和解决发生的错误。

错误码

错误码 错误信息 描述
4 Open api request limit reached 集群超限额
14 IAM Certification failed IAM鉴权失败,建议用户参照文档自查生成sign的方式是否正确,或换用控制台中ak sk的方式调用
17 Open api daily request limit reached 每天流量超限额
18 Open api qps request limit reached QPS超限额
19 Open api total request limit reached 请求总量超限额
100 Invalid parameter 无效参数
110 Access token invalid or no longer valid Access Token失效
111 Access token expired Access token过期
282000 internal error 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(632426386)或工单联系技术支持团队。
282002 input encoding error 编码错误,请使用GBK编码
282004 invalid parameter(s) 请求中包含非法参数,请检查后重新尝试
282130 no result 当前查询无结果返回,出现此问题的原因一般为:参数配置存在问题,请检查后重新尝试
282131 input text too long 输入长度超限,请查看文档说明
282133 param {参数名} not exist 接口参数缺失
282300 word error word不在算法词典中
282301 word_1 error word_1提交的词汇暂未收录,无法比对相似度
282302 word_2 error word_2提交的词汇暂未收录,无法比对相似度
282303 word_1&word_2 error word_1和word_2暂未收录,无法比对相似度