音乐领域的自然语言理解

人机交互方式越来越多的变成语音交互,用户说出口语化的自然语言,系统需要正确理解并实现对应的操作。语音识别是另外一个问题,本文讨论语音识别后的文本处理。而音乐在人们生活中是刚需,amazon的echo、google的google home、讯飞京东的叮咚智能音箱、百度的对话式人工智能操作系统DuerOS等,如雨后春笋般爆发,对音乐的支持都是必须功能。

要处理的问题

  • 判断文本是否属于音乐领域
  • 信息的抽取:歌曲名、歌手、乐队、专辑、标签、歌词、场景词等
  • 上下文语境的继承:我要听薛之谦的歌,换成他唱的演员
  • 用户感情理解:不喜欢听邓紫棋的歌,随便放一首歌,讨厌摇滚歌曲
  • 多轮对话:和用户产生多次连续对话,来确认其真实需求

面对的挑战

  • 半结构化文本:我们要处理的文本是半结构化文本,它不完全符合自然语言规则,比较简短,没有固定形式。相较于新闻报道、科技文献使用的合乎自然语法规则的自由文本更加困难。
  • 实体名抽取:音乐领域的实体名复杂多变,没有固定、清晰的组成规则,尤其是歌曲名的识别。
  • 数据量大:音乐领域历史悠久,参与人员众多,积累了庞大的数据,QQ音乐有1500w,网易云音乐500w,阿里系有300w。这就对系统的高效、准确提出了挑战。
  • 音乐知识的完整及准确度:只有流行歌曲/歌手才有比较完整的字段信息,如何爬取建立完整的音乐知识库,清洗数据去除噪音使其可用,正确理解音乐特性打上准确的标签等都是繁杂有挑战的工作。

实现方案

信息抽取####

首先就是信息的抽取,有2种方法基于规则和基于统计。规则就是含有目标信息的句子模式,用于指明构成目标信息的上下文约束环境,依赖于语言、领域,书写规则的过程耗时且容易错误,但抽取效率和准确性高。基于统计的方法是利用人工标注的语料进行训练,使用隐马尔科夫模型、最大熵模型(CRF)、概率上下文无关语法(PCFG)等。由于自然语言简短半结构化,音乐类的实体名无规则(如“我爱你”就能抽出歌曲我、爱、你、我爱、我爱你、爱你6首歌),基于统计的模型不适合音乐领域,准确度不会太高,也不好泛化。
基于规则的抽取方法,通常需要词典,如天气领域可以是城市名。但音乐领域把听(张杰唱)、我(张国荣等唱)、南方(文雀唱)、看风景(嘉林唱)等歌曲名加入词典的话,会对规则系统在歧义消除、系统复杂性、响应时间上有很大的挑战。我们需要另寻其他的词典。
用户的query往往很简短,主要有实体词(忘情水)、意图词(唱个歌儿、放首等)2部分组成,实体词不能作为词典,但音乐领域的意图词是可以列举的(我们找到了764个),把意图词去掉剩下的部分就是与音乐相关的实体词。

词典组成####

  • 意图词,意图词有2个属性,type和score。type为query/next/again/negative,指出是放下一首还是上一首,还是不喜欢;score表示意图词倾向于音乐领域的强烈程度,如“打开”就没有“唱首歌”强烈。
  • 专辑词:主题曲、专辑、结尾曲、推广曲等
  • 标签词:标签分为特殊标签、普通标签,如情歌、快歌等属于特殊标签,因为会影响句型规则的匹配,需要提前提出来,后续再做归为处理。标签也有强烈程度区分,如客家山歌、摇滚、童年三者的强烈程度依次递减,在消除歧义时会用到。

句型规则####

句型规则用于获得主干内容等其他信息。句型规则由4部分组成(type, pattern, score, tendency)。

  • type分为clean(删除匹配部分)和extract(提取主干)两种
  • score表示该句型属于音乐领域的强烈程度,可以为负数
  • tendency表示该句型查询倾向于歌手还是歌曲,如我要听小毛驴的歌,我要听小毛驴
  • pattern由变量组成
  • 变量分为play、repeat、emotion、indicator、quantifier、 uselessQualifier、uselessPrefix、uselessSuffix等,各变量是简单的正则表达式

音乐知识库####

在获得主干query(即音乐领域实体词集合+少许未清理干净的噪音)后,我们需要从中获得对应的音乐信息,现在问题就自然转变为了普通的关键词搜索。因此我们建立了音乐知识库,doc包含歌名、歌手、歌手别名、专辑等,将成熟的信息搜索技术运用到自然语言理解中,既轻松解决了数据量大的问题,也保证了处理时间。

流程####

相似度计算#####

在选择音乐的时候,我们做了整体相似度和单field相似度两种计算,用于实现music pick和field pick。相似度计算方法使用了两种,编辑距离和相同字符,以应对不同的判断情况。相同字符公式如下:

其中a为字符串b和c的相同字符个数,b和c为两字符串的各自长度,w为各自权重。

Tag PK#####

一个词到底是标签还是歌手、歌名,还是专辑,或者这个词只是歌名的一部分,再加上多标签的情况,这又是另外一个复杂的问题。主要使用相似度、包含关系、标签强烈程度、标签组合情况、句型规则等来进行区分判断。

继承#####

目前我们支持如下的继承,其中会有避免误继承的策略,如句型、知识库验证等。

  • 领域增强:本次为模糊的音乐领域,如果上轮为音乐领域则提高本次音乐领域得分
  • 歌曲继承歌手
  • 歌手继承歌曲
  • 标签继承歌手
  • 歌手继承标签
  • 歌曲切换的offset处理
领域强度打分#####

一个智能聊天机器人或者智能音箱都是面向多个领域的,要避免音乐领域过召回的情况,尤其是歌名可以是“对不起”。这部分工作利用了意图词得分、句型得分、命中field数、field与query的相似度、上下文情况及query长度等信息。

后续展望###

机器学习或者深度学习在NLP中都有很好的应用,如可以使用embedding进行领域判断。比较想做的一个是规则的自动提取,希望通过线上日志+标注系统获得标注好的语料,利用这些语料自动生成句型规则,并补充意图词到意图词表中。使系统可以不断的自我提升,而不需要人工干预。
目前系统支持部分纠错功能,如贝尔加湖畔可以纠正为贝加尔湖畔,这是用了搜索自有的特性。但对比较短的query以及拼音纠错做的不好,希望在知识库中增加拼音字段等其他手段来进行完善。
功能还需要继续扩展,如歌词识别、否定支持、音乐图谱、个性化推荐和搜索等。

posted @ 2017-01-07 14:39  春文秋武  阅读(1302)  评论(0编辑  收藏  举报