FastText词嵌入的可视化指南

2024-06-21 08:48

本文主要是介绍FastText词嵌入的可视化指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Amit Chaudhary

编译:ronghuaiyang

导读

非常清楚的解释了FastText的来龙去脉。

单词嵌入是自然语言处理领域中最有趣的方面之一。当我第一次接触到它们时,对一堆文本进行无监督训练的简单方法产生了显示出语法和语义理解迹象的表示,这很有趣。

在这篇文章中,我们将探索由Bojanowski等人介绍的名为“FastText”的单词嵌入算法,并了解它是如何对2013年的Word2Vec算法进行增强的。

词表示的直觉

假设我们有下面的单词,我们想把它们表示成向量,这样它们就可以用于机器学习模型。

Ronaldo, Messi, Dicaprio

一个简单的想法是对单词进行独热编码,其中每个单词都有一个唯一的位置。


isRonaldoisMessiisDicaprio
Ronaldo100
Messi010
Dicaprio001

我们可以看到,这种稀疏表示没有捕捉到单词之间的任何关系,而且每个单词都是相互独立的。

也许我们可以做得更好。我们知道Ronaldo和Messi是足球运动员,而Dicaprio是演员。让我们使用我们的世界知识并创建手动特征来更好地表示这些单词。


isFootballerisActor
Ronaldo10
Messi10
Dicaprio01

这比之前的独热编码更好,因为相关的项在空间上更接近。

Related words closer in space

我们可以继续添加更多的方面作为维度来获得更细微的表示。


isFootballerisActorPopularityGenderHeightWeight
Ronaldo10
Messi10
Dicaprio01

但是为每个可能的单词手动这样做是不可扩展的。如果我们根据我们对单词之间关系的认知来设计特征,我们能在神经网络中复制同样的特征吗?

我们能让神经网络在大量的文本语料库中进行梳理并自动生成单词表示吗?

这就是研究词嵌入算法的目的。

Word2Vec回顾

2013年,Mikolov等提出了一种从大量非结构化文本数据中学习单词向量表示的有效方法。这篇论文从语义分布的角度实现了这个想法。

你可以通过这个单词和哪些单词在一起出现来了解这个单词 — J.R. Firth 1957

由于相似的单词出现在相似的上下文中,Mikolov等人利用这一观点制定了表征学习的两个任务。

第一种方法叫做“连续词包(Continuous Bag of Words)”,它预测相邻词的中心词。

第二项任务叫做“Skip-gram”,在这个任务中,我们给定中心词,预测上下文词。

Interactive example of skipgram method

学习到的表征具有有趣的特征,比如这个流行的例子,在这个例子中,对单词向量的算术运算似乎保留了意义。

Example of word analogy in word2vec

Word2Vec的局限性

虽然Word2Vec改变了NLP的游戏规则,我们将看到如何仍有一些改进的空间:

  • Out of Vocabulary(OOV)单词

    在Word2Vec中,需要为每个单词创建嵌入。因此,它不能处理任何在训练中没有遇到过的单词。例如,单词“tensor”和“flow”出现在Word2Vec的词汇表中。但是如果你试图嵌入复合单词“tensorflow”,你将会得到一个词汇表错误。

Example of out of vocab words
  • 形态学:对于词根相同的单词,如“eat”和“eaten”,Word2Vec没有任何的参数共享。每个单词都是根据上下文来学习的。因此,可以利用单词的内部结构来提高这个过程的效率。

Words that have shared radicals

FastText

为了解决上述挑战,Bojanowski等提出了一种新的嵌入方法FastText。他们的关键见解是利用单词的内部结构来改进从skip-gram法获得的向量表示。

对skip-gram法进行如下修正:

1. Sub-word生成

对于一个单词,我们生成长度为3到6的n-grams表示。

  • 我们取一个单词并添加尖括号来表示单词的开始和结束

Adding angular bracket to a word
  • 然后生成长度n的n-grams。例如,对于单词“eating”,从尖括号开始到尖括号结束滑动3个字符的窗口,可以生成长度为3个字符的n-grams。在这里,我们每次将窗口移动一步。

    Interactive example of generating 3-grams

  • 这样,我们就得到了一个单词的n-grams的列表。

3-character n-grams of a word eating

不同长度的字符n-grams的例子如下:

WordLength(n)Character n-grams
eating3<ea, eat, ati, tin, ing, ng>
eating4<eat, eati, atin, ting, ing>
eating5<eati, eatin, ating, ting>
eating6<eatin, eating, ating>

  • 由于存在大量的唯一的n-grams,我们应用哈希来限制内存需求。我们不是学习每个唯一的n-grams的嵌入,而是学习一个总的B嵌入,其中B表示存储桶的大小。文章中用的桶的大小为200万。

    Hash dictionary to store n-grams

    每个字符n-gram被散列到1到b之间的整数,尽管这可能会导致冲突,但它有助于控制词汇表的大小。本文使用Fowler-Noll-Vo散列函数的FNV-1a变体将字符序列散列为整数值。

Hashing function for a n-gram

2. 使用负采样的Skip-gram

为了理解预训练,让我们以一个简单的玩具为例。我们有一个中心词是“eating”的句子,需要预测上下文中的词“am”和“food”。

Skip-gram with window size of 1

1、首先,中心词的嵌入是通过取字符n-grams的向量和整个词本身来计算的。

Summing n-grams with word vector

2、对于实际的上下文单词,我们直接从嵌入表示中获取它们的单词向量,不需要加上n-grams。

Example of context words

3、现在,我们随机采集负样本,使用与unigram频率的平方根成正比的概率。对于一个实际的上下文词,将抽样5个随机的负样本单词。

Example of negative context words

4、我们在中心词和实际上下文词之间取点积,并应用sigmoid函数来得到0到1之间的匹配分数。

5、基于这种损失,我们使用SGD优化器更新嵌入向量,使实际上下文词更接近中心词,同时增加了与负样本的距离。

Goal of negative sampling in skip-gram

论文中的直觉

  • 对于形态丰富的语言(如捷克语和德语),FastText显著提高了句法词类比任务的性能。


word2vec-skipgramword2vec-cbowfasttext
Czech52.855.077.8
German44.545.056.4
English70.169.974.9
Italian51.551.862.7


  • 与Word2Vec相比,FastText降低了语义类比任务的性能。

Example of semantic analogy


word2vec-skipgramword2vec-cbowfasttext
Czech25.727.627.5
German66.566.862.3
English78.578.277.8
Italian52.354.752.3

  • FastText比常规的skipgram慢1.5倍,因为增加了n-grams的开销。

  • 在单词相似度任务中,使用带有字符ngrams的sub-word信息比CBOW和skip-gram基线具有更好的性能。用子词求和的方法表示词外词比用空向量表示具有更好的性能。



    skipgramcbowfasttext(null OOV)fasttext(char-ngrams for OOV)
    ArabicWS35351525455

    GUR35061626470
    GermanGUR6578788181

    ZG22235384144
    EnglishRW43434647

    WS35372737171
    SpanishWS35357585859
    FrenchRG6570697575
    RomanianWS35348525154
    RussianHJ69606066

实现

要训练自己的嵌入,可以使用官方CLI工具或使用fasttext实现。

157种语言在Common Crawl和Wikipedia的预训练词向量:https://fasttext.cc/docs/en/crawl-vectors.html,各种英语的词向量:https://fasttext.cc/docs/en/english-vectors.html。

—END—

英文原文:https://amitness.com/2020/06/fasttext-embeddings/#intuition-on-word-representations

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧

这篇关于FastText词嵌入的可视化指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080753

相关文章

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶