Press "Enter" to skip to content

探索自然语言处理 – 启动NLP(第三步)

如果您是第一次了解我“探索自然语言处理”系列,请在此处查看我的介绍性文章。

探索和精通自然语言处理 – 一次深入之旅

您好,我是Deepthi Sudharsan,一名正在攻读人工智能学士学位的三年级本科生。鉴于我已经…

VoAGI.com

以下是我在过去一周中学习的一些概念,特别是有关词嵌入的内容。我进行了一些实践,并将很快作为系列的一部分与大家分享!我要感谢CEN的Sachin Kumar S先生,他在这个学期为我提供了课程,并提供了一些在这里使用的资源和材料。

N-grams:

N-gram是最简单的语言模型,为句子或令牌序列分配概率。 (为令牌序列分配概率值的模型称为语言模型)

n-gram是n个令牌的序列。 n-gram的直觉是,不是计算给定整个历史的单词的概率,而是使用几个单词来近似历史。下一个单词的概率仅取决于前一个单词的假设被称为马尔可夫假设。N-gram模型会查看过去的n-1个单词来预测一个单词的概率。

词嵌入:

将单词转换为其n维向量表示(具有语义含义的单词)以进行进一步的自然语言处理任务,称为词嵌入。例如:Word2Vec

英语语料库中有超过1000万个令牌。单词嵌入将每个单词编码为在词向量空间中成为一个点的向量

直觉是这样的词向量空间将编码语言的所有语义,或具有相似上下文的单词将被映射到向量空间中的相近点。

独热编码:

将单词以向量格式表示,使得向量的长度等于词汇量的大小,而该特定单词索引处的元素将为1,其余元素将为0。

假设我们有一个句子“I Love NLP”。该句子的独热编码如下所示。

探索自然语言处理 - 启动NLP(第三步) 四海 第1张

这种表示方式无法提供单词之间的语义或相关性(上下文接近度)的直观感受。

我认为独热编码的缺点也在于对于非常大的数据,独热编码向量将变得非常大且稀疏(有很多零需要存储)。独热编码也无法捕捉上下文。

基于SVD的方法:

对于一个庞大的语料库,我们对共现矩阵执行SVD,分解后,我们得到向量U(特征向量矩阵),S(特征值矩阵)和V.T(V转置 – 特征向量矩阵的逆)。

下面是句子“Roses are red”和“Sky is Blue”的共现矩阵。共现矩阵指示了在句子中列出的单词被周围的列单词包围的次数。

Source: https://stackoverflow.com/questions/24073030/what-are-co-occurence-matrixes-and-how-are-they-used-in-nlp

矩阵U的向量,即特征向量矩阵或左奇异向量,将被视为单词的向量表示。

我个人觉得这篇文章很有趣,值得进一步了解这种方法:https://medium.com/analytics-vidhya/co-occurrence-matrix-singular-value-decomposition-svd-31b3d3deb305

所以从上面的链接中,我学到了这种方法的优点和缺点。

  1. 我们知道共现矩阵中的单词之间的关系。

2. 可以计算一次并在计算后多次引用,但是当新单词频繁添加到语料库中并且矩阵的维度不断变化时,这会带来一个缺点。

3. 通常需要大量的内存,特别是当存在大量不共现的单词且大多数元素为零时。

术语-文档矩阵:

顾名思义,我们创建一个维度为词汇大小×文档数量的矩阵表示。对于词汇表中的一个单词,我们表示其在每个文档中出现的次数。

它不能捕捉词语的顺序/位置和语义。

词向量的分布性质:

它是基于这个假设的:单词的含义可以根据它出现的上下文来推断。

它不擅长表示在语料库中出现次数很少的罕见单词。它存在歧义问题,并且无法处理形态(evaluate和evalute被认为是不同的)。

词嵌入可以广义地分为两类 – 频率(示例:计数向量、TF-IDF向量、共现矩阵)和预测(连续词袋(CBOW)、Skip-Gram)基于嵌入。

Word2Vec:

Word2Vec是一个浅层、两层的神经网络,用于重构单词的语境。它有两种架构:连续词袋和Skip-gram。

连续词袋:

来源:https://www.kdnuggets.com/2016/05/amazing-power-word-vectors.html/2

目标函数:

https://slideplayer.com/slide/13396296/

为了创建词嵌入,过去和未来的n个词被使用。

增加窗口大小并不能帮助,它只会增加更多的噪音。

在这里,上下文和词语的顺序并不重要,所以我们只是采用词袋的方式,因此“BOW”是它名称的一部分。它还提供了单词之间的语义关系。

连续词袋比Skip-gram表现更好,因为它们能够更好地利用输入数据来高效地捕捉单词向量。

Skip-Gram:

来源:https://deepdatascience.wordpress.com/2017/04/22/word2vec-skip-gram-model/
“负样本”是使用“单字分布”选择的,更常见的单词更有可能被选择为负样本。图像来源:https://cs224d.stanford.edu/lectures/CS224d-Lecture3.pdf

这里,目标词是input,而上下文词是output,与CBOW不同。

它是一种无监督学习方法,可以从提供的任何原始文本中进行学习,并且需要较少的内存。设置隐藏层中的神经元数量和获取上下文位置是困难的,训练所需的时间也较长。

探索自然语言处理 - 启动NLP(第三步) 四海 第7张

GLoVE(全局词向量表示):

https://trailhead.salesforce.com/en/content/learn/modules/glove-and-word-vectors-for-sentiment-analysis/use-glove-for-natural-language-processing

•Glove模型结合了词-词共现计数和基于窗口的方法

•需要计算非常大的共现矩阵,在开始时表示为 ‘P’

•对于可以共现的每对词,最小化两个词的内积与两个词的对数计数之间的距离

•使用f(Pij)加权的平方距离值,将对具有高计数的对赋予较低的权重

•这里考虑了各个单词的出现次数

FastText:

用于高效的文本分类和表示,FastText将每个单词表示为字符n-gram的集合。由于嵌入是使用n-gram学习的,因此它将包含有关后缀和前缀的信息。

用于词嵌入和分类的FastText库允许创建用于获取词向量表示的无监督学习或监督学习算法。

FastText可以通过将其组成字符n-gram的向量求和来获取向量,即使是对于词汇表之外(OOV)的词,前提是训练数据中至少有一个字符n-gram存在。

参考文献:

  1. ‘Speech & language processing’ , Daniel Jurafsky, James H Martin, preparation [cited 2020 June 1] (Available from: https://web. Stanford. edu/~ jurafsky/slp3 (2018))
  2. https://en.wikipedia.org/wiki/Word_embedding
  3. https://towardsdatascience.com/https-VoAGI-com-tanaygahlot-moving-beyond-the-distributional-model-for-word-representation-b0823f1769f8
  4. https://medium.com/analytics-vidhya/co-occurrence-matrix-singular-value-decomposition-svd-31b3d3deb305
  5. https://deepdatascience.wordpress.com/2017/04/25/word2vec-continous-bag-of-words/
  6. https://towardsdatascience.com/skip-gram-nlp-context-words-prediction-algorithm-5bbf34f84e0c
  7. https://www.kdnuggets.com/2016/05/amazing-power-word-vectors.html/2

本系列的之前部分:

第1部分:https://medium.com/@deepthi.sudharsan/exploring-nlp-kickstarting-nlp-step-1-e4ad0029694f

第2部分:https://medium.com/@deepthi.sudharsan/exploring-nlp-kickstarting-nlp-step-2-157a6c0b308b

Leave a Reply

Your email address will not be published. Required fields are marked *