炼数成金 门户 商业智能 深度学习 查看内容

spaCy:如何使用最快的NLP开发库结合Keras来进行深度学习

2016-11-8 10:25| 发布者: 炼数成金_小数| 查看: 24550| 评论: 0|原作者: Matthew Honnibal|来自: 高可用架构
摘要: 1.0 版的 spaCy 终于发布了,它是世界上最快的自然语言处理 NLP 库。 到目前为止,1.0 版的最好的特性是将定制化的模型集成到 spaCy 新系统中。 本文将向您介绍这些新特性,并向您展示如何使用新的自定义管道功能将 ...
网络 工具 模型 深度学习 自然语言处理
导读:工程师可用使用很多工具库来进行自然语言处理,比如 NLTK/CoreNLP/OpenNLP/Rosette/OpenIE 等等,在这么多选择中,spaCy 也许是所有人的推荐。

1.0 版的 spaCy 终于发布了,它是世界上最快的自然语言处理 NLP 库。 到目前为止,1.0 版的较好的特性是将定制化的模型集成到 spaCy 新系统中。 本文将向您介绍这些新特性,并向您展示如何使用新的自定义管道功能将 Keras 提供的 LSTM 情感分析模型添加到 spaCy 管道中。

之前的 spaCy 用户调查已经收到了很多对程序库的反馈。 最显而易见的是 spaCy 需要更多教程文档。 我们目前正在为该网站制作一个新的并改进的教程。 同时优先考虑新的 1.0 功能的教程,比如新的规则,实体感知匹配器,模型训练 API 和自定义管道。

自定义管道是特别令人兴奋的,因为他们你整合自己的深度学习模型进 spaCy。 所以,这里将说明如何使用 Keras 来训练 LSTM 情感分析模型,怎样使用 spaCy 的结果的注解。

如何在 spacy 中使用 Keras LSTM 模型来进行情感分析
有许多伟大的开源库用于研究,训练和评估神经网络。然而,这些库关注的问题通常止步于评估得分和模型文件。spaCy 一直被设计为协调多个文本注释模型,并帮助您在应用程序中一起使用它们。 spaCy 1.0 现在使用自己的自定义模型更容易计算这些注释。

在本文中,我们将使用 Keras,因为它是 Python 更受欢迎的深度学习库。让我们假设你写了一个自定义情感分析模型来预测文档是正面还是负面情绪。现在,您想要找到哪些实体通常与正面情绪文档或负面情绪文档相关联。这里有一个快速示例,可以看到运行时。
你需要做的是传递一个create_pipeline 回调函数到 spacy.load()。 该函数应该使用 spacy.language.Language 对象作为其的参数,并返回一系列可调用对象。 每个可调用对象都应该接受一个 Doc 对象,对其进行修改,并返回None。

对单个文档的操作是低效的,特别是对于深度学习模型。通常我们要注释许多文本,并且我们想要并行处理它们。因此,您应该确保模型组件还支持.pipe()方法。.pipe()方法应该是一个良好的生成器函数,可以对任意大的序列进行操作。 pipe函数使用小文档缓冲区,并行处理它们,并一个一个地产生它们。
默认情况下,spaCy 1.0下载并使用 300 维 GloVe(Global Vectors for Word Representation 词表达全局向量)common crawl 向量。 也很容易用你自己训练的向量替换这些向量,或者完全禁用词向量(word vectors)。 如果你已经将你的词向量安装到 spaCy 的 Vocab 对象中,下面介绍如何在 Keras 模型中使用它们:
对于大多数应用程序,我建议使用预先训练的词嵌入(word embeddings,给出一个文档,文档就是一个单词序列比如 “A B A C B F G”, 希望对文档中每个不同的单词都得到一个对应的向量(往往是低维向量)表示)而不进行“微调”。 这意味着您将在不同的模型中使用相同的embeddings,并避免learning过程对您的训练数据进行调整。embeddings 表是大表,并且由预训练向量提供的值已经相当好。因此,微调嵌入表是浪费您的“参数预算”。通常较好使用其他方式扩大您的网络,例如通过添加另一个 LSTM 层,使用注意机制,使用字符特征等。

属性钩子(实验性质)
早些时候,我们看到了如何在新的通用user_data dict中存储数据。这可以接受,但不令人满意。理想情况下,我们希望让自定义数据驱动更多的“本地”行为。例如,考虑由spaCy的Doc,Token和Span对象提供的.similarity()方法:
默认情况下,这只是平均每个文档的向量,并计算其余弦。一般说来,spaCy 使你很容易安装自己的相似模型。这引入了棘手的设计挑战。当前的解决方案是向 Doc 对象添加三个 diction:
总而言之,这里是一个在自定义 .similarity() 方法中挂钩的例子:
下一步
属性钩子很可能会略微演变,并且肯定需要一些调整来达到完全一致。我也期待为标记器,解析器和实体识别器改进模型。在过去的十二个月中,研究表明,双向 LSTM 模型是这些任务的简单和有效的方法。结果模型耗费的内存也明显更小。

参考代码:
https://github.com/explosion/spaCy/blob/master/examples/deep_learning_keras.py

英文原文:
https://explosion.ai/blog/spacy-deep-learning-keras

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

  GMT+8, 2017-12-14 16:22 , Processed in 0.138549 second(s), 24 queries .