此例是我之前在学习nlp过程中的一个demo项目,并使用了HanLP官网提供的API接口实现功能,具体需求如下:
1 .项目背景
平时收集了一下客户对于餐馆的评价,这些数据一方面可以让每一位用户清楚地看到每个商家所提供的服务质量,同时让一个商家也意识到自己的问题所在。 但是面对大量的评论数据,如何让一个用户或者商家能够更方便地看到全貌呢? 这就是本项目中需要解决的问题。
目标是将这些评价数据进行分类,比如分成满意或者不满意,这一类基于用户评价的情感极性分析系统,来策划餐馆满意菜品的推荐、用倾向性分析来帮助商家从大量评论中挖掘有价值的信息,更好的认识服务的特色点,不足点。以及提高创收利润。
2 .查看数据。评价数据的抽样:
可以看到数据集中有餐馆的id编号,以及对餐馆的评价分数(总体评分、环境、口味、服务)
3. 数据清洗:
在语料库中找到我们感兴趣的东西,把不感兴趣的、视为噪声的内容清洗掉,比如从网络上爬取的乱码、时间戳等文本(上面用户点评的数据已经经过了数据清洗)
4. 分词:
中文文本通常是一批短文本或者是长文本,比如:一篇文章摘要、一则简讯快报、一个段落等,一般在此类文本中句子之间的字和词是连续的,有一定的含义。但是在我们进行文本处理的时候,更多的希望可以处理文本的粒度为最小的字为单位,所以这个时候就需要用到分词来进行对文本的全部分词。
简单好用的中文分词利器:HanLP 。HanLP从v1.7版起独立运作,由自然语义(青岛)科技有限公司作为项目主体,主导后续版本的开发,并拥有后续版本的版权。授权协议为 Apache License 2.0,可免费用做商业用途。
目前HanLP官网测试版注册账号,并可以免费调用API接口,采用了开源HanLP的最新技术,功能完全一致,采用上亿文字的通用语料库训练生成,能够解决一般情况下大多数的NLP开发需要。
调用了HanLP的多语言分词下的标准分词,
该接口返回的是json数据格式,使用java函数进行对用户点评数据的遍历分词,得到结果如下(满意+抱怨点评):
5. 词性标注
词性标注是为句子中每个单词预测一个词性标签的任务,提供词语的抽象表示,便于进行更深层次的文本挖掘处理,无需担心新词发现、歧义消除等问题。
设计需求如下:考虑使用该接口功能获得用户点评数据中的词性,然后编写函数将词性为形容词adj的单词进行文本挖掘,再对这些形容词语(好古老、复古、实惠、略贵、爽口,极其粗鲁等)的处理(如进行词频统计,生成词云)来对用户对餐馆的点评描述可视化,以此做倾向性分析来改善餐馆的服务质量等提升。
另外词性标注还可以作词语的消除歧义,有效剔除“噪音“误导,比如对“他马上功夫很好”这句话,该模型通过识别该句话的语境和上下文特征,对“马上”二字进行分开识别成“马n/上l”,而不是识别成“马上n”。
6. 词频统计(词云展示)
如上面在词性标注提取到adj形容词后,对该用户点评数据中形容词进行了词频的统计,并对其词云化展示,得到结果如下:
7.命名实体识别
命名实体识别,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等,进而挖掘各实体间的关系。
设计需求如下:尝试对用户点评文本数据中的菜品名称进行命名实体识别,然后对识别后的菜品名称进行后续的分析(对餐厅菜系菜品的推荐、对现已有的菜品质量进行评定审核等)
在对用户点评数据进行菜品名称识别时,HanLP关于ner接口有
中国人名识别、日本人名识别、机构识别、地名识别、音译人名识别、深度学习命名实体识别等,不过对于菜品名称的命名实体标注需要对语料进行自定义标注,HanLP也提供了中文语料库标注:
可使用该语料标注规范的进行语料标注,正确理解NLP中词性定义。这其中涉及中文环境中的分词与词性内容:
标注符号中有14项非常见标注符号,包括:“nr”、“ns”、“nt”、“nz”、“m”、“q”、“t”、“r”、“b”、“i”、“L”、“j”、“g”、“x”。如以下人名/nr的标注和 成语/i 习用语/l的标注等。
添加自己的用户点评生语料数据进行菜品名称标注:
进入标注系统:
领取设定的菜品名称任务:
进入自定义标注语料:
上示意图中下半部分已经使用HanLP标注系统自动化标注完毕,上半部分是可选择的词性标签。利用可选择词性标签对下半部分的语句进行自定义化标注。我对nz其他专名(菜品名称)进行了语料的标注,得到如下符合我要求的自定义语料库:
还可以子账户标注完之后,使用主账户进行二次审核,进行驳回或者通过。
在审核通过之后即可标注为成熟语料库,对语料进行打包,送入模型训练。
模型训练是HanLP特有的定制化功能服务,无需复杂的环境搭建与编程,直接调用HanLP算法,训练专属私有模型。
进行菜品名称标注模型训练:
在经过了调用虚拟机训练任务后,模型训练完毕,在模型管理分栏中得到最新训练的算法模型。
获取API功能是将模型生成私有API接口进行调用,只有本账号能够查阅并使用。
调用了HanLP的命名实体识别API(菜品名称)接口,对用户点评数据进行了NER识别,得到如下的分析结果:
对
慕斯蛋糕甜而不腻好吃!!烧鸡饭的鸡肉很香!!爱了爱了
得到"nature":"food"的命名实体识别结果: 慕斯蛋糕 、 烧鸡饭 。
编写函数依次对用户点评数据进行输入,调用HanLP API接口来进行命名实体识别可以很方便快捷的对所需要的实体进行识别,列出了用户点评数据中某料理店的菜品名称如下:
不同于常规的人名、地名、机构名的实体,使用HanLP进行了自定义化的NER命名实体识别,这样做可以更有效的个性化定制提取,还可以对此类菜品名称后续进行更多的下游任务如餐厅菜系菜品的推荐,对餐厅菜品营销的策略等等。当然,还可以对医疗文本数据中的药品名、疾病名、医疗器械名等进行个性化NER命名实体识别。
8.依存句法分析
依存句法分析是识别语句中词与词之间的依存关系,并揭示其句法结构,包括主谓关系、动宾关系、核心关系等。
设计需求如下:根据目标提取用户评价,作为此系统的使用者-餐厅管理经营者,因为用户评价是多维度的,比起一个大体的评价,商家更希望获得一些更加具体的信息,比如商家想获得用户对新来的蛋糕面点师傅手艺看法,明天想获取用户对餐厅服务员服务态度的评价等,这类更多细节具体的信息。
以上这类更加细节具体的用户数据,可以通过依存句法分析从技术上实现,如:这家店 的 甜点 真不错 并且 小姐姐的服务态度很热情 。 使用依存句法分析后可以根据aspect来切分目标提取用户评价,
如果aspect==甜点, 分析结果就获得 [ /K ,这家/L ,店/E ,的/L ,甜点/A ,真/K ,不错/A , /A] 甜点 - 不错 。
如果aspect==服务 分析结果就获得 [ /K ,小姐姐/K ,的/L ,服务/L ,态度/L ,很/L ,热情/L , /A] 服务态度 - 热情
得到词与词之间的依存关系,并从其中获取到之间的结构联系。
调用了HanLP依存句法分析API接口后通过分析得到如下结果:
最终得到 甜品- 不错 、 服务态度 - 热情 此类具体的用户评价信息,为商家了解生意产品提供直观性说明。
9.情感分析
文本分类的应用场景非常广泛,常见的情感分析是其一个子集,涵盖垃圾邮件过滤、垃圾评论过滤、自动标签,舆情分析、改进服务及产品、了解用户的体验等任何需要自动归档文本的场合。
设计需求如下:用户的评论是商家服务质量的反馈,如何在大量的评论数据中帮助商家意识到自己的问题,提高用户的满意度具有经济价值,这就是本博客中尝试解决的问题。使用HanLP接口做词性标注、命名实体识别,最终搭建一套基于用户评价的情感分类系统,以期帮助商家从大量评论中挖掘有价值的信息,更好的认识服务的特色点,不足点。
同样的HanLP提供了更为方便系统的情感分析API调用。
在进行情感分析输入数据之前要对文本数据进行分词、词性标注、命名实体识别、依存句法分析管道式操作。以上已经对用户评价数据进行了处理,对用户评价数据中抽取样例,
这家店 的 甜点 真不错 并且 小伙子的服务态度很热情 。调用HanLP情感分析API后,得到如下结果:
这家店 的 甜点 真不错 并且 小伙子的服务态度很热情 。 情感极性是 【正面】
什么服务态度,点餐半个小时才上菜,下次再也不来吃了。 情感极性是 【负面】
显然的,对于情感分析模型HanLP已经训练好,只需要将用户评价的数据作为输入,输出值即正负情感极性,对于商家收取到的用户平均数据时,可调用该API接口做正负极性的二分类数据,将正面评价数据进行数据挖掘分析,对用户点赞的内容继续推广、 将负面评价的数据分析后,对用户提出的意见内容进行整改,同时也意识到自己的问题所在。