语音数据处理指南

随着企业开始进行人工智能技术的探索,三个特定的领域引起了很多关注:计算机视觉、自然语言应用和语音技术。世界知识产权局(WIPO)最近的一份报告发现,这三个领域的专利占了人工智能相关专利的大部分:计算机视觉占49%,自然语言处理(NLP)占14%,语音技术占13%。

企业里有很多非结构化和半结构化的文本数据,而很多公司已经拥有了 NLP 和文本分析的经验。虽然比较少的公司拥有收集和存储图像或视频的基础设施,但计算机视觉是许多公司开始探索的领域。深度学习和其他技术的兴起促使初创公司商业化了一些计算机视觉的应用,包括安防和合规、媒体和广告以及内容生成。

一些企业也在探索话音和语音的应用。自然语言和语音模型的最新进步提升了准确性,从而开辟出了一些新的应用。在企业语音应用方面,呼叫中心、销售和客户支持以及个人助理等应用处于领先地位。在消费者应用方面,语音搜索、智能音箱和数字助理正越来越普及。虽然远非完美,但目前这一代话音和语音应用已经足够得好,从而推动了语音应用的爆炸性增长。语音技术的潜力的一个早期线索是语音驱动的搜索的增长。Comscore 估计,到 2020 年,大约一半的在线搜索将使用语音。Gartner 建议企业重新设计其网站,以支持视觉和语音搜索。此外,从 2018年到 2019 年,智能音箱预计将增长 82% 以上。到今年年底,此类设备的安装数将超过 2 亿台。

音频内容数据也正在呈现爆炸式的增长。这就需要使用语音技术进行搜索和挖掘,从而能解锁这些新内容。例如,根据《纽约时报》最近的一篇文章,在美国“每个月中大概有三分之一的人会至少收听一次播客”。播客节目的增长并不仅限于美国,包括中国在内的世界各地的播客量都在增加。

语音和对话应用挑战性

在文本和 NLP 或计算机视觉领域里,程序员可以简单地开发出一个应用。但语音应用(不是简单的语音命令)对许多企业来说仍然具有挑战性。口语比书面文字有更多的“噪音”。例如,在阅读了许多播客脚本后,我们可以证明语音对话的脚本仍然需要大量的编辑工作。即使你可以获得最好的转录(语音到文本)技术,你也通常也会看到一个包含暂停、填充、重启、插话(在对话的场景里)和不合语法结构的句子的脚本数据。脚本还可能包含需要改进的段落,因为有人可能“在开脑洞”或难以准确地表达特定的观点。此外,由转录产生的脚本可能无有在正确的位置打标点或进行大写处理。因此,在许多应用中,脚本的后处理就需要人类编辑参与。

在计算机视觉(现在是 NLP )中,我们已经处于数据至少与算法同等重要的阶段。具体而言,预先训练的模型已经在计算机视觉和 NLP 的若干任务中提供了最好的性能。那么语音领域怎么样?“一个模型能满足所有的”语音模型没能出现的原因有下述几个:

  • 存在各种声学环境和背景噪音:室内或室外、在汽车里、在仓库里或在家庭等。
  • 可能需要支持多种语言(英语、西班牙语、中文普通话等),特别是在说话人在对话过程中使用(或混用)多种语言的情况下。
  • 应用类型(如搜索、个人助理等)会影响对话流程和词汇表。
  • 根据应用的复杂程度,需要针对特定领域和主题来调整语言模型和词汇。这一点对于文本和自然语言应用也成立。

构建语音应用

尽管存在挑战,但正如前面我们所指出的那样,语音技术和语音应用已经出现了相当多的让人激动的内容。虽然我们尚未达到可以使用通用解决方案为各种语音应用“供电”的阶段,同时也没有能够跨多个领域的语音智能助理。

然而,已经有一些很好的基础模块可以被用来组装有趣的语音应用。为了帮助正在探索使用语音技术的公司,我们整理了以下指南:

  • 集中你的注意力。正如我们所指出的那样,当前一代语音技术无法实现“一个模型能满足所有的”场景。因此最好将重点放在特定任务、某种语言和某个领域。
  • 理解应用想要实现的目标,然后再去看所需要的技术类型。如果你能知道应用的 KPI,那么就可以使用这些 KPI 来找到为特定应用领域实现这些度量标准所需要的语言模型。
  • 在“真实数据和真实场景”里进行实验。如果你计划开始使用现成的模型和服务,请注意“真实数据和真实场景”的重要性。在许多情况下,初始测试数据并不能代表用户与想部署的系统进行交互的方式。
  • 获取每个特定任务的标记样本。例如,识别英语中的“cat”和中文普通话中的“猫”将需要不同的模型和不同的标记数据。
  • 制定数据采集策略以保证收集到合适的数据。确保构建的系统可以随着收集到更多的数据而持续学习,以及制定一个支持持续改进的迭代流程。
  • 语音应用的用户关心的是结果。语音模型只有在推导出洞察力并使用这些洞察力而采取行动时才有意义。例如,如果用户要求智能音箱播放特定的歌曲,那么对该用户唯一重要的就是音箱能播放那首歌曲。
  • 自动化工作流程。理想情况下,所需的字典和语音模型可以在没有太多干预(来自机器学习或语音技术专家)的情况下进行更新。
  • 语音应用是复杂的端到端系统,因此要尽可能地进行优化。单单一个语音识别系统就是由我们在前一篇文章中描述的多个模块所组成。训练和再训练模型的代价可能很高。根据应用和场景,延迟和持续连接也是重要的考虑因素。

从 NLU 到 SLU

我们仍处于企业级语音应用的早期阶段。在过去的12个月中,我们看到预训练的自然语言模型取得了快速进展,这些模型在多个 NLP 基准测试中创造了新记录。开发人员开始采用这些语言模型,并针对特定领域和应用对它们进行微调。

对 AI 应用来说,语音数据又增加了另一层的复杂性,它超越了自然语言理解(NLU)。口语理解(SLU)需要能够从口语中提取含义。虽然 SLU 还没有被用于语言或语音应用,但好消息是,已经可以使用现有的 SLU 模型构建简单、特定用途的语音应用。为了找到正确的应用场合,企业需要了解当前技术和算法的局限性。

与此同时,我们将会一步一步地进行。正如 Alan Nichol 在一篇关注基于文本的应用的博文中指出的那样,“聊天机器人只是实现真正的 AI 助手和自动组织的第一步。”同样地,今天的语音应用揭开了即将发生的事情的一角。

Google 发布两个全新的自然语言对话数据集

如今的智能助理功能十分强大,被寄希望于完成多类任务并对不同主题的请求返回个性化结果,例如获取上映电影列表、预订餐厅和做计划旅行等。

然而,尽管智能助理近年来已取得巨大进步,但依旧未能达到人类的理解力水平。

这在一定程度上是由于我们缺乏优质训练数据,无法将人们的需求和偏好准确的反映给智能助理。系统的局限性导致在理解人类话语时会有偏差,我们为了让智能助理能够理解,不得不调整自己的措辞。换言之,现今智能助理的对话仍旧十分简单,远未达到人类理解所需的对话复杂度。

为解决该问题,Google 发布 Coached Conversational Preference Elicitation (CCPE)Taskmaster-1 英文对话数据集。

偏好导向 (Preference Elicitation) 数据集

在电影导向型 CCPE 数据集中,扮演“用户”的人员对着麦克风讲话,之后我们会向扮演“智能助理”的人员直接播放所录的音频。“智能助理”则以文字形式输出其响应,然后通过文字转语音向“用户”播放。这些双人对话中难免会出现双方之间自然发生的卡顿问题和错误,而这很难通过合成对话复制出来。由此,我们便能针对人们的电影偏好,创建一系列自然的结构化对话集合。

通过深入分析此数据集,我们发现人们会采用极其丰富的方式来描述自己的偏好。该数据集首次大规模展现了这种 丰富性。

我们还发现,人们的偏好与智能助理(或本例中的推荐网站)描绘选项的方式并不总是相符。换言之,您在搜索自己喜欢的电影或服务时所使用的的关键词,与您在向他人推荐您喜欢的电影时,使用的描述词汇可能会并不相同。

任务导向型对话数据集

askmaster-1 数据集结合使用上述方法和单人书面会话这两种方式来增加语料库规模和发言者的 多样性,最终得出约 7700 条书面的“自我对话”以及约 5500 个双人口语对话。

在书面对话中,我们会为每个任务概述相关场景,让人们据此自行创建完整对话,从而同时扮演“用户”和“助理”的角色。虽然口语对话更能真实反映双方语言上的交互,但书面对话在丰富度和复杂度方面都表现良好,并且收集这些数据的难度和成本也更低。我们基于以下 六项任务 之一来创建数据集:订披萨、进行汽车维修预约、租车、订购电影票、订咖啡和预订餐厅。

该数据集还使用简单的注释架构,为数据提供丰富的背景信息,同时让工作人员为对话添加标签时,能更好的保持一致性。传统意义上的详细策略很难使工作人员再添加标签时保持稳定的一致性,与之相比,我们只关注每类会话的 API 参数,即执行事务所需的变量。

如:在一个有关拼车安排的对话中,我们会为“目的地”和“出发地”位置以及车型(经济车、豪华车、拼车等)分别附加标签。在预定电影票时,我们为电影名称、影院、时间和票数附加标签,有时还会为放映类型(如 3D 或标准版)附加标签。语料库发布中随附有完整的标签列表。

我们希望这些数据集将能在对话系统和会话推荐的研究课题中,助力学术圈顺利开展实验和分析。

数据科学家常用自然语言处理Python库

此前,跨象乘云™ 发布过系列文章 ——

互联网上大约有 70% 以上的数据不是结构化格式的。非结构化数据包括传感器数据、图像、视频文件、音频文件、网站和 API 的数据、社交媒体数据、电子邮件以及更多与文本相关的信息。由于其特殊的特性,我们无法以一种简单的方式处理数据,为了解决这一问题,在大数据和数据科学环境下,出现了许多技术和工具来解决这一问题。

自然语言处理,是人工智能领域的前沿技术之一。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。NLP 的最终目标是以一种有价值的方式阅读、破译、理解和理解人类语言。大多数 NLP 技术依靠机器学习从人类语言中获得意义。基于 NLP 最著名的应用是:

  • Google Speech Recognition.
  • Apple’s Siri.
  • Microsoft’s Cortona.
  • Amazon’s Alexa.
  • Ok Google in Android Mobiles.
  • Interactive voice responses used in call centers.
  • Grammarly

1. spaCy

非常优化的 NLP 库,可以与 TensorFlowPyTorch 等深度学习框架一起使用。它是一个高级的 NLP 库,可在 Python 和 Cython 中的使用,它帮助我们可以进行快速的开发,spaCy 提供了预先训练的统计模型和单词向量,目前支持 50 多种语言的标记化。它具有最先进的速度,卷积神经网络模型的标签,解析和命名实体识别和易于深入学习集成。

# Importing the Library
import spacy

NLPLagnguageType = spacy.load('en')
text = NLPLanguageType('Earth Revolves around the sun.')
# Iterating over the text
for token in text:
print(token.text,token_pos_)

在上面的例子中,我们实现了一个简单的 NLP 例子,他将输出文本,并加上每个单词的词性:

> > > 地球名词

> > > 是动词

这样的例子不胜枚举。它将生成给定文本中每个单词的词性。

2. Gensim

Gensim 是一个用于从文档中自动提取语义主题的 Python 库,目标受众是自然语言处理 (NLP) 和信息检索 (IR) 社区。具有以下特性:

  • 内存独立:对于训练语料来说,没必要在任何时间将整个语料都驻留在RAM中
  • 有效实现了许多流行的向量空间算法,包括 tf-idf,分布式 LSA,分布式 LDA 以及 RP;并且很容易添加新算法
  • 对流行的数据格式进行了 IO 封装和转换
  • 在其语义表达中,可以相似查询

Gensim 的创建的目的是,由于缺乏简单的(java 很复杂)实现主题建模的可扩展软件框架。

import gensim
id2word = gensim.corpora.Dictionary.load_from_text('wiki_en_wordids.txt')
mm = gensim.corpora.MmCorpus('wiki_en_tfidf.mm')

lda = gensim.models.ldamodel.LdaModel(corpus=mm, id2word=id2word, num_topics=10, update_every=1, chunksize=10000, passes=1)

lda.print_topics(1)

上面示例可以看到一个通过 LDA 从 Wikipedia 转储中提取主题的非常简单的示例。

3. Pattern

Pattern 是采用 Python 开发的数据挖掘库,用于抓取和解析各种数据源,如谷歌、Twitter、Wikipedia 等等。

它提供了各种 NLP 工具 (PoS 标签、n- gram、WordNet)、机器学习功能 (向量空间模型、聚类、分类) 和用于进行网络分析的各种工具。它是由 CLiPS 维护的,因此不仅有很好的文档和许多例子,而且有许多学术出版物正在利用图书馆。

# Importing Libraries
from pattern.web import Google
from pattern.en import ngrams

engine = Google(license=API_LICENSE)

for result in engine.search('NLP', cached=False):
print(result.url, result.text)
print(ngrams(result.text, n=2))

在上面的示例中,是爬取谷歌以获取包含关键字『NLP』的结果,它将输出所有的结果 url 和文本。虽然这确实是一个毫无意义的示例,但它展示了如何通过 Pattern 执行爬行和 NLP 任务。

4. Natural Language Tool KIT [NLTK]

NLTK 是可用来训练 NLP 模型的最好的库之一。这个库很容易使用。它是一个初学者友好的 NLP 库。它有很多预先训练好的模型和语料库,可以帮助我们很容易地分析事物。

# Importing Libraries
import nltk
text = 'Earth Revovles around the Sun.'
# Token Generator--> Separates the sentence into tokens
tokens = nltk.word_tokenize(text)
for token in tokens:
print(token)

word_tokenize() 将帮助我们将一组文本创建为简单的单词。我们把它叫做 token,输出 ——

Earth
Revolves
around
the
Sun

5. TextBlob

TextBlob 基于 Pattern 和 NLTK,后者为所有常见的 NLP 操作提供了一个很棒的 API 调用。它不是最快或最完整的库,但它以一种极容易访问和管理的方式提供了人们日常所需功能。

# Importing Module
from textblob import TextBlob

text = 'Earth Revolves around the sun.'

text_blob = TextBlob(text)

for sentence in blob.sentences:
print(sentence.sentiment.polarity)

在上面的示例中,我们考虑 NLTK 库中获取的相同示例文本。在这个程序中,textblob 首先将句子分割成 Token,并在标记上执行情感分析,这只是句子极性分析。希望你对 Python 中自然语言的流行库有一个完整,由于 NLP 是一门难学课程,初学者可能无法正确理解它。但是那些想要开始 NLP 的人,那么你应该使用上面的任何一个库。如果你是一名自然语言处理的新手,我强烈建议您从 NLTK 开始,这将是一个很好的开始。

哈工大NLP工具:PyLTP

一、哈工大 LTP

LTP(Language Technology Platform)中文为语言技术平台,是哈工大社会计算与信息检索研究中心开发的一整套中文语言处理系统。LTP 制定了基于 XML 的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等 6 项中文处理核心技术),以及基于动态链接库(Dynamic Link Library,DLL)的应用程序接口,可视化工具,并且能够以网络服务的形式进行使用。

二 . pyltp 终极安装

下面介绍 Windows10 Python 环境下 LTP 的扩展包 pyltp 安装过程。

1. 常见错误

大家通常会调用 “pip install pyltp” 安装该扩展包,但会遇到各种错误,下面介绍一种可行的方法。

2. 安装pyltp包

首先,安装 Python3.6 环境,如下图所示“python-3.6.7-amd64.exe”。

python-3.6.7-amd64.exe
python-3.6.7-amd64.exe

接着,下载 pyltp 扩展包的 whl 文件至本地,调用 CMD 环境进行安装,注意需要将所在文件的路径写清楚。

  1. pyltp-0.2.1-cp35-cp35m-win_amd64.whl (对应Python3.5版本)
  2. pyltp-0.2.1-cp36-cp36m-win_amd64.whl (对应Python3.6版本)
  3. pip install C:\Python36\Scripts\pyltp-0.2.1-cp36-cp36m-win_amd64.whl

whl下载地址:
https://download.csdn.net/download/qq_22521211/10460778

注意,如果报错“error:Microsoft Visual C++ 9.0 is required”,则安装下面 exe文件。

exe文件
exe文件

3 .下载模型文件

最后需要下载模型文件,其下载地址为:

本文下载 3.4 版本的模型,下载解压如下图所示:

3.4版本的模型
3.4版本的模型

在编写代码时,需要导入指定文件夹中的模型,再进行中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等分析。例如:

#词性标注

pdir='AgriKG\\ltp\\pos.model'

pos = Postagger()

pos.load(pdir)

postags = pos.postag(word) #基于分词得到的list将下词性标注

postags = list(postags)

print(u"词性:", postags)

分词、词性标注、句法分析一系列任务之间存在依赖关系。举例来讲,对于词性标注,必须在分词结果之上进行才有意义。LTP 中提供的 5 种分析之间的依赖关系如下所示:

讲到这里,哈工大 pyltp 基本安装成功,接下来将介绍它的基本用法。
基础性文章,希望对入门者有所帮助。

三.中文分句和分词

1.中文分句

# -*- coding: utf-8 -*-

from pyltp import SentenceSplitter

from pyltp import Segmentor

from pyltp import Postagger

from pyltp import NamedEntityRecognizer

#分句

text = "贵州财经大学要举办大数据比赛吗?那让欧几里得去问问看吧!其实是在贵阳花溪区吧。"

sents = SentenceSplitter.split(text)

print('\n'.join(sents))

中文分句的输出结果如下所示:

  1. 贵州财经大学要举办大数据比赛吗?
  2. 那让欧几里得去问问看吧!
  3. 其实是在贵阳花溪区吧。

2.中文分词

# -*- coding: utf-8 -*-

from pyltp import SentenceSplitter

from pyltp import Segmentor

from pyltp import Postagger

from pyltp import NamedEntityRecognizer

 

text = "贵州财经大学要举办大数据比赛吗?那让欧几里得去问问看吧!其实是在贵阳花溪区吧。"

 

#中文分词

segmentor = Segmentor() #初始化实例

segmentor.load("AgriKG\\ltp\\cws.model") #加载模型

words = segmentor.segment(text) #分词

print(type(words))

print(' '.join(words))

segmentor.release() #释放模型

输出结果如下所示(人工换行):

  1. <class ‘pyltp.VectorOfString’>
  2. 贵州 财经 大学 要 举办 大 数据 比赛 吗 ?
  3. 那 让 欧 几 里 得 去 问问 看 吧 !
  4. 其实 是 在 贵阳 花溪区 吧 。

 

开源NLP(自然语言处理)库对比

自然语言处理NLP)在越来越多的AI应用程序中至关重要。如果您正在构建聊天机器人,搜索专利数据库,将患者与临床试验相匹配,对客户服务或销售电话进行评级,从财务报告中提取事实,必须从自由文本中提取准确信息。在开发和生产中,最受欢迎的 NLP 库列表如下:

显然,NLP 领域还有更多的库。但是,这些库更通用,涵盖更多功能,而不只是专注于特定用例。例如,gensim 是一个 NLP 库,一开始是为构建文本主题模型而创建的,不能用于完整的 NLP 管道。此前,Maziyar Panahi 和 David Talby 提供了一个选择开源 NLP 库的备忘单。在本文的分析中,我们只考虑提供如下核心功能集合的库:

  • 句子检测
  • 单字/单词的细粒度单位化
  • 词干提取
  • 语法标记
  • 词性(POS)
  • 命名实体识别(NER)
  • 依赖分析器
  • 训练特定域的语言模型

以及,提供以下的部分或全部功能:

  • 文本匹配
  • 日期匹配
  • 文本分块
  • 拼写检查
  • 情绪检测
  • 很多其他功能!

这里比较的所有五个库都有一些可以定义的 NLP 数据管线的概念 – 因为大多数 NLP 任务需要组合这些功能中的某些,来获得有用的结果。这些管线,可以是『传统』的管线,也可以是基于深度学习的管线。

传统 NLP 与深度学习 NLP 对比
传统 NLP 与深度学习 NLP 对比

这是最受欢迎的 NLP 库的功能比较:

名称 SparkNLP NLTK SpaCy CoreNLP
句子检测
细粒度单位化
词干提取
语法
磁性标注
命名实体识别
依赖分析
文本匹配
日期匹配
段落分解
拼写检查
情绪检测
预训练模型
训练模型

NLP 研究者的编程指南

最近 AllenNLP 在 EMNLP2018 上做了一个主题分享,名为「写给 NLP 研究者的编程指南」(Writing Code for NLP Research)。该演讲从写原型和写模块两方面介绍了 NLP 研究该如何复制别人的代码、测试自己的代码块、记录及分享研究等,总之在研究者也要高效码代码的年代,这是一份浓缩的实践经验。

读者可以直接下载 PPT 了解详细内容,其中每一页 PPT 都带有简要的备注,根据这些备注可以将所有 PPT 以及整场演讲串联起来。

下载《Writing Code for NLP Research》

下面是整个分享的大纲。通过这次演讲,你可以学到如何写代码来促进你的研究,以及可复现的实验。当然读者最好还是知道一点 NLP 相关的知识,因为这一份分享会以深度学习中的 NLP 问题作为案例。此外,能够大致读懂 Python 代码也是很好的背景,这篇文章都是以 Python 接口调用 DL 框架为例。

NLP
NLP

这里有两种写研究代码的模式,一种是写原型,一种是写组件。作为一名研究者,大多数时候我们都希望写原型,但是在没写好组件前是写不好原型的。而通过原型设计,有时候做出来的东西又是希望下次再复用的组件。因此这是编写代码的两种模式,它们并不独立。

两种写研究代码的模式
两种写研究代码的模式

我们先从写原型的方式开始介绍:

写原型

写原型
写原型

当我们开始写一个原型代码的时候,我们要做到下面三点:

1. 写代码要快
2. 跟踪实验结果
3. 分析模型结果

快速开发

快速开发
快速开发

要做到快速编程,不要从头开始写所有内容,而是使用框架。这里的框架不仅指 tensorflow 或 pytorch 之类的框架,也可以理解为模板。比如上图中如果写 training loop 的部分,已经有人写好了。我们只要看懂后,直接拿来用就行,没有必要从头开始自己写所有部分。

快速编程
快速编程

上面提到的一些内容,都是可以找到现成框架来套用的。很多时候我们在编程时遇到的问题不是构建模型,而是数据读取、预处理和写训练循环等部分。如果有人把你想用的东西模块化了,还等什么,直接拿来用啊!

当然拿来用也是有步骤的,首先我们应该获得基线模型的性能,这也是一个很好的研究实践。基线模型可能是别人的代码,你要是能修修改改就更好了。其次复现 SOTA 基线结果对于理解模型和做更多的研究是非常有帮助的。

基线模型
基线模型

要想快速开发,另一个建议就是先复制,再重构。要记住,我们是在写原型,不用在乎什么可用性,先把代码写 work 了再说。如果实现的效果不错的话,再回去重构。

代码
代码

另外,我们要有好的编程习惯。比如起有意义的变量名,写注释帮助理解。记住,我们是写给人看的,不是机器!此外在使用基线模型做试验的时候,我们可以现在小数据集上做测试,并确保模型能准确读取数据。

准确读取数据
准确读取数据

如果在做原型设计时,我们将 LSTM 写死了(hard-code),那么在我们希望使用 Transformer 等模块的时候就需要重新改代码。因此使用多态可以借助更高级的抽象扩展代码,这样在换模块时就能只修改少量代码。

跟踪实验结果

在写原型的时候你需要运行很多东西,这导致很难追踪发生了什么以及对应的代码部分。

跟踪实验结果
跟踪实验结果

可以准备一个 Excel 表格,来记录实验结果。

黑箱对比对于上下文理解有帮助,但不能深入理解两个结果之间的关系,因为有太多的变量在同时变化。我们需要每次仅改变一个变量,可以在代码中设置「开关」,将开关配置一些全局状态/依赖注入。

全局状态 依赖注入
全局状态 依赖注入

每次只改变一个部分,方便跟踪实验结果的变化其原因在于哪里。

每次只改变一个部分
每次只改变一个部分

这里光是 embedder,我们就有很多种选择

embedder
embedder

使用设定文件来记录模型的改变,方便我们以后查询当时的设定。

分析模型结果

在训练的时候,可视化对于分析模型表现是非常重要的。这个技能必须掌握。

分析模型结果
分析模型结果

Tensorboard 可以提供很多分析结果。

Tensorboard
Tensorboard

Tensorboard 能帮我们找到优化的 bug。比如上图中的 embedding 梯度有两个数量级的差别。

Tensorboard
Tensorboard

原因在于 embedding 的梯度是稀疏梯度,即只有一部分会被更新。但是 ADAM 中的动量系数是针对整个 embedding 计算的,所以解决方法是直接引入特定的优化器:DenseSparseAdam。

在解释你的模型的预测输出时,好的展示是静态预测;更好的展示是交互地查看预测;最好的展示是交互地查看内部过程。

best
best

对于预测结果,如果可以做到交互式的方式来查看的话,是最好的。

开发组件

与写原型不同,开发可重复使用的组件有很多要注意的地方。我们的代码需要写清楚,这样就能聚焦于建模决策,而不考虑代码到底在做什么。

Code Reveiw
Code Reveiw

Code Reveiw 是必不可少的。Review 的时候,不仅能发现错误,还能提高代码的可读性。

持续整合 以及构建自动化
持续整合 以及构建自动化

如果我们不是软件开发人员的话,对于持续整合 以及构建自动化 这两个词可能比较陌生。通常我们只说持续整合的时候,也包含了构建自动化的意思。想要做到这点,要多写测试才行。

当然,如果我们不是开发一个很多人都会用到的库,上面这些步骤是用不到的。不过测试很重要,如果是原型开发,也要做一些最基本的测试。

最基本的测试
最基本的测试

如上对读取的数据进行测试,看是否正确。这里在进行单元测试时常用的就是 assert 语句,如果程序有问题,运行到这边就自然会报错,这样可以让我们尽快找到错误。

 assert 语句
assert 语句

如上所示,当然我们也可以使用 assert 语句检查维度是否一致。这在模型运算部分经常会用到,例如判断每个卷积层输出结果的尺寸和深度等。可以看到这两种测试的代码都不会很多。所以不要犯懒了,好好写测试吧。

关于 AllenNLP 库的一些介绍,这里就不花时间讨论了,感兴趣的可以看 slide 中 p141~p205 的部分。下面直接进入分享的部分。

GitHub地址项目 GitHub 地址

分享研究

简化安装的流程
简化安装的流程

简化安装的流程,令代码运行在任何平台,使用隔离的环境。

下面是使用 Docker 的一些优点。

Docker
Docker
Docker 2
Docker 2

用 docker 开发的好处不用多说,大家想必也已经都知道了。当然,缺点也是有的。

cons of docker
cons of docker

至于 Python 的包管理系统,AllenNLP 采用了 ANACONDA

Python
Python

Docker 是不错,但不适合做本地开发,这样的话,使用一些本地的包管理系统反而更方便。

最后做个总结

in conclusion
in conclusion
  • 快速开发原型(要安全)
  • 写安全的产品代码(要快)
  • 好的流程有利于做出好的研究
  • 使用正确的抽象
  • 查看 AllenNLP(广告)

这次分享的 slide 看了几遍,很多地方看得自己脸上发热,不写测试什么的说到了痛处。现在人工智能领域对于算法工程师的要求已经不是能掉个包,谈谈研究那么简单了,工程实践能力已经变得越来越重要。写优秀的代码,做优秀的研究,二者是一个互相促进的过程。

NLP 科研现状更新

一、资源简介

自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。

中科院自动化研究所自然语言处理团队负责人宗成庆研究员的报告从学科产生与发展、技术挑战、基本方法、应用举例、技术现状等多个视角对自然语言处理领域进行了全面梳理,以及对该学科未来发展方向的分析和展望。我们希望这份报告能够帮助读者了解学科发展的脉络,激发研究兴趣,思考核心问题,领悟未来走向。

作者团队主要研究方向包括自然语言处理基础任务、机器翻译、知识图谱、信息抽取、问答系统、情感分类、基于多模态信息融合的自然语言处理、类脑启发的自然语言处理方法研究等,在上述各方向上都进行了深入研究和探索,产出了一批优秀成果,包括三部专著:《统计自然语言处理》、《文本数据挖掘》和《知识图谱》。对该学科未来发展的趋势和方向进行了简要分析和展望。

二、主要内容目录

PPT 的提纲为:

  1. 学科产生与发展
  2. 技术挑战
  3. 基本方法
  4. 应用举例
  5. 技术现状
  6. 我们团队

三、资源分享

同时为了方便大家,我们把最新 《自然语言处理方法与应用》PDF 打包好了,可以直接下载。

NLP最新科研福利!MSRA开源学术界最全面语义分析数据集

微软亚洲研究院(MSRA),刚刚送出最新一批 AI 资源和福利。

在“中国高校人工智能人才国际培养计划” 2019 国际人工智能专家论坛暨 2019 微软新一代人工智能开放科研教育平台合作论坛,MSRA 面向高校提供最新的人工智能技术、工具、科研成果,以及数据集。

新增业界最全面的语义分析数据集

在新一代人工智能开放科研教育平台的合作框架下,微软开放了自身人工智能领域的数据集供合作高校在科研和教育工作上进行引用,如微软机器阅读理解(MS MARCO)、微软研究院社交媒体对话语料库、18K 数学文字题测试集 SigmaDolphin 等。

高校也通过平台贡献了各自在多个领域的数据集,如中国科学技术大学类脑实验室的海量类脑数据等。

2019 年,微软亚洲研究院正式发布自然语言处理(NLP)领域全新的语义分析数据集 MSParS (Multi-perspective Semantic ParSing Dataset)。

作为智能音箱、搜索引擎、自动问答和对话系统等人工智能产品中的核心技术,语义分析(Semantic Parsing)面临着因人工标注代价高昂而导致的数据缺乏问题,目前已有的语义分析数据集在数据规模和问题类型覆盖度上非常有限。

为此,微软亚洲研究院提出并构建了 MSParS,该数据集(1.0版本)包含 81,826 个自然语言问题及其对应的结构化语义表示,覆盖 12 种不同的问题类型和 2,071 个知识图谱谓词,是学术界目前最全面的语义分析数据集。未来,微软将与各高校一起开放、共享更多数据,促进产教融合合作生态的建设。

MSParS 数据集:

https://github.com/msra-nlc/MSParS

 

大规模中文自然语言处理语料

中文的信息无处不在,但如果想要获得大量的中文语料,却是不太容易,有时甚至非常困难。在 2019 年初这个时点上 —— 普通的从业者、研究人员或学生,并没有一个比较好的渠道获得极大量的中文语料。笔者想要训练一个中文的词向量,在百度和 Github 上上搜索了好久,收获却很少:要么语料的量级太小,要么数据过于成旧,或需要的处理太复杂。

为此,徐亮创建了一个中文自然语言处理语料库项目:nlp_chinese_corpus ,初步贡献了几个已经预处理好的中文语料,包括维基、新闻和百科语料。包括 ——

  1. 维基百科(wiki2019zh),100万个结构良好的中文词条;
  2. 新闻语料(news2016zh),250万篇新闻,含关键词、描述;
  3. 百科问答(baike2018qa),150万个带问题类型的问答;
  4. 社区问答json版(webtext2019zh),410万个高质量社区问答,适合训练超大模型;
  5. 翻译语料(translation2019zh),520万个中英文句子对;

GitHub地址项目 GitHub 地址

中文 NLP 词库

最近,在 GitHub 上,有人收罗了一份资源,汇集了 40 个关于中文 NLP 词库,涵盖了各个方面。中英文敏感词、语言检测、中外手机/电话归属地/运营商查询、名字推断性别、手机号抽取、身份证抽取、邮箱抽取、中日文人名库、中文缩写库、拆字词典、词汇情感值、停用词、反动词表、暴恐词表、繁简体转换、英文模拟中文发音、汪峰歌词生成器、职业名称词库、同义词库、反义词库、否定词库、汽车品牌 & 零件词库、时间抽取、连续英文切割、中文词向量大全、公司名字大全、古诗词库、IT词库、财经词库、成语词库、地名词库、历史名人词库、诗词词库、医学词库、饮食词库、法律词库、汽车词库、动物词库、中文聊天语料、中文谣言数据。

在应用这些语料库同时,你或者还需要 pyHanLPJieBa 等中文分词组件支持。

GitHub地址项目 GitHub 地址

NLP 科研编程指南

最近 AllenNLPEMNLP 2018 上做了一个主题分享,名为「NLP 科研编程指南」(Writing Code for NLP Research)。该演讲从写原型和写模块两方面介绍了 NLP 研究该如何复制别人的代码、测试自己的代码块、记录及分享研究等,总之在研究者也要高效码代码的年代,这是一份浓缩的实践经验。

这份内容干货满满,仅仅只是看了 PPT 就知道是非常有意思的一次演讲了。PPT 共有 254 页之多,在「赤乐君」知乎专栏分享。深度学习与新一代人工智能科研人员可以直接下载 PPT 了解详细内容,其中每一页 PPT 都带有简要的备注,根据这些备注可以将所有 PPT 以及整场演讲串联起来。

平行语料库数据集

与大部分机器学习模型一样,有效的机器翻译系统需要大量的训练数据才能产生可读性强的结果。平行文本翻译语料库是两种语言之间的结构化翻译文本集。此类平行语料库对训练机器翻译算法至关重要。但从哪里可以获得这些外语数据集呢?

机器之心整理了一份完整的名单:《囊括欧亚非大陆多种语言的 25 个平行语料库数据集

Google 开源全面超越人类的最强 NLP 预训练模型:BERT

近日,谷歌 AI 的一篇 NLP 论文引起了社区极大的关注与讨论,被认为是 NLP 领域的极大突破。谷歌大脑研究科学家 Thang Luong Twitter 表示,这项研究开启了 NLP 领域的新时代。该论文介绍了一种新的语言表征模型 BERT —— 来自 Transformer 的双向编码器表征。BERT 是首个在大批句子层面和 token 层面任务中取得当前最优性能的基于微调的表征模型,其性能超越许多使用任务特定架构的系统,刷新了 11 项 NLP 任务的当前最优性能记录。

刚刚,谷歌正式将其开源!这意味着所有 NLP 从业者都可以试用这个强大的 NLP 预训练模型并结合到自己的工作中。

GitHub地址项目 GitHub 地址

Tencent AI Lab 开源大规模 NLP 数据集

10 月19 日,Tencent AI Lab 宣布开源大规模、高质量的中文词向量数据。该数据集包含 800 多万中文词汇。Tencent AI Lab 表示,相比现有的公开数据,该数据在覆盖率、新鲜度及准确性上大幅提高,为对话回复质量预测和医疗实体识别等自然语言处理方向的业务应用带来显著的效能提升。

Tencent AI Lab 此次公开的中文词向量数据包含 800 多万中文词汇,其中每个词对应一个 200 维的向量。相比现有的中文词向量数据,Tencent AI Lab 的中文词向量着重提升了以下 3 个方面:

  • 覆盖率(Coverage):该词向量数据包含很多现有公开的词向量数据所欠缺的短语,比如『不念僧面念佛面』、『冰火两重天』、『煮酒论英雄』、『皇帝菜』、『喀拉喀什河』等。
  • 新鲜度(Freshness):该数据包含一些最近一两年出现的新词,如『恋与制作人』、『三生三世十里桃花』、『打call”、『十动然拒』、『供给侧改革』、『因吹斯汀』等。
  • 准确性(Accuracy):由于采用了更大规模的训练数据和更好的训练算法,所生成的词向量能够更好地表达词之间的语义关系。
Tencent AI Lab Embedding Corpus for Chinese Words and Phrases
Tencent AI Lab Embedding Corpus for Chinese Words and Phrases

Twitter 情感分析项目

Twitter sentiment analysis with Python
Twitter sentiment analysis with Python

本文为 Python 实战之 Twitter 情感分析项目系列,原作者为 Ricky Kim,全文共分 11 个子项目:

  1. 数据准备
  2. 数据清洗
  3. 数据可视化探索
  4. 构建分类模型
  5. 分类模型对比
  6. Doc2Vec 框架
  7. Doc2Vec 短语建模
  8. 降维
  9. 神经网络分析应用(Keras)
  10. 神经网络分析应用(Doc2Vec / Word2Vec / GloVe)
  11. 神经网络分析应用(CNN + Word2Vec)

GitHub地址项目 GitHub 地址