首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 IBM Watson API 分析淘宝用户评论(5)理解商品评论

使用 IBM Watson API 分析淘宝用户评论(5)理解商品评论

使用 Natural Language Understanding                理解商品评论Natural Language Understanding 介绍Natural Language Understanding API 是本文主要使用的 API,通过这个                API,开发人员能够分析文本输入的语义特征,包括类别、概念、情感、实体、关键字、元数据、关系、语义角色和情感。它的输入可以是文本、HTML 或公共                URL,并指定以下一个或多个要分析的特征:
  • 类别(Categories)
使用五级分类层次结构对内容进行分类。点 可以查看完整的类别列表。例如:            输入新闻网址: www.cnn.com,则 API 的响应类别如下:
/news
/art and entertainment
/movies and tv/television
/news
/international news
API 能识别出网站或者文本的分类信息,可以实现一些自动分类和检索的任务。
  • 情感(Emotion)
分析短语或文档整体所传达的情感。这里会把情感分为 5                种类型:生气(anger)、反感(disgust)、忧虑(fear)、喜悦(joy)和不满(sadness),这种分析可以帮助我们分析顾客的商品评论来洞察顾客对商品和服务的态度。并且每种情感有评分,评分越高,代表该情感越强烈。比如输入“这个商品的质量令人很满意,但是快递太慢了”,指定特定短语"产品"和"快递",返回结果为:"产品":                joy,"快递": anger。说明这个顾客对产品比较满意,但对快递运输不是很满意。
  • 情绪(Sentiment)
分析具体目标短语的情感和文档的整体情感。这里和情感不同的是,它通过文字检测出整体所表达的态度,如是积极的、消极的或者中立的。例如还是输入"这个商品的质量令人很满意,但是快递太慢了"这句话,返回结果为:消极的(negative),分数:                -0.603192,分数越高,表示这个态度越强烈。如下图 7 所示:
图 7. 情绪 API REST                    返回结果
  • 实体(Entities)
查找您的内容中提到的人、地点、事件和其他类型的实体。例如:输入: "IBM 是一家总部设在美国纽约阿蒙克的美国跨国公司,业务遍布 170                多个国家",则返回结果为:
IBM: 公司
Armonk: 地点
New York: 地点
United States: 地点
这样的实体识别,能够帮助实现语义分析,然后进一步实现文本自动分类、人机交互等应用。
  • 关键词(Keywords)
搜索文本内容以获取相关关键词。例如输入文字:"这个商品的质量令人很满意,但是快递太慢了",返回结果为:
快递: 0.981768
质量: 0.570591
产品: 0.566909
通过关键词分析,能够识别一段文本中的要点关键词,可以进一步帮助分析情绪产生的原因。
  • 概念(Concepts)
识别文字中的高级概念,并且有的概念不一定在文本中直接引用的。
  • 元数据(Metadata)
对于 HTML 和 URL 输入,获取网页的作者、页面标题和发布日期。也可以实现自动文本网页分类。
  • 语义角色(Semantic Roles)
将句子解析成对象动作对象形式,并识别作为动作的对象或对象的实体和关键字。例如:
输入: "去年,王小明买了一辆雪佛兰牌的车",返回结果为:
主体: 王小明
动作: 购买
对象: 雪佛兰车
这样的分析能够帮助我们实现语义分析与人机交互程序如机器人等小程序。
分析商品评论Natural Language Understanding 是专门理解自然语言的认知程序                API,由于它可以对商品评论信息做出深入和多个维度的洞察,用户可以自由选择分析维度和深度,所以相比语言翻译接口的使用要稍微复杂些。但总体还是包含上面说的三个部分,下面我们介绍如何使用这个接口来处理商品评论信息。
首先,如清单 7 所示先配置远程调用参数:
清单 7. 配置 NLU                服务的远程调用参数
1
2
3
4
5
6
7
8
9
// API 版本,参考 API 手册
String version = "2018-03-19";

// 密钥,此处代码隐藏了实际的密钥值,应该填写你开通这个服务后分配的密钥
String api_key = "…………………………………" ;  

// API 调用地址,系统分配
String end_point = "https://gateway-syd.watsonplatform.net/natural-language-understanding/api";
IamOptions options = new IamOptions.Builder().apiKey(api_key).build();




接着,如清单 8 所示创建 Natural Language Understanding 服务对象,并且设置调用参数和调用地址:
清单 8. 创建                    Natural Language Understanding                服务对象
1
2
NaturalLanguageUnderstanding service = new NaturalLanguageUnderstanding(version,options);
service.setEndPoint(end_point);




Natural Language Understanding                接口能够分析文本输入的多种语义特征,所以,还需要根据业务需要指定一个或多个要分析的特征。这里,由于我们要分析商品评论,所以本例从情绪、情感、概念和关键字这                4 个维度分析,就要设置这 4 个维度特征的参数,具体代码如清单 9 所示:
清单 9.                配置特征参数
1
2
3
4
5
6
7
8
9
10
11
12
13
// 设置情绪(Emotion)参数
EmotionOptions emotionOptions = new EmotionOptions.Builder().build();

// 设置情感(Sentiment)参数
SentimentOptions sentimentOptions = new SentimentOptions.Builder().build();

// 设置概念(Concepts)参数
ConceptsOptions conceptsOptions = new ConceptsOptions.Builder().limit(10).build();

// 设置关键字(Keywords)参数
KeywordsOptions keywordsOptions = new KeywordsOptions.Builder()
          //.emotion(true).sentiment(true)
          .limit(10).build();




本例中,每个参数根据其自身的特征,有不同的设置方法:
  • 情绪(Emotion)参数:只需要创建一个 EmotionOptions 对象。
  • 情感(Sentiment)参数:只需要创建一个 SentimentOptions 对象。
  • 概念(Concepts)参数:创建一个 ConceptsOptions 对象,并且可以设置返回概念最大数量。
  • 关键字(Keywords)参数:创建一个 KeywordsOptions                    对象,并且可以设置返回关键字最大数量,该参数也可以设置是否为每个实体返回情绪(Emotion)特征数值或情感(Sentiment)特征数值。
然后,为了使最终服务调用的参数简单,还需要将上面这些参数集中加入到一个 Features 对象中,如清单 10 所示:
清单 10. 配置 Features                对象
1
2
3
4
5
6
Features features = new Features.Builder()
          .concepts(conceptsOptions)
          .emotion(emotionOptions)
          .keywords(keywordsOptions)
          .sentiment(sentimentOptions)
          .build();




最后,如清单 11 所示,用要分析的商品评论文本和上面包装后的参数,创建一个 AnalyzeOptions 对象,再调用                NaturalLanguageUnderstanding 服务的 analyze 方法进行分析,得到返回结果是一个 AnalysisResults                对象。
清单 11.                开始分析并返回结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 参数
AnalyzeOptions parameters = new AnalyzeOptions.Builder()
          .text(text)
          .features(features)
          .build();

// 结果
AnalysisResults result = service.analyze(parameters).execute();

Double anger1 = result.getEmotion().getDocument().getEmotion().getAnger();
Double joy1 = result.getEmotion().getDocument().getEmotion().getJoy();
String sentiment1 = result.getSentiment().getDocument().getLabel();
Double sentiment1Value = result.getSentiment().getDocument().getScore();
String categories1 = result.getCategories().get(0).getLabel();
String keyword1 = result.getKeywords().get(0).getText();




用要分析的商品评论文本和上面包装后的参数,创建一个 AnalyzeOptions 对象 parameters,再调用                NaturalLanguageUnderstanding 服务的 analyze 方法进行分析,返回结果是一个 AnalysisResults                对象实例,可以得到设置的各个特征的返回值:
  • 情绪(Emotion):getEmotion().getDocument().getEmotion()能得到五种情绪的分值,如                    getAnger()得到生气的分值,getJoy()得到喜悦的分值,数值越大,该情绪的比重越高。
  • 情感(Sentiment):getSentiment().getDocument()得到情感结果,getLabel()返回情感类型,getScore()返回该情感的分数,分数越大,该情感越强烈。
  • 概念(Concepts):getCategories()得到概念列表。
  • 关键字(Keywords):getKeywords()得到关键字列表。
返回列表