分布式语义表示
2020-03-29
1 引言
一开始学习的时候,比较糊,建议还是搞清楚比较舒服,一通百通嘛
2 representation
如果我们可以从语料中学到词或者字的词义和语义特征,之后可以直接作为词或者字的表示用于模型训练和预测,这就是词的预训练。
文本是一种非结构化信息是不可以直接训练的
自然语言要作为神经网络模型的输入之前,我们首先需要将其映射为计算机可以表示的形式。
为了更有效的提取语义信息。
word embedding就是一个词的低维向量表示(一般用的维度可以是几十到几千)。有了一个词的向量之后,计算机就可以识别了,各种基于向量的计算就可以实施,如用向量之间的相似度来度量词之间的语义相关性。
其基于的分布式语义表示就是出现在相同上下文(context)下的词意思应该相近。所有学习wordembedding的方法都是在用数学的方法建模词和context之间的关系。
个人理解:
计算机不能直接识别文本(无论哪国的),因此需要将文本变为词向量的形式。
比如中文文本,做embedding之前需要先分词,找出一些高频词,踢掉一些无用的词等等。然后进行词嵌入。但是喂给计算机的每个词如果不考虑上下文直接一个一个的喂,那么就是one-hot,那么就是把每个词表示为很长的向量,每个词都是茫茫0海中的一个1,这样会出现维度爆炸。。这不是关键,关键是词没有词与词之间的语义表示啊!
其实每个词都不是独立存在的,在上下文是有一定的含义的,因此需要考虑语义上下文(这就是分布式语义的表示,所谓的分布式就是说考虑了上下文语义),这样不仅可以降低维度,还可以充分考虑上下文。
library(DiagrammeR)
grViz("
digraph{
# a 'graph' statement
graph [overlap = true, fontsize = 10]
# several 'node' statements
node [shape = box,
fontname = Helvetica]
文本表示; 独热编码; 整数编码; wordembedding; word2vec; Glove
# several 'edge' statements
文本表示->独热编码 文本表示->整数编码 文本表示->wordembedding wordembedding->word2vec wordembedding->Glove
}
")
2.1 one hot
把每个词用茫茫0海中的1表示
2.2 Distributed representation
分布式语义表示
分布假说的词表示方法,根据建模的不同,主要可以分为三类:
- 基于矩阵的分布表示
- 基于聚类的分布表示
- 基于神经网络的分布表示
尽管这些不同的分布表示方法使用了不同的技术手段获取词表示,但由于这些方法均基于分布假说
它们的核心思想也都由两部分组成:
一、选择一种方式描述上下文; 二、选择一种模型刻画某个词(下文称“目标词”)与其上下文之间的关系。
2.3 词向量
词向量就是为了解决文本的表示问题。然后用各种神经网络可以自动提取文本特征。
基于神经网络的分布表示一般称为词向量、词嵌入( word embedding)或分布式表示( distributed representation),神经网络词向量表示技术通过神经网络技术对上下文,以及上下文与目标词之间的关系进行建模。
Word embedding的训练方法大致可以分为两类:一类是无监督或弱监督的预训练;一类是端对端(end to end)的有监督训练。无监督或弱监督的预训练以word2vec和auto-encoder为代表。这一类模型的特点是,不需要大量的人工标记样本就可以得到质量还不错的embedding向量。不过因为缺少了任务导向,可能和我们要解决的问题还有一定的距离。因此,我们往往会在得到预训练的embedding向量后,用少量人工标注的样本去fine-tune整个模型。相比之下,端对端的有监督模型在最近几年里越来越受到人们的关注。与无监督模型相比,端对端的模型在结构上往往更加复杂。同时,也因为有着明确的任务导向,端对端模型学习到的embedding向量也往往更加准确。例如,通过一个embedding层和若干个卷积层连接而成的深度神经网络以实现对句子的情感分类,可以学习到语义更丰富的词向量表达。Scofiel
Word Embedding简单的来说就是把独热编码而成的上万维的词向量输入到神经网络,在隐藏层变成一个只有很小维的词向量。该词向量的每个维度都有其意义(维度太多,人类无法解释)
3 神经网络语言模型
通过神经网络训练语言模型可以得到词向量,常见的额语言模型
这里我觉得可以不用管,主要是我们得学会实现它们的工具。
- Neural Network Language Model ,NNLM
- Log-Bilinear Language Model, LBL
- Recurrent Neural Network based Language Model,RNNLM
- Collobert 和 Weston 在2008 年提出的 C&W 模型
- Mikolov 等人提出了 CBOW( Continuous Bagof-Words)和 Skip-gram 模型
以上这些语言模型不过就是逻辑概念上的东西
4 用来训练语言模型的神经网络(工具)
4.1 word2vec
词向量就是神经网络里的参数,生成词向量的过程就是一个参数更新的过程。那么究竟是什么参数呢?就是这个网络的第一层:将one-hot向量转换成低维词向量的这一层(虽然大家都不称之为一层,但在我看来就是一层),因为word2vec的输入是one-hot。one-hot可看成是1N(N是词总数)的矩阵,与这个系数矩阵(NM,M是word2vec词向量维数)相乘之后就可以得到1M的向量,这个向量就是这个词对应的词向量了。那么对于那个NM的矩阵,每一行就对应了每个单词的词向量。接下来就是进入神经网络,然后通过训练不断更新这个矩阵。这个部分在网上的资料里经常被简略的概括,输出层一般是重点解释的对象,所以需要仔细地理清这个思路。有了这个概念之后再去看word2vec网络具体是怎么实现的,就会容易很多。Kizunasunhy
从文本语料得到词向量的话,大概来讲有如下几个步骤:分词,统计词频,构建huffman树,输入文本训练词向量