自然语言处理中的词嵌入技术:FastText详解

自然语言处理(NLP)领域,将文本数据转换为数值形式是至关重要的,因为计算机和机器学习模型只能处理数值数据。词嵌入是一种将单词表示为向量的有效方式,它为具有相似含义的单词提供相似的向量表示。本文将探讨FastText,这是一种提供字符n-gram嵌入的词嵌入技术,是word2vec模型的扩展。将学习FastText的工作原理以及如何在Gensim中训练模型,并简要介绍word2vec模型。

学习目标

本文旨在提供词嵌入模型的概览,清晰解释FastText词嵌入技术,并提供一个训练FastText模型的演示。

目录

  • 什么是NLP中的词嵌入
  • Word2Vec概览
  • 为什么选择FastText?
  • FastText的工作原理
  • FastText与Word2Vec的对比
  • 使用Gensim实现FastText

什么是NLP中的词嵌入

词嵌入是一种将单词以向量形式表示的方法。它为具有相似含义的单词提供相似的向量表示,帮助模型捕捉单词的语言含义。例如,考虑四个单词:板球、足球、山脉和海洋。在这些单词中,板球和足球是相关的,海洋和山脉是相关的,因此相关单词被赋予相似的向量表示。图1.1显示了板球和足球被放在一起,山脉和海洋也被放在一起。这有助于学习单词的语义含义。

如果是NLP初学者,推荐以下关于嵌入的文章列表: "从计数向量到Word2Vec的直观理解" "Word2Vec用于词嵌入 - 初学者指南"

一些流行的词嵌入技术包括Word2Vec、GloVe、FastText和ELMo。Word2vec和GloVe嵌入在单词级别上工作,而FastText和ELMo在字符和子词级别上工作。本文将研究FastText词嵌入技术。

什么是Word2Vec?

Word2Vec是一种将单词以向量形式表示的词嵌入技术。它接受整个语料库的单词,并在高维空间中为这些单词提供嵌入。Word2Vec模型还保持了单词的语义和句法关系。Word2Vec模型用于发现模型中单词之间的相关性。word2vec模型使用两种主要架构来计算向量:CBOW和Skip-gram。

CBOW方法中,给定上下文,预测目标词。如果给定一个句子并且缺少一个单词,模型必须预测缺失的单词。Skip-gram方法中,给定目标词,预测上下文词的概率。

为什么选择FastText?

像word2vec和GloVe这样的词嵌入技术为词汇表中的单词提供不同的向量表示。这导致了对语言内部结构的忽视。这对于形态丰富的语言来说是一个限制,因为它忽略了单词的句法关系。由于许多单词形态遵循形态丰富的语言中的规则,因此可以通过使用字符级信息来改进这些语言的向量表示。

为了改进形态丰富的语言的向量表示,FastText为字符n-gram提供嵌入,将单词表示为这些嵌入的平均值。它是word2vec模型的扩展。Word2Vec模型为单词提供嵌入,而FastText为字符n-gram提供嵌入。像word2vec模型一样,FastText使用CBOW和Skip-gram来计算向量。

FastText还可以处理词汇表外的单词,即FastText可以找到训练时不存在的单词嵌入。词汇表外的单词是在训练数据时不出现的单词,并且不在模型的词汇表中。像word2vec或GloVe这样的词嵌入模型不能为词汇表外的单词提供嵌入,因为它们为单词提供嵌入,因此如果出现新单词,它们不能提供嵌入。

由于FastText为字符n-gram提供嵌入,它可以为词汇表外的单词提供嵌入。如果出现词汇表外的单词,那么FastText通过嵌入其字符n-gram来提供该单词的嵌入。

FastText的工作原理

在FastText中,每个单词被表示为其字符n-gram的向量表示的平均值以及单词本身。考虑单词“equal”和n=3,那么单词将由字符n-gram表示:< eq, equ, qua, ual, al >< equal >。因此,单词‘equal’的词嵌入可以被给定为其所有字符n-gram和单词本身的所有向量表示的总和。

连续词袋(CBOW):在连续词袋(CBOW)中,取目标词的上下文作为输入,并预测上下文中出现的词。例如,在句子“想学习FastText。”中,单词“”、“想”、“学习”和“FastText”被作为输入,模型预测“学习”作为输出。所有输入和输出数据都在同一维度上,并且具有独热编码。它使用神经网络进行训练。神经网络有一个输入层、一个隐藏层和一个输出层。图1.2显示了CBOW的工作方式。

Skip-gram:Skip-gram的工作方式类似于CBOW,但输入是目标词,模型预测给定词的上下文。它也使用神经网络进行训练。图1.3显示了Skip-gram的工作方式。

FastText与Word2Vec的对比

FastText可以被视为word2vec的扩展。word2vec和fastText之间的一些显著差异如下:Word2Vec在单词级别上工作,而fastText在字符n-gram上工作。Word2Vec不能为词汇表外的单词提供嵌入,而FastText可以为OOV单词提供嵌入。FastText可以为形态丰富的语言提供比word2vec更好的嵌入。FastText使用层次分类器训练模型,因此它比word2vec更快。

本节解释了如何训练FastText模型。FastText模型在Gensim下可用,Gensim是一个Python库,用于主题建模、文档索引和大型语料库的相似性检索。本文中使用的数据集来自Kaggle的“Covid-19数据集上的词嵌入分析”。可以使用的数据集可以在这里访问。

第一步是导入必要的库并读取数据集,from gensim.models.phrases import Phrases, Phraser fromgensim.models import FastText import pandas as pd df = pd.read_csv('medical_dataset.csv') print(df.head())

为了从数据集中提取熟悉的短语和最有意义的n-gram,使用Gensim中的Phrases模型。sent = [row.split() for row in df['Text']] phrases = Phrases(sent, min_count = 30, progress_per = 10000) sentences = phrases[sent]

接下来是模型初始化和为模型构建词汇表。fastText模型的超参数如下,window: window size for the character n-grams that are to be considered before and after the target word min_count: minimal number of word occurrences min_n: minimum length of character n-gram max_n: maximum length of character n-gram

#Initializing the model model = FastText(size = 100, window = 5, min_count = 5, workers = 4, min_n = 1, max_n = 4) #Building Vocabulary model.build_vocab(sentences) print(len(model.wv.vocab.keys()))

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485