Python 机器学习算法交易实用指南(五)(1)

简介: Python 机器学习算法交易实用指南(五)

第十五章:词嵌入

在前两章中,我们应用了词袋模型将文本数据转换为数值格式。结果是稀疏的、固定长度的向量,表示文档在高维词空间中的位置。这允许评估文档的相似性,并创建特征来训练机器学习算法,分类文档的内容或评估其中表达的情感。然而,这些向量忽略了术语使用的上下文,因此,例如,包含相同单词的不同句子将被编码为相同的向量。

在本章中,我们将介绍一种替代类别的算法,它使用神经网络来学习个别语义单元(如单词或段落)的向量表示。这些向量是密集的,而不是稀疏的,而且有几百个实值,而不是几万个二进制或离散条目。它们被称为嵌入,因为它们将每个语义单元分配到连续向量空间中的位置。

嵌入是通过训练模型将标记与其上下文关联起来而产生的,这样做的好处是类似的用法意味着类似的向量。此外,我们将看到嵌入如何通过它们的相对位置来编码语义方面的关系,例如词之间的关系。因此,它们是我们将在后面的章节中介绍的深度学习模型中强大的特征。

具体来说,在本章中,我们将涵盖以下主题:

  • 词嵌入是什么,以及它们如何工作和捕捉语义信息
  • 如何使用训练好的词向量
  • 哪些网络架构对训练 Word2vec 模型有用
  • 如何使用 Keras、gensim 和 TensorFlow 训练 Word2vec 模型
  • 如何可视化和评估词向量的质量
  • 如何使用 SEC 文件训练 Word2vec 模型
  • 如何扩展 Word2vec 的Doc2vec

词嵌入如何编码语义

词袋模型将文档表示为反映其所包含标记的向量。词嵌入将标记表示为较低维度的向量,使得它们的相对位置反映了它们在上下文中的使用方式的关系。它们体现了语言学中的分布假设,即单词最好通过它们的搭配来定义。

词向量能够捕捉许多语义方面;不仅是近义词彼此靠近,而且单词之间可以有多个相似度程度,例如,单词“驾驶员”可能与“汽车司机”或“导致”的相似。此外,嵌入反映了单词对之间的关系,例如类比(东京对日本就像巴黎对法国,或者 went 对 go 就像 saw 对 see),我们将在本节稍后进行说明。

嵌入是通过训练机器学习模型来预测单词与它们的上下文或反之。在下一节中,我们将介绍这些神经语言模型的工作原理,并介绍成功的方法,包括 Word2vec、Doc2vec和 fastText。

神经语言模型如何学习上下文中的用法

词嵌入是通过训练一个浅层神经网络来预测给定上下文的单词而产生的。传统语言模型将上下文定义为目标词之前的单词,而单词嵌入模型使用包围目标的对称窗口中包含的单词。相比之下,词袋模型使用整个文档作为上下文,并使用(加权)计数来捕捉单词的共现关系,而不是预测向量。

早期使用的神经语言模型包括增加了计算复杂性的非线性隐藏层。Word2vec 及其扩展简化了体系结构,以便在大型数据集上进行训练(例如,维基百科包含超过二十亿个标记;有关前馈网络的详细信息,请参阅第十七章 深度学习)。

Word2vec 模型 – 大规模学习嵌入

Word2vec 模型是一个将文本语料库作为输入并输出该语料库中单词的一组嵌入向量的两层神经网络。有两种不同的架构可以使用浅层神经网络有效地学习单词向量,如下图所示:

  • Continuous-Bag-Of-WordsCBOW)模型使用上下文词向量的平均值作为输入来预测目标词,因此它们的顺序并不重要。CBOW 模型训练速度更快,对于频繁词汇来说稍微准确一些,但对不经常出现的单词关注较少。
  • Skip-GramSG)模型与之相反,使用目标词来预测从上下文中抽样的词。它在小数据集上效果很好,并且即使对于罕见的单词或短语也能找到良好的表示:


因此,Word2vec 模型接收一个嵌入向量作为输入,并与另一个嵌入向量计算点积。请注意,假设归一化向量,当向量相等时,点积被最大化(绝对值),当它们正交时被最小化。

然后使用反向传播来根据由任何分类错误造成的目标函数计算的损失来调整嵌入权重。在下一节中,我们将看到 Word2vec 如何计算损失。

训练通过将上下文窗口滑过文档进行,通常被分成句子。每次完整迭代整个语料库都被称为一个时代。根据数据,可能需要几十个时代才能使向量质量收敛。

从技术上讲,SG 模型已被证明可以因式分解包含相应单词和上下文对的点互信息的单词-上下文矩阵(请参阅 GitHub 上的参考文献)。

模型目标 – 简化 softmax

Word2vec 模型旨在预测一个单词,而这个单词可能是非常大的词汇表中的一个。神经网络通常使用 softmax 函数,该函数将任意数量的实值映射到相等数量的概率,以实现相应的多类目标,其中h指嵌入,v指输入向量,c是单词w的上下文:


然而,softmax 的复杂性随着类别数量的增加而增加,因为分母需要计算词汇表中所有单词的点积以标准化概率。Word2vec 模型通过使用 softmax 的简化版本或基于采样的方法(详见参考资料)来提高效率:

  • 分层 softmax 将词汇表组织为具有词作为叶节点的二叉树。到每个节点的唯一路径可用于计算单词概率。
  • 噪声对比估计 (NCE) 对上下文外的“噪声词”进行采样,并将多类任务近似为二元分类问题。随着样本数量的增加,NCE 的导数接近 softmax 梯度,但只要 25 个样本就能产生与 softmax 相似的收敛速度,速度快 45 倍。
  • 负采样 (NEG)省略了噪声词样本,以逼近 NCE 并直接最大化目标词的概率。因此,NEG 优化了嵌入向量的语义质量(相似用法的相似向量),而不是测试集上的准确性。然而,它可能对频率较低的单词产生比分层 softmax 目标更差的表示。

自动短语检测

预处理通常涉及短语检测,即识别常用在一起的标记,并应该接收单一向量表示(例如,纽约市,请参阅第十三章中关于 n-gram 的讨论,处理文本数据)。

原始的 Word2vec 作者使用了一种简单的提升评分方法,该方法将两个词w[i]w[j]标识为一个二元组,如果它们的联合出现相对于每个词的单独出现超过了给定阈值,通过一个修正因子δ校正:


评分器可以重复应用以识别连续更长的短语。

另一种选择是归一化的点间互信息分数,这种方法更准确,但计算成本更高。它使用了相对词频P(w),并在+1 和-1 之间变化:


如何评估嵌入向量 - 向量运算和类比

词袋模型创建反映标记在文档中存在和相关性的文档向量。潜在语义分析减少了这些向量的维度,并在此过程中识别了可被解释为潜在概念的内容。潜在狄利克雷分配将文档和术语都表示为包含潜在主题权重的向量。

词和短语向量的维度没有明确的含义。然而,嵌入在潜在空间中编码了相似用法,以一种体现在语义关系上的接近性的方式。这导致了有趣的性质,即类比可以通过添加和减去词向量来表达。

以下图显示了连接巴黎和法国的向量(即它们的嵌入之差)如何反映了首都关系。类似的关系,伦敦:英国,对应于相同的向量,即英国与通过将首都向量添加到伦敦得到的位置非常接近:


正如单词可以在不同的语境中使用一样,它们可以以不同的方式与其他单词相关联,而这些关系对应于潜在空间中的不同方向。因此,如果训练数据允许,嵌入应该反映出几种不同类型的类比关系。

Word2vec 的作者提供了一份涵盖地理、语法和句法以及家庭关系等多个方面的几千个关系的列表,用于评估嵌入向量的质量。如上所示,该测试验证了目标词(英国)最接近的是将代表类似关系(巴黎:法国)的向量添加到目标的补充(伦敦)后得到的结果。

以下图将在维基百科语料库上训练的 Word2vec 模型的最相关类比的 300 维嵌入,具有超过 20 亿标记,通过主成分分析PCA)投影到二维。从以下类别的超过 24,400 个类比的测试实现了超过 73.5% 的准确率(参见笔记本):


使用嵌入模型

与其他无监督学习技术类似,学习嵌入向量的目标是为其他任务生成特征,如文本分类或情感分析。

获取给定文档语料库的嵌入向量有几种选项:

  • 使用从通用大语料库(如维基百科或谷歌新闻)中学到的嵌入
  • 使用反映感兴趣领域的文档来训练自己的模型

对于后续的文本建模任务,内容越专业化、越不通用,第二种方法就越可取。然而,高质量的词向量需要大量数据,并且需要包含数亿字的信息性文档。

如何使用预训练的词向量

预训练词嵌入的几个来源。流行选项包括斯坦福的 GloVE 和 spaCy 的内置向量(有关详细信息,请参见笔记本 using_trained_vectors)。

GloVe - 用于词表示的全球向量

GloVe 是在斯坦福 NLP 实验室开发的无监督算法,它从聚合的全局词-词共现统计中学习单词的向量表示(请参阅参考文献)。可用于以下网络规模来源的预训练向量:

  • Common Crawl 共有 420 亿或 840 亿令牌和词汇表或 190 万或 220 万令牌。
  • Wikipedia 2014 + Gigaword 5,共有 60 亿令牌和 40 万令牌的词汇表。
  • 推特使用了 20 亿条推文,27 亿令牌和 120 万令牌的词汇表

我们可以使用 gensim 将矢量文本文件转换并加载到 KeyedVector 对象中:

from gensim.models import Word2vec, KeyedVectors
 from gensim.scripts.glove2Word2vec import glove2Word2vec
glove2Word2vec(glove_input_file=glove_file, Word2vec_output_file=w2v_file)
 model = KeyedVectors.load_Word2vec_format(w2v_file, binary=False)

Word2vec 作者提供了包含超过 24,000 个类比测试的文本文件,gensim 用于评估词向量。

在维基百科语料库上训练的词向量涵盖了所有类比,并在各个类别中达到了 75.5% 的总体准确率:

类别 样本 准确率 类别 样本 准确率
首都-普通国家 506 94.86% 比较级 1,332 88.21%
首都-世界 8,372 96.46% 最高级 1,056 74.62%
城市-州 4,242 60.00% 现在分词 1,056 69.98%
货币 752 17.42% 国籍形容词 1,640 92.50%
家庭 506 88.14% 过去时 1,560 61.15%
形容词到副词 992 22.58% 复数 1,332 78.08%
反义词 756 28.57% 复数动词 870 58.51%

常见爬网词嵌入的 10 万个最常见标记覆盖了约 80% 的类比,并以 78% 的略高准确率,而 Twitter 的词嵌入则仅覆盖了 25%,准确率为 62%。

Python 机器学习算法交易实用指南(五)(2)https://developer.aliyun.com/article/1523711

相关文章
|
18天前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
72 7
|
4月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
245 6
|
17天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
18天前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
25天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
|
26天前
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
55 9
Python与机器学习:使用Scikit-learn进行数据建模
|
21天前
|
人工智能 编解码 算法
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
483 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
2月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
69 14
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
解锁机器学习的新维度:元学习的算法与应用探秘
元学习作为一个重要的研究领域,正逐渐在多个应用领域展现其潜力。通过理解和应用元学习的基本算法,研究者可以更好地解决在样本不足或任务快速变化的情况下的学习问题。随着研究的深入,元学习有望在人工智能的未来发展中发挥更大的作用。

热门文章

最新文章