当前位置: 首页 > 工具软件 > NLP Architect > 使用案例 >

关于自然语言的实体抽取和舆情分析技术

郑燕七
2023-12-01

【作者:吴斌,原文创作于2016-08-11,如今仍有较高参考价值,但不排除部分信息需要更新。文中有很多引用,不一一列举出处了。】

 

     关于自然语言的实体提取,在自然语言处理的应用里面,是非常实用的技术。在实际项目中,粗略地讲,我认为有3种情况:1,规则明显,精度要求高,适合用规则模板做,比如:会议航班等日程识别提醒,地址识别。2,规则不明显,但是基本可以找到规律,适合用统计模型(CRF,HMM等)做,比如:人名识别,情感词情感对象识别。3,除了标点符号,找不到规则,那就用词典+规则做吧,比如:电影名,歌曲名识别。 所以,什么情况下的自然语言实体提取,使用什么样的技术,这也是需要仔细思考的问题,很难一概而论,哪个技术好。

    1,3不用多说了,这里说一下2。目前最好用的实体抽取模型是CRF(条件随机场),具体应用中超过其他模型(如:HMM隐马尔科夫模型,不过HMM的运行效率高),而且超过深度学习的RNN模型,CRF主要优点是,它的核心其实是一种判别式的分类模型,同时考虑上下文关系的转移概率(分析上下文关系目前可用的只有线性马尔可夫链,更复杂的关系目前难以实用,所以条件随机场在实用中是简化版模型。),它可以使用很多特征来训练模型,而人工设计的特征在实体提取任务中,至关重要,特别是字典特征(比如中文名的百家姓词典,情感词词典),在模型中有着非常重要的作用。而使用RNN模型,单纯靠大量的标注数量来做模型训练的话,准确率上并没有优势,只是在召回率上有优势,而实际应用中,更看重准确率。细节可以看这个论文:http://anthology.aclweb.org/D/D14/D14-1080.pdf

   舆情分析 或情感分析, 在自然语言处理领域是个主要的应用方向, 常见的情况是为某个公司或某个产品,根据舆情数据,分析出消费者的情感倾向,比如:根据商品评论数据,分析用户情感的倾向,正,负,中性。或者根据更大范围的数据,比如微博,搜索引擎的数据,来分析用户对产品的口碑,比如,百度就提供了"百度舆情"功能:http://yuqing.baidu.com/zhengwu 。这是个典型的分类问题,可以用统计模型做,也可以用规则+词典做。

     但是,通常的舆情分析, 分类的粒度非常粗,只有指定的好、中、差几个类别,使用者获得的信息量其实是非常少的。一个产品的舆情评价是好或坏,使用者更想知道的是为什么好,为什么坏。而情感词,情感对象的自动提取,就可以很大程度上回答这个问题,比如自动提取这样的评论西信息:手机拍黑白照片效果: 很不错,手机的续航能力: 有待提高。(冒号前面的是情感对象,后面的是情感词。)  这样具体的正负观点,才是使用者真正想看到的信息,这些信息才有助于分析具体的产品问题和优缺点。

    我在做电影评论的情感词和情感对象识别任务中,使用的CRF库是Mallet,这是JAVA的CRF库首选,而且开发者,就是CRF模型的发明者之一Andrew McCallum。这个库包含分类,CRF等很多功能,使用起来有一点门槛,细节可以查看其主页:http://mallet.cs.umass.edu/ ,我使用的是豆瓣点评的电影短评数据。电影评论中的情感词和情感对象抽取的例子:  剧情:不走心导演和编剧:实在是太渣;  丹尼尔的演出:中规中矩。更多例子见附件。

   数据标注对所有统计学习的有监督学习算法都是非常重要的事情,而且,实体提取比其他任务的标注难度更大一些,因为判断实体数据本身就是比较复杂的事情。我的标注方法是自创的TCO(TargetCommentOther)标注法。标注对信息抽取非常重要,因为标注的方法决定了特征选取的方法,常见已有的标注法师BIO或IOE,其中“B”指标注实体开始字符,“I”指标注实体中间字符,“E”指标注实体结束字符,“O”指其他字符。比如,如果自动识别姓名通常使用BIO标注法,重点是标注名称的首字符,因为,“姓”可以从百家姓中识别。如果自动识别地名,公司名,一般用IOE标注法,重点识别尾字符,因为”路,街,道“,”公司“是重要特征。而我要识别的是个评论短语,最重要的是评论对象和情感词,而这些内容很多都不在首字符或尾字符,所以,我自创的TCO标注法,可以重点标注评论对象(Target),评论情感词(Comment,可以带正负向,比如Comment+,Comment-),标注举例:“这车开得像飞”标注为“OTTTCC”。同时,可以使用情感词词典之类的特征来训练模型,实践证明,词典特征对CRF的识别准确率提高有非常大的帮助。

     如果按照每个字的label判断准确率统计是比较低的,如果按照整个情感对象+情感词一起来判断实体提取准确率,初步统计是区分情感倾向是87.3%,不区分情感倾向是93.2%召回率低一些。   下面详细记录一些数据标注的经验:

    首先,自然语言处理对于的情感表达,应该选择选择什么粒度?一般来说,篇章,段落级别会包含多个情感,不合适。词组级别,因为不好断句也不好操作。最合适的粒度是句子级别,以逗号,句号,感叹号,问号等分割,以每个句子为单位分析用户情感和情感对象比较合适。实际情况,有的情感表达会跨两个句子,但是这种情况实际上很少。

大多数时候,正负向的情感是容易辨认的,比如:剧情很好,喜欢这个主角,台词太烂,笑点没意思,等等。但是也有不少的情况,人也难以判断情感,对于NLP来说,下面这几个句子都是各有各的判断难点。

比如:“虽然没有绝美之城那般惊艳。”,是个比较句,是情感判断的难点,而且,“没有”与“惊艳”有正负情感抵消的意思,“虽然”,“那般”又有些许赞扬的意思,我的意见是做中性情感处理。

“形式感太强。”是反义句,“强”通常是正向情感词,这里却有反义的意思,“形式感”有一些的负面情感,但是需要仔细琢磨。我的意见是整句都是负面情感词。

“音乐无疑是影片的灵魂。”是比喻句,“灵魂”是个比喻,比喻是NLP最难处理的问题,我认为算作正面情感表达。这里“是灵魂”是正向情感词,“音乐”是情感对象词。

“我以为我再不会被清新细腻的爱情戏码打动了呢。”包含否定句,但是最后有个“呢”,前面有个“以为”,又变成了自问自答,变成了肯定句,而且句子中正负情感词“不会”,“清新细腻”,“打动”相互交织,判断难度也很大,我认为作为正面情感判断。

“比绝美之城直白好懂。”也是个比较句,通常“直白好懂”标注为正向情感,“比绝美之城”是情感对象,但是省略的主语。

XXX贩卖一个巨大的无聊”这句话的情感不难判断,但是句子中有很多修饰词,“XXX”“贩卖”,“巨大的”都是修饰同一个词“无聊”,这对标注和识别是干扰,这种情况是比较常见的。我的意见是,标注时,必要的修饰保留(去掉后就改变意思或不完整了),无用的修饰去掉,上面可以仅标注“巨大的无聊”。

另外几个例子,自然语言中,一句话有时候会嵌套几层情感表达,此时对于情感识别也会面临难题,识别哪一层的情感?如果每层分解来识别,这会太复杂,我的意见是只识别最外面一层的情感。比如:“但看完之后还是被导演的一些天才表达折服。”  外层情感是:“被导演的一些天才表达:折服”。内层情感是:“表达:天才”。“精雕细作(到有点做作)的美感像行走真空般不实。”,外层情感是:“美感像行走真空般不实:精雕细作(到有点做作)”。内层情感是:“美感:像行走真空般不实”。这几个例子我认为取外层表达即可,因为外层表达可以抽取出比较详细具体的情感对象。

对于情感词和情感对象的抽取,不同于情感分类,必须区分哪个是情感词,哪个是情感对象。我使用的是CRF模型来做情感词和情感对象的抽取,效果还可以。但也有一些困难,CRF是判别式模型,数据标注的质量和数据标注的标准是很重要的,对于每个label(其实就是每个类别),都要有清晰的定界标准。但是有些词语是很难定界的,比如:“创意超级棒。”“这个片子的结尾很有创意。”“有创意的片子”,这里的“创意”是情感词,还是情感对象,较难区分,我的意见是按词性标注,第一个“创意”是名词都做情感对象标注,后两个“有创意”是形容词做情感词标注。另外,有时候“恐怖”是负向情感,比如:“这个角色丑的恐怖。”,有时候“恐怖”是正向情感,比如说的是恐怖片:“看结尾觉得真挺恐怖的。”这种情况只有看“恐怖”前后的搭配词和情感对象来判断了。还有,比较句,对于情感词和情感对象的提取是比较困难的,比如:“失孤比这部片好很多。”这句虽然有“好”字,但是全句情感却是负面情感,而且,情感对象难以把握,我的意见是:“失孤”作为情感对象,“比这部片好很多”做负面情感词标注。还有一些比较难标注的数据,需要逐个分析,比如:“喜欢林中小屋那一类的应该觉得对胃口”,这里其实没有明确指明电影中的对象,而且隐含的比喻,“林中小屋那一类的”,同时情感词也不是针对电影,而是针对喜欢此类电影的人,所以这里的Target主体不好标注,勉强可以把“喜欢林中小屋哪一类的”标为Target,把“应该觉得对胃口”标为Comment+。同时,Target里面有“喜欢”这个关键词,一般是在情感词词典里才出现的,放在Target里面也容易出问题,但是这也是无奈的地方。另一句,“要不是这两位演技还是不错真是看不下去”,这里面有正负两个情感,相对而言,我认为正面情感突出一些,即“这两位演技”标为Target,“还是不错”标为Comment+。对于“真是看不下去”,本来应该标Comment-的,但是句子里面缺乏主题对象,标了负向情感,对于抽取来说,就不好理解了,可以忽略此处,标为other

 

 类似资料: