赞
踩
词嵌入定义:对于一系列语言建模和特征学习技术的集合名称,在自然语言处理领域中文本库中词或短语被映射到一个实值向量。
这个向量反映了就形态学/ 词-内容表达/ 全局语料统计/ 词层次结构/文本建的关系和他们包含的项之间的词结构。
所有词嵌入的思想是去捕获其语义/形态/内容/层次信息等等。在实践中特定任务中可能某一个方法会比其他的都好,例如LSA在处理低维空间来自相同领域的文本,其已经被处理成term-document矩阵。
one-hot encoding (CountVectorizing)
最基本和朴素的方法对于转化词到向量是数数在每个文本中词的出现频次。这个称为countvectorizing或者one-hot encoding。思想是首席一系列文档(可以是词,句子,段落,或者文章)并数数每个词的出现频次。得到的结果矩阵中列是词, 行是文本。
from sklearn.feature_extraction.text import CountVectorizer
# create CountVectorizer object
vectorizer = CountVectorizer()
corpus = [
‘This is the first document’,
‘This is the second document’,
‘This is the last document’
]
X = vectorizer.fit_transform(corpus)
vectorizer.get_feature_names() == (
[‘first’, ‘second’, ‘last’, ‘the’, ‘document’]
)
X.toarray()
vectorizer.transform([‘This is a new document’]).toarray()
这种方式的输出有时候称为稀疏矩阵,当X大多数元素都是0。
TF-IDF 转化
这个方法的思想是通过利用有用的统计度量称为tf-idf来权衡term。 有大量语料时,例如’a’, ‘the’, ‘is’这些出现很频繁但没有具体含义。使用Onehot 编码方法我们会看到这些词不是那么稀疏,这些词很重要并带有大量信息。一种方法去解决这个问题是停用词过滤,但这个解是离散的,对领域不固定。
对停用词的一个朴素解是使用统计量,
第一项称为term frequency词频,也就是简单的平均在所有文档中该词出现的次数:
from sklearn.feature_extraction.text import TfidfTransformer
# create tfidf object
transformer = TfidfTransformer(smooth_idf = False)
#X 从之前片段中使用X.toarray()转化得到
X = [[4,0,1], [2,0,2], [3,4,0],[2,0,2], [3,1,0], [3,0,2]]
#从词汇表中学习并存储tf-idf稀疏矩阵
tfidf = transformer.fit_transform(counts)
tfidf.toarray()
Word2Vec
Word2Vec是第一个神经嵌入模型,被大家广泛使用。它演化出Doc2Vec,也是对段落表达很流行的模型。
有三种Word2vec类型的参数学习,所有都是基于神经网络模型。
One-word context
这个思想是我们考虑每个上下文环境考虑一个词(我们基于给定的一个词来预测一个词),这个方法经常指的是CBOW模型,神经网络架构是我们有one-hot 编码的向量作为V*1的输入,输入层到隐藏层的权重矩阵W 大小为V*N, 隐藏层到输出层权重W’ 大小为N*V, 最后一步激活使用softmax函数。我们目标是计算下面的概率分布,下标I词的向量表达:
我们假设输入向量x, 全为0, 并且在k位置有一个1,隐藏层h为:
现在我们可以称h为词x的输入向量。词汇表中每个词都有输入和输出表达;权重W的i行是词i的输入向量表达。
神经网络的下一步,我们使用h向量并做以下运算:
v’表示词w下标为j的输出向量,对于每个实体u下标为j我们做这个乘法操作。
激活步骤使用标准softmax函数(之后会替代为负采样或者层次softmax技术):
代价函数为:
-c和c表示上下文窗口的限制,下标t的词是遍历语料库中每个词。
我们的第一步是得到隐藏层:
输出层(没有激活)得到:
from gensim.models import word2vec
corpus = [‘Text of the first document.’,
‘Text of the second document made longer.’,
‘Number three.’,
‘This is number four.’,]
tokenized_sentences = [sentence.split() for sentence in corpus]
model = word2vec.Word2vec(tokenized_sentences, min_count =1)
GloVe(global vectors for word representation)
全局词表达方法被用来捕获一个词嵌入带着整个观察的语料的结构;词频和共同出现计数是主要度量。Glove模型训练全局词的共同出现计数并使用最小二次误差统计,结果是产生一个带有有意义的子结构的词向量空间。这样的框架保留了带向量距离的词相似度。
为了存储这样的信息我们使用共同出现矩阵X, 每个实体对应着词j出现在词i的上下文的次数。
我们首先顶一个函数F:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。