[ELMo]Deep contextualized word representations记录

ELMo是2018年NAACL的最佳论文提出的深度语境化词表征模型,解决了传统词向量的局限。通过预训练的双向深度语言模型,ELMo能捕捉词的句法、语义特征和多义词在不同语境的变化,提升NLP任务的性能。实验显示,ELMo在多个自然语言处理任务中显著提高了最佳结果,并证明了模型内部多层结构的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Deep contextualized word representations是2018年NAACL的BestPaper,提出ELMo模型,突破了word2vec glove等传统词向量的限制,所以找了个时间阅读并尝试翻译了一下这篇Paper,水平有限,仅供参考,也欢迎一起学习交流!

深度语境化词表征

摘要

文章推出了一种新型的深度语境化词表征模型,该模型可以对复杂的词特征(句法、语义)以及词在不同语言语境中的变化进行建模。

ELMo模型中包含一个基于大文本语料预训练后的深度双向语言模型,而ELMo词向量则是该深度双向语言模型的内部状态函数。

实验证明经过ELMo模型训练得出的词向量可以轻易的加入现有的模型,并且显著的提升了六个富有挑战性的自然语言处理领域问题的最佳结果,其中包括问答、文本语义、情感分析等。

在本文中同时证明了预训练深度双向语言模型的内部多层结构是至关重要的,通过混合不同层的自由组合,可以更好的应付下游任务中的性能。

1.介绍

在自然语言理解的模型中,预训练词表征技术是一个关键组成部分。然而,高质量的词表征是具有挑战性的。

一个高质量的词表征在理想的情况下需要基于:
(1)词的复杂特征(句法以及语义)

(2)这些词在不同语言环境下的变化(例如多义词)

进行建模。

在这篇文章中,作者提出了一种能够直接解决上述两个难点,并且能够轻易的结合现有的模型,显著的优化一系列自然语言处理问题的深度语境化词表征技术。

在该模型中,与传统词嵌入方法不同的是:每一个词表征(词向量)都是整个输入句子的函数。

该模型的词向量是由一个基于大量文本训练的双向lstm语言模型而得到的。

基于这个原因,他们将这个模型称为ELMo-Embeddings from Language Models,即由语言模型得到的词向量。

ELMo模型的词表征是很深层次的,因为词表征结果是双向语言模型(biLM)所有内层的函数。更具体的,对于每个任务,它们学习了基于每个输入词的多层状态函数的线性组合,与仅仅使用lsmt顶层相比,这显著提高了性能。

通过这种组合内部状态的方式使得词表征十分丰富,通过内部评估,他们认为高层次的lstm状态更能捕捉到词义的上下文方面,而低层次的lstm状态更能表现出语法方面。

同时,这些信号都是非常有用的,这允许学习模型在面对每个终端任务时,可以选择最有用的半监督类别。

大量的实验证明ELMo模型在实践上十分有效。文中首先表明了该模型可以轻易的添加到六个不同的并且具有挑战性的自然语言理解问题上,并且在每个问题上都刷新了最高性能。

对于可以直接进行比较的是Cove,CoVe也是一种语境化的词表征技术,它的实现是基于神经机器翻译编码器。

最终,对于ELMo以及CoVe的分析揭露了深度表示模型优于那些仅仅由LSTM顶层派生而来的。

2.

### Word2Vec 和 ELMo 的比较 #### 词向量特性 Word2Vec生成固定长度的静态词向量,这意味着无论词语出现在什么位置或环境中,其表示都是相同的[^1]。相比之下,ELMo提供动态、基于上下文的词向量,在不同的句子结构中同一个词可以获得不同的表示形式,从而更有效地处理一词多义现象[^3]。 #### 训练机制差异 对于Word2Vec而言,存在两种主要模式用于学习词汇表征:连续袋模型(CBOW)以及跳字(Skip-gram)[^2]。前者尝试根据周围单词预测目标单词;后者则相反,给定单个单词试图推测周围的邻居们。而ELMo采用双向LSTM架构捕捉序列中的前后依赖关系,并以此为基础构建更加丰富的特征空间。 #### 应用场景适配度 由于Word2Vec产生的嵌入不具备情境敏感性,因此更适合那些不涉及复杂语境理解的任务,比如简单的相似度计算或是主题建模等基础工作。然而当面对诸如机器翻译、情感分析之类的高级应用时,则可能因为缺乏足够的灵活性而导致性能受限。另一方面,得益于对上下文化的深刻洞察力,ELMo能够在更多样化的自然语言处理挑战面前展现出优势,特别是在需要精准把握细微差别的情况下表现尤为突出。 ```python import gensim.downloader as api from allennlp.commands.elmo import ElmoEmbedder # 加载预训练好的Word2Vec模型 wv = api.load('word2vec-google-news-300') # 初始化ELMo嵌入器 elmo = ElmoEmbedder() def compare_embeddings(word, context_sentence=None): """对比展示两个不同方式下的词嵌入""" # 获取Word2Vec的结果 try: wv_result = wv[word].tolist() except KeyError: print(f"{word} not found in Word2Vec vocabulary.") return # 如果提供了具体语句,则获取该环境下对应的ELMo表示 if context_sentence is None: elmo_result = "No sentence provided for contextualized embedding." else: tokens = [token.lower() for token in context_sentence.split()] embeddings = elmo.embed_batch([tokens]) index_of_word = next((i for i, t in enumerate(tokens) if t == word), -1) if index_of_word != -1: layer_embedding = embeddings[:,index_of_word,:] avg_layer_embd = (layer_embedding.sum(axis=0)/len(layer_embedding)).tolist() elmo_result = f"Average of layers' embeddings at position {index_of_word}: {avg_layer_embd}" else: elmo_result = f"'{word}' does not appear in the given sentence." return {"Word2Vec": wv_result, "Contextual_Elmo": elmo_result} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值