什么是词嵌入?
词嵌入定义
词嵌入是一种用于自然语言处理 (NLP) 的技术,用于将单词表示为数字,以便计算机可以处理它们。它是一种用于学习文本数字表示的常用方法。
因为机器在处理单词方面需要帮助,所以必须为每个单词分配一种数字格式,以便进行处理。这可以通过以下几种不同的方法来实现:
- 独热编码可为文本正文中的每个单词提供一个唯一的数字。这个数字会被转换成一个二进制矢量(使用 0 和 1),用来表示相应单词。
- 基于计数的表示法可统计单词在文本正文中出现的次数,并为其分配一个相应的矢量。
- SLIM 组合会结合使用这两种方法,以使计算机既能理解单词的含义,也能理解它们在文本中出现的频率。
词嵌入可创建一个高维空间,在其中每个单词都被分配一个数字稠密矢量(下文将详细介绍这一点)。然后,计算机可以使用这些矢量来理解单词之间的关系并做出预测。
词嵌入在自然语言处理中的工作原理
词嵌入在自然语言处理中的工作原理是,在高维空间(可能多达 1,000 个维度)中将单词表示为实数的稠密矢量。矢量化是将单词转化为数字矢量的过程。稠密矢量是指大多数条目都不为零的矢量。它与稀疏矢量(如独热编码)相反,稀疏矢量具有许多零条目。这个高维空间称为嵌入空间。
含义相似或在相似上下文中使用的单词会被分配相似的矢量,这意味着它们在嵌入空间中的位置彼此邻近。例如,“tea”(茶)和“coffee”(咖啡)是意思相似的词,他们的位置相近;而“tea”(茶)和“sea”(海)会相距较远,因为它们的含义不同,而且不经常一起使用,尽管它们的拼写相似。
虽然在自然语言处理中创建词嵌入的方法多种多样,但它们都涉及到基于大量的文本数据(称为语料库)进行训练。语料库可以有所不同;例如,维基百科和 Google News 就是两个用于进行预训练的嵌入语料库。
语料库也可以是一个定制嵌入层,在其他预训练语料库无法提供足够数据的情况下,可专门针对用例进行设计。在训练过程中,模型会根据相应数据中单词的使用模式,学习将每个单词与一个唯一的矢量关联起来。这些模型可用于将任何新文本数据中的单词转换为稠密矢量。
如何进行词嵌入?
词嵌入可以使用多种技术来实现。选用哪种技术取决于任务的具体要求。您必须考虑数据集的大小、数据的领域和语言的复杂性。以下是一些较流行的词嵌入技术的工作原理:
- Word2vec 是一种基于两层神经网络的算法;它的功能如同其名,输入的是文本语料库,输出的是一组矢量。一个常用的 Word2vec 示例是“King – Man + Woman = Queen”(国王 – 男人 + 女人 = 女王)。 通过推导“King”(国王)和“Man”(男人)之间以及“Man”(男人)和“Woman”(女人)之间的关系,该算法可以将“Queen”(女王)识别为“King”(国王)的适当对应词。 Word2vec 使用跳字模型 (Skip-Gram) 或连续词袋模型 (CBOW) 算法进行训练。跳字模型会尝试从目标单词中预测上下文单词。连续词袋模型的功能则与之相反,会使用目标单词周围的上下文来预测目标单词。
- GloVe(全局矢量)所基于的理念是:一个单词的含义可以通过它与文本语料库中其他单词的共现情况推断出来。这种算法会创建一个共现矩阵,用于捕获单词在语料库中一起出现的频率。
- fasText 是 Word2vec 模型的扩展;这种模型所基于的理念不是将单个单词输入神经网络,而是将单词表示为一组 n-grams(或子单词)。fasText 使用类似于跳字模型的模型,可捕获单词内部结构的信息,帮助它处理新的和不熟悉的词汇。
- ELMo(来自语言模型的嵌入)与上面提到的词嵌入技术不同,因为它采用的是深度神经网络来分析单词所在的整个上下文。这使得它能够发现其他嵌入技术可能无法捕捉到的含义上的细微差别。
- TF-IDF(词频 - 逆文档频率)是通过将词频 (TF) 与逆文档频率 (IDF) 相乘而得出的数学值。TF 是指文档中目标词的数量与文档中总词数的比率。IDF 是文档总数与包含目标词的文档数之比的对数。
词嵌入的优势有哪些?
在自然语言处理中,与传统的单词表示方法相比,词嵌入具有多种优势。词嵌入已成为 NLP 中的一种标准方法,有许多预训练的嵌入可用于各种应用程序。正是这种广泛的可用性,研究人员和开发人员能够更轻松地将其融入到自己的模型中,无需从头开始训练。
词嵌入已被用于改进语言建模(即预测文本序列中下一个单词的任务)。通过将单词表示为矢量,模型可以更好地捕获单词所在的上下文,并做出更准确的预测。
与传统的工程技术相比,词嵌入的构建速度更快,因为在大型文本数据语料库上训练神经网络的过程是无人监督的,从而节省了时间和精力。嵌入训练完成后,无需额外的特征工程,它就可以用作各种 NLP 任务的输入特征。
词嵌入的维度通常比独热编码的矢量要少得多。这意味着,它们在存储和处理数据方面需要的内存和计算资源会更少。因为词嵌入是单词的稠密矢量表示,所以相比稀疏矢量技术,它能更有效地表示单词。这也使得它能够更好地捕获单词之间的语义关系。
词嵌入的劣势有哪些?
虽然词嵌入有很多优势,但也有一些劣势值得考虑。
词嵌入训练的计算成本可能很高,尤其是在使用大型数据集或复杂模型时,这种情况更为明显。预训练的嵌入还可能需要大量的存储空间,这对于资源有限的应用程序来说可能是一个问题。词嵌入是基于有限词汇量进行训练的,这意味着,它们可能无法表示超出这个词汇量的单词。这对于词汇量较大的语言或应用程序专用的术语来说,可能也是一个问题。
如果词嵌入的数据输入包含偏见,则词嵌入可能会反映这些偏见。例如,词嵌入可能会编码性别、种族或其他刻板印象中的偏见,这可能会对使用这些词嵌入的现实世界情境产生影响。
词嵌入通常被认为是一个黑盒,因为它们的底层模型(例如 GloVe 或 Word2Vec 的神经网络)既复杂又难以解读。
词嵌入的好坏取决于其训练数据。重要的是,要确保数据足以让词嵌入在实践中使用。虽然词嵌入能领会单词之间的一般关系,但它们可能会错过某些人类的细微差别,比如反讽,而这些细微差别更难识别。
因为词嵌入会为每个单词分配一个矢量,所以在处理同形词(即拼写相同但含义不同的单词)时可能会遇到麻烦。(例如,单词“park”,既可指户外空间,也可指停车。)