【语言与知识主题月】词法分析评测
才能我浪费99 发布于2020-07 浏览:4682 回复:6
1
收藏

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.测试结论和建议
词法分析(通用版)向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。可以用于多种场景,例如:
语音指令解析:以分词和词性标注为基础,分析语音命令中的关键名词、动词、数量、时间等,准确理解命令的含义,提高用户体验
多轮交互式搜索:通过专名识别定位多轮对话中的核心实体,自动判断后续对话中对该实体的进一步信息需求
实体数据库构建:通过挖掘实体之间、实体与关键词之间的关联,构建实体信息(如人物、机构)数据库

收藏
点赞
1
个赞
共6条回复 最后由用户已被禁言回复于2022-04
#8笔墨哥回复于2020-08
#6 鹿鼎记肯定回复
才能我浪费99:你们这些老友记都不来社区玩了,能不孤单吗

嗯,现在的积分要求有点高,做不到就没啥动力了...

0
#7Randcase回复于2020-07

glove用着怎么样?

0
#6鹿鼎记肯定回复于2020-07
#5 笔墨哥回复
大佬最近挺孤单啊~

才能我浪费99:你们这些老友记都不来社区玩了,能不孤单吗

0
#5笔墨哥回复于2020-07

大佬最近挺孤单啊~

0
#4才能我浪费99回复于2020-07

对于交互方面会有很多应用

0
#3才能我浪费99回复于2020-07

词法分析功能非常强大

0
TOP
切换版块