文本文档代码大全简单_ELMo:基于上下文的语言模型,5分钟构建语义搜索引擎代码实战...

作者:Josh Taylor

编译:ronghuaiyang

导读

5分钟内构建一个基于ELMo的语义搜索引擎,在NLP中,上下文就是一切。

759520b240c9920c8c2d9b04bb1c1b24.gif

使用最先进的ELMo自然语言模型得到的语义句子相似度

本文将探讨自然语言建模的最新进展,深度上下文词嵌入。本文的重点是实践而不是理论,它提供了一个工作示例,说明如何使用最先进的ELMo模型来检查给定文档中的句子相似性,并创建一个简单的语义搜索引擎。完整的代码可以在Colab笔记本中查看:https://colab.research.google.com/drive/13f6dKakC-0yO6_DxqSqo0Kl41KMHT8A1。

上下文在NLP中的重要性

众所周知,语言是复杂的。上下文可以完全改变一个句子中单个单词的意思。例如:

He kicked the bucket.

I have yet to cross-off all the items on my bucket list.

The bucket was filled with water.

在这些句子中,虽然“bucket”这个词总是一样的,但它的意思是非常不同的。

346e7a1f55798b9df638e29b5090e8ba.png

根据不同的上下文单词可以有不同的意思

虽然我们可以很容易地理解语言中的这些复杂性,但是创建一个模型来理解周围文本中单词意义的不同细微差别是很困难的。

正是由于这个原因,传统的词嵌入(word2vec、GloVe、fastText)不够完善。它们每个单词只有一个表示,因此它们无法捕获每个单词的含义如何根据周围的上下文变化。

ELMo介绍,深度上下文词表示

ELMo,由AllenNLP于2018年开发,它超越了传统的嵌入技术。它使用深度的、双向的LSTM模型来创建单词表示。

ELMo不是一本单词字典和它们对应的向量,而是在使用它们的上下文中分析单词。它也是基于字符的,允许模型形成词汇表外的单词表示。

因此,这意味着ELMo的使用方式与word2vec或fastText非常不同。ELMo不使用字典“查找”单词及其对应的向量,而是通过深度学习模型传递文本来动态创建向量。

一个工作示例,5分钟内实战ELMo

我们开始!这里我会写出主要的代码,但是如果你想了解全部的代码,请参阅这里:https://colab.research.google.com/drive/13f6dKakC-0yO6_DxqSqo0Kl41KMHT8A1。

根据我最近的几篇文章,我们将使用的数据是基于Modern Slavery returns。这些都是公司的强制性声明,以传达他们如何在内部和供应链内部解决Modern Slavery。在本文中,我们将深入探讨ASOS的return(一家英国在线时尚零售商)。

1. 获取文本数据,清洗并且做成tokens

使用Python字符串函数和spaCy来实现是非常简单的。这里我们做一些基本的文本清理:

a)删除换行符、制表符、多余的空格以及神秘的“xa0”字符;

b)使用spaCy的‘.sents’ 迭代器将文章分成句子。

ELMo可以接收一个句子字符串列表,也可以接收一个列表的列表(句子和单词)。这里我们选择了前者。我们知道ELMo是基于字符的,因此标记单词不应该对性能有任何影响。

nlp = spacy.load('en_core_web_md')

#text represents our raw text document

text = text.lower().replace('', ' ').replace('', ' ').replace('xa0',' ') #get rid of problem chars

text = ' '.join(text.split()) #a quick way of removing excess whitespace

doc = nlp(text)

sentences = []

for i in doc.sents:

if len(i)>1:

sentences.append(i.string.strip()) #tokenize into sentences

2. 使用TensorFlow Hub获取ELMo模型:

如果你还没有用过TensorFlow Hub,它提供了大量的预先训练的模型在TensorFlow中使用。幸运的是,ELMo就是其中之一。我们只需两行代码就可以加载一个完全训练好的模型。

url = "https://tfhub.dev/google/elmo/2"

embed = hub.Module(url)

要使用这个模型,我们只需要多几行代码,将它指向文本文档,并创建句子向量:

# This tells the model to run through the 'sentences' list and return the default output (1024 dimension sentence vectors).

embeddings = embed(

sentences,

signature="default

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值