自然语言处理实战——巧用 Amazon Comprehend 分析社交媒体数据
摘要
自然语言处理 (NLP) 是语言学、计算机科学和人工智能的一个子领域,涉及计算机与人类语言之间的交互 (引自维基百科)【1】。NLP 的目标是让计算机理解人类所说和所写的内容,并以同样的方式进行交流。NLP 在过去十年中一直是一个有趣的领域,伴随着人们对自动化信息提取、处理和生成业务价值的期望越来越高。通常,专业知识领域的上下文和非结构化数据会给 NLP 增加额外的难度。
命名实体识别(NER)是 NLP 的一类子任务,专注于信息提取、实体定位和文本分类。它用于将非结构化文本中的命名实体映射到预定义的类别,例如人名、组织、医疗代码、货币价值 【2】。NER 可用于构建语义搜索引擎并帮助提高文档的性能和索引。现在著名的 NER 平台包括 GATE、OpenNLP 和 SpaCy。
另一方面,主题模型是用来探索和提取文本主题的统计模型,而主题建模通常用于文本挖掘,以发现文本正文中隐藏的语义结 【3】。
在这篇博文中,我们演示了如何利用 NER 和主题建模将亚马逊云科技服务用于社交媒体数据分析。我们应用 Amazon Comprehend 作为 NER 步骤来微调亚马逊云科技中的预训练语言模型。选择社交媒体数据的原因是为了简单起见,并避免行业(例如金融服务和医疗保健)特定术语带来的额外复杂性。事实上,对于热衷于通过社交聆听监控其品牌的企业来说,更好地了解社交媒体数据的背景和分类是至关重要的。
本文剩下的部分结构如下:
介绍 Amazon Comprehend 的 NER 和主题模型 API
实验数据
系统性框架和数据流程图
结果和展望
1. Amazon Web Services 在自然语言处理的云服务
Amazon Web Services 提供了广泛的自然语言处理服务,帮助客户轻松利用基于机器学习的模型,构建 AI 应用程序,用于文本分析、聊天机器人、语言翻译、情感分析、语音识别等领域。Amazon Transcribe 是一项自动将语音转换为文本的语言处理服务。它使用一种称为自动语音识别的深度学习过程,可用于为媒体资产添加字幕,将客户服务电话数字化为文本,以创建存档或开展进一步的分析。Amazon Web Services 还提供了一项名为 Amazon Polly 的服务,用于将文本转换为逼真的人类语音。Amazon Translate 是另一种基于深度学习的语言服务,可以支持 71 种语言和变体之间的翻译。此外,Amazon Web Services 提供了功能强大的语言服务 Amazon Lex,它作为在 Amazon Alexa 上得到应用的底层技术,可基于其语音识别、自然语言理解和生成模型,轻松构建出成熟的聊天机器人。
除了上述服务外,Amazon Comprehend 是 Amazon Web Services 中另一项功能强大的自然语言处理服务,它使用机器学习技术来提取文本中的信息,并揭示有价值的见解。Amazon Comprehend 原生支持实体识别操作,可以检测文本中的日期、事件、位置、人物等实体。除了预设的通用实体类型外,Amazon Comprehend 还支持自定义实体识别,让用户能够创建自定义模型来识别新的实体类型。
Amazon Comprehend 还提供主题建模 API,用于将文档语料库组织成主题。通过主题建模,每个文档都是整个语料库中主题的组合,而每个主题是单词的统计分布。主题建模提供的见解在信息检索、文档分类和文档摘要等领域有重要用途。Amazon Comprehend 内置了两种主题建模算法:Amazon SageMaker 神经主题模型 (NTM)和 Amazon SageMaker 潜在狄利克雷分配 (LDA)。在 Amazon SageMaker NTM 中,主题建模由基于神经网络的变分推理框架实现,该框架可以从语料库的单词分布中学习与文档相关的主题。
2. 实验数据
本文中选用的实验数据来自第三方工作室所提供的 W-NUT17 的实体识别任务数据集【4】【5】。W-NUT 数据在源数据的基础上,增加了人工合成的噪声文本已满足自然语言处理的需要。其中源数据包括,社交媒体,在线评估,众筹数据,网络论坛,临床诊断以及学习笔记等等。
数据集中包含了 1000 条带标注的 tweets,一共 65124 个 tokens. 评论文本来自 Twitter, Stack Overflow, YouTube 以及 Reddit. 命名实体的标注包括类别如下:
人名
地点 (包括地理位置和机构位置)
分组(如乐队,体育团队, 以及非企业单位)
创造性的工作 (歌曲, 电影, 书籍等等)
企业
产品(有形的产品或者定义良好的服务)
本文的开发训练样本和测试样本的划分来自 2017 年国际学术会议的参考文献 “Results of the W-NUT 17 Shared Task on Novel and Emerging Entity Recognition” 。具体情况如表 1 所示。
表 1: 命名实体数据的样本统计
3. 系统架构及流程
下图展示了解决方案的架构:
图 1. 基于 Amazon Comprehend 和 NER 的简单流程图
在此解决方案中,我们通过将 Amazon Comprehend 与 Amazon S3 用于 NLP 任务来展示其简单性。例如,我们可以将 Comprehend 函数与输入的句子字符串一起使用,如图 1 左上角所示。它使用内置的 Comprehend 模型来实现命名实体检测、单词标记等功能。或者,如图 1 左下角所示,我们可以提供 txt 或 csv 文件作为文本语料库来自定义训练模型。如图 1 右侧所示,返回的结果以 json 形式呈现以方便进一步处理。句子标记(右上)和句子 NER(右下)可以方便的进行进一步分析和建模。
使用 Amazon Comprehend 进行 NER 和主题建模相当简单,我们可以应用内置模型或自行训练模型。对于 NER 任务,我们只需提供目标句子、语言代码和区域即可使用理解检测实体 Amazon NER API 文档 。设置主题建模比 NER 任务稍微复杂一些,在主题建模任务中,我们需要首先使用启动主题检测作业 API ,通过指向包含请求数据的 json 文件来启动主题检测作业。或者,Amazon SDK 是另一种利用亚马逊云科技理解主题建模的方法。有关 Amazon Comprehend 主题建模服务的详细使用,请参阅 Amazon 文档。
Amazon NER API 文档:
https://docs.aws.amazon.com/comprehend/latest/dg/get-started-api-entities.html
Amazon 文档:
https://docs.aws.amazon.com/comprehend/latest/dg/get-started-topics.html#topic-python
端到端的流程如下:
将一组带有实验数据的文本文件上传到 Amazon S3。
清晰标注所有文本文档的标签。
在 Amazon Comprehend 控制台上,使用 Amazon Lambda 生成的数据集启动自定义 NER 训练作业
在 Amazon Comprehend 控制台上,启动自定义主题建模作业。
4.结论
我们开发了一个可以根据 Amazon Comprehend 指南来注释训练集的脚本。该注释内容一共有 5 列(如下图),其中包括了标明在 Amazon S3 上训练集文件名的‘File’,标明在训练集中具体第几行的‘Line’,标明在对应行上 entity 字段起始位置的‘Begin Offset’,同样标明在对应行上 entity 字段结束位置的‘End Offset’以及说明 entity 类型的‘Type’列。更多有关注释格式的信息,可以参照 Amazon 文档
Amazon 文档
https://docs.aws.amazon.com/Comprehend/latest/dg/cer-annotation.html
图 2.训练集数据的注释
Amazon Comprehend 要求每一个类型的 entity 至少输入 200 个不用的注释。然而所用的训练集中的‘product’和‘creative-work’类型分别只有 139 和 137 个注释,因此这两个类型的注释内容被暂时的排除在我们的数据集之外。在训练集文件和注释文件被上传到 Amazon S3 之后,Amazon Comprehend 下面的 custom entity recognition 模组会使用这两个文件来训练模型,具体的操作页面如下图。
图 3.基于 Amazon Comprehend 的模型训练
训练过程大概需要 25 分钟左右完成。在训练过程中我们发现 Amazon Comprehend 会返回一个 entity 类型识别重叠的错误值,例如像‘Jessica Simpson’ 和‘Simpson’。因此,为了确保训练集和模型质量,我们只保留了全名。Custom entity recognition 模组会自动测试并选出最合适的算法和参数,因此并不需要额外输入测试数据集。下图包含了最终模型结果的精确度,召回率和 F1 分数。Entity 类型‘corporation’ 和 ‘group’的相对较低的指标可能是因为这两种类型的样本数据也相对较少。模型的平均 F1 分数在 0.32 左右,这个结果接近和其他用了同样训练数据集的研究【6】,表明了我们模型的可靠性。
图 4.模型结果的性能参数
有了训练好的 custom entity recognizer 模型之后,另一组没有标签的数据集被放入到模型中来做预测,会生成一份带有 named-entity recognition(NER)注释的新数据集。原始数据集和带有注释的新数据集会被分别放入 Amazon Comprehend 下面的 topic modeling 模组来生成不同的结果作比较。该模组采用了基于 Latent Dirichlet Allocation(LDA)算法的模型来模拟 topic modeling,这是一个在类似场景中非常常用的算法。更多详细信息可以在 Amazon 关于 topic modeling 的文档中找到。
topic modeling:
https://docs.aws.amazon.com/comprehend/latest/dg/topic-modeling.html
下图是使用了带注释的数据集所生成的 topic modeling 模型的前五个主题以及对应的关键词和权重。
然后下图是使用了原始数据集(不带有 NER 注释)所生成的 topic modeling 模型的前五个主题以及对应的关键词和权重。因为 LDA 算法自身的特性,即便是相同的主题,每一次运行之后其对应的关键词可能会有略微的差异。尽管如此,对于使用不同数据集的两个模型, Amazon Comprehend 的 topic modeling 还是稳定的预测出了 0 号主题(topic0),并且两个模型的该主题的关键词也都相同。使用带 NER 注释的模型所预测出的 1 号主题和使用不带有 NER 注释的模型所预测出的 2 号主题也都包含了相同的关键词。
使用了带 NER 注释的模型预测出的 2 号主题和另一个模型的 1 号主题看上去可能都是和感情有关的主题,因为他们的关键词都包括了‘love’。但是我们提议的带 NER 注释的模型能够预测出更具有信息性的词汇,例如‘hate’,‘pain’和‘gallifreyan’等,这可能表明了该主题其实是有关小说或者电视剧的。带 NER 注释的模型的 3 号主题和不包括注释的模型的 4 号主题拥有几乎相同的关键词,说明这两个主题可能非常接近。最后,带 NER 注释的模型的 4 号主题预测出了包括‘location’, ‘calgary’, ‘adelaide’ 和 ‘europe’等关键词,表明了该主题很有可能和旅游相关,然而另一个不带 NER 注释的模型没有办法预测出类似的主题。
参考链接
【1】
https://en.wikipedia.org/wiki/Natural_language_processing
【2】
https://en.wikipedia.org/wiki/Named-entity_recognition
【3】
https://en.wikipedia.org/wiki/Topic_model
【4】
https://github.com/juand-r/entity-recognition-
datasets/tree/master/data/WNUT17
【5】
http://noisy-text.github.io/2017/pdf/WNUT18.pdf
【6】
https://www.aclweb.org/anthology/W17-4418/
本篇作者
李钧
普华永道全球信息技术优创中心总监,解决方案架构师
他专注于数字化、新兴技术(如区块链、AR/VR、人工智能等),以及基于机器学习和深度学习的高级分析技术。他的行业经验横跨金融保险、医疗制药和高科技领域。他不仅是一位业务创新型领导者,也是云技术的热切推动者,并渴望以专注服务的理念来帮助客户成功云转型。
评论