1.功能描述:
百度词法分析向用户提供分词、词性标注、命名实体识别三大功能。该服务能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体,百度词法分析的算法效果大幅领先已公开的主流中文词法分析模型。主要功能包括:
中文分词:中文分词是将连续的自然语言文本,切分成具有语义合理性和完整性的词汇序列的过程
词性标注:词性标注(Part-of-Speech tagging 或POS tagging)是指为自然语言文本中的每个词汇赋予一个词性的过程
专有名词:命名实体识别(Named Entity Recognition 简称NER),即"专名识别",是指识别自然语言文本中具有特定意义的实体,主要包括人名、地名、机构名、时间日期等
本文主要对词法分析功能进行评测,并于jieba等词法分析工具进行比较。
2.平台接入
具体接入方式比较简单,可以参考我的另一个帖子,这里就不重复了:
http://ai.baidu.com/forum/topic/show/943327
3.调用攻略(Python3)及评测
3.1首先认证授权:
在开始调用任何API之前需要先进行认证授权,具体的说明请参考:
http://ai.baidu.com/docs#/Auth/top
具体Python3代码如下:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import urllib
import base64
import json
#client_id 为官网获取的AK, client_secret 为官网获取的SK
client_id =【百度云应用的AK】
client_secret =【百度云应用的SK】
#获取token
def get_token():
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
token_content = response.read()
#print (token_content)
if token_content:
token_info = json.loads(token_content)
token_key = token_info['access_token']
return token_key
3.2百度词向量表示接口调用:
详细说明请参考:https://ai.baidu.com/ai-doc/NLP/fk6z52f2u
说明的比较清晰,这里就不重复了。
大家需要注意的是:(通用版)API请求URL: https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer
Body请求示例:
{
"text": "百度是一家高科技公司"
}
Python3调用代码如下:
def lexer(text):
token=get_token()
url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer'
params = dict()
params['text'] = text
params = json.dumps(params).encode('utf-8')
access_token = token
url = url + "?access_token=" + access_token
request = urllib.request.Request(url=url, data=params)
request.add_header('Content-Type', 'application/json')
response = urllib.request.urlopen(request)
content = response.read()
if content:
content=content.decode('GBK')
data = json.loads(content)
print (data)
用于对比的调用Jieba的代码:
def jieba_cut(text):
import jieba
seg_list = jieba.cut(text, cut_all=True, HMM=False)
print("Full Mode: " + "/ ".join(seg_list))
seg_list = jieba.cut(text, cut_all=False, HMM=True)
print("Default Mode: " + "/ ".join(seg_list))
4.功能评测:
词法分析API方式
lexer('人工智能前景非常广阔')
{'log_id': XXX, 'text': '人工智能前景非常广阔',
'items': [
{'loc_details': [], 'byte_offset': 0, 'uri': '', 'pos': 'n', 'ne': '', 'item': '人工智能', 'basic_words': ['人工', '智能'], 'byte_length': 8, 'formal': ''},
{'loc_details': [], 'byte_offset': 8, 'uri': '', 'pos': 'n', 'ne': '', 'item': '前景', 'basic_words': ['前景'], 'byte_length': 4, 'formal': ''},
{'loc_details': [], 'byte_offset': 12, 'uri': '', 'pos': 'd', 'ne': '', 'item': '非常', 'basic_words': ['非常'], 'byte_length': 4, 'formal': ''},
{'loc_details': [], 'byte_offset': 16, 'uri': '', 'pos': 'a', 'ne': '', 'item': '广阔', 'basic_words': ['广阔'], 'byte_length': 4, 'formal': ''}
]}
使用jieba:
jieba_cut('人工智能前景非常广阔')
Full Mode: 人工/ 人工智能/ 智能/ 前景/ 非常/ 非常广阔/ 广阔
Default Mode: 人工智能/ 前景/ 非常广阔
通过对比可以发现,调用词法分析API的结果更加丰富,组合词可以进行进一步分拆,并且对词性进行了分析。
5.测试结论和建议
词法分析(通用版)向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。可以用于多种场景,例如:
语音指令解析:以分词和词性标注为基础,分析语音命令中的关键名词、动词、数量、时间等,准确理解命令的含义,提高用户体验
多轮交互式搜索:通过专名识别定位多轮对话中的核心实体,自动判断后续对话中对该实体的进一步信息需求
实体数据库构建:通过挖掘实体之间、实体与关键词之间的关联,构建实体信息(如人物、机构)数据库
嗯,现在的积分要求有点高,做不到就没啥动力了...
glove用着怎么样?
才能我浪费99:你们这些老友记都不来社区玩了,能不孤单吗
大佬最近挺孤单啊~
对于交互方面会有很多应用
词法分析功能非常强大