Image Source: https://causewriter.ai/courses/ai-explainers/lessons/vector-embedding/
我将先容根本知识,并为您供应清晰的路线图,以帮助您理解这些模型如何接管和处理繁芜的人类措辞天下。
想象一下考试测验利用大略的图片来表达一个繁芜的想法。嵌入的功能类似,但具有数值。它们将繁芜的文本数据转换为更大略的数字表示,而不会丢失信息的实质。在 NLP 中,这可以通过将单词、句子乃至全体文档转换为表示它们的关系和含义的数值向量(数字集)来实现。

嵌入就像许多 NLP 任务的秘密武器。它们许可算法实行任务,例如通过将文本转换为数字来准确比较单词和句子的相似性。文本分类、情绪剖析和机器翻译等运用程序依赖于此功能。从根本上来说,由于嵌入,打算机能够阅读和理解人类措辞。
嵌入的类型:从单一热点到情境化One-Hot 编码:NLP 中嵌入的旅程从最大略的形式(称为 one-hot 编码)开始,个中每个单词都表示为一个充满零的向量,除了词汇表中与该单词相对应的位置中的一个 1 之外。然而,这种方法有其局限性,紧张是无法捕获单词之间的语义关系。Source: https://towardsdatascience.com/encoding-categorical-variables-one-hot-vs-dummy-encoding-6d5b9c46e2db
为理解决这些限定,人们开拓了更高等的嵌入类型。预演习的嵌入(例如 Word2Vec 和 GloVe)能够通过利用大数据中的共现来捕获单词含义和关系。只管向前迈出了一大步,但这些模型无法理解不同句子中利用的单词的高下文。
现在涌现了高下文嵌入,这是最前辈的嵌入技能,例如 BERT、OpenAI 和其他LLMs产生的技能。这些模型通过考虑单词涌现的完全高下文,许可基于单词周围的文本动态表示单词。由于这项技能在各种任务中的运用,NLP 系统的性能显著提高。
In the latest embedding models each token string gets a token ID, and these token IDs are turned embedded token vectors. Source: https://www.lesswrong.com/posts/pHPmMGEMYefk9jLeh/llm-basics-embedding-spaces-transformer-token-vectors-are
嵌入如何捕捉意义嵌入的魅力在于它们能够以机器可读的办法捕获单词和句子的核心含义。通过广泛的文本分析,嵌入可以获取反响现实天下单词利用情形的关系和模式。
例如,在类似情形下利用的单词将具有靠近在一起的向量空间嵌入。 2 个嵌入向量的靠近度意味着单词或句子都属于相似的种别或具有良好的相似性。通过利用这种技能,嵌入可以提高算法对措辞的理解,从同义词和反义词到类比等繁芜的联系。
import numpy as npimport matplotlib.pyplot as pltfrom sklearn.decomposition import PCAfrom gensim.models import KeyedVectorsimport gensim.downloader as api# Load a pre-trained word2vec modelmodel = api.load("word2vec-google-news-300")# Function to convert words to vectorsdef word_to_vector(word): if word in model: return model[word] else: print(f"Word '{word}' not in vocabulary!") return None# Example wordswords = ["king", "queen", "man", "woman", "apple", "banana"]# Convert words to vectorsword_vectors = {word: word_to_vector(word) for word in words}# Extract vectors for PCAvectors = np.array([vector for vector in word_vectors.values() if vector is not None])# Perform PCA to reduce dimensions to 2 for visualizationpca = PCA(n_components=2)reduced_vectors = pca.fit_transform(vectors)# Plot the words in 2D spaceplt.figure(figsize=(10, 7))for word, (x, y) in zip(word_vectors.keys(), reduced_vectors): plt.scatter(x, y) plt.text(x + 0.01, y + 0.01, word, fontsize=12)plt.title("Word Embeddings Visualization")plt.xlabel("PCA Component 1")plt.ylabel("PCA Component 2")plt.grid(True)plt.show()
上面的代码打印所有四个单词的向量:
“国王”的向量:[ 0.50451 0.68607 -0.59517 -0.022801 0.60046 -0.13498 -0.08813 0.47377 -0.61798 -0.31012 ]…“女王”的向量:[ 0.37854 1.8233 -1.2648 -0.1043 0.35829 0.60029 -0.17538 0.83767 -0.056798 -0.75795 ]…“苹果”的矢量:[ 0.52042 -0.8314 0.49961 1.2893 0.1151 0.057521 -1.3753 -0.97313 0.18346 0.47672 ]…‘喷鼻香蕉’的向量:[-0.25522 -0.75249 -0.86655 1.1197 0.12887 1.0121 -0.57249 -0.36224 0.44341 -0.12211]…这些向量可以在图表中可视化以显示它们的关系。例如,“国王”和“女王”会更靠近,就像“苹果”和“喷鼻香蕉”一样,表明它们的语义相似性。
Source: https://www.linkedin.com/pulse/everything-you-need-know-embeddings-backbone-llms-ibad-rehman-4dkce/?trackingId=uXyWPGL4Qxyi7RPShSL5Lg%3D%3D
“king”和“queen”向量位于一个位置,而“banana”和“apple”向量位于另一位置。鉴于这是一个二维图形,并且这些向量存在于更多维度,它可能无法解释任何事情。例如,尺寸范围从 768 到 1024。让我们再看一个场景。
Source: https://twitter.com/akshay_pachaar/status/1760282755022155914/photo/1
只管“国王”、“女王”和“男人”、“女人”的向量不具有相同的值,但它们存在于相似的平面中,如赤色和绿色箭头的位置所示。简而言之,“Woman”的向量 w.r.t. “女王”与“男人”的向量极其相似。 '国王'。
接下来是最好的部分。假设我们现在处于嵌入空间中。
在上面的嵌入空间中,如果我们知道男人的向量相对付女人的间隔和方向,我们可以利用相同的间隔和方向来找到国王的向量相对付女王的位置。
这些经由适当演习的嵌入的向量算术过程会产生捕获这些关系的结果。正由于如此,嵌入非常强大且神奇!
NLP 嵌入的最新进展
嵌入的演化不断发展的自然措辞处理(NLP)领域经历了从静态嵌入到动态嵌入的显著转变。起初,嵌入是静态的,这意味着利用单个恒定向量来表示每个单词,与其高下文无关。
这种方法有缺点,由于它无法充分捕捉单词在不同环境中的许多不同含义。然而,动态嵌入的引入标志着一个重大变革。这些更新的模型可以更深入地理解措辞的繁芜性,这些模型供应了考虑单词高下文的表示。
打破性模型:BERT、GPT 及其他NLP 最大的发展之一是引入了 BERT(来自 Transformers 的双向编码器表示)和 GPT 等模型。 BERT 通过双向(从左到右和从右到左)阅读文本改变了机器理解人类措辞的办法,供应了更完全的高下文知识。另一方面,GPT 通过产生类似人类的相应,进一步打破了界线,展示了大型措辞模型在天生连贯且高下文干系的文本方面的力量。这些模型提高了自然措辞处理的可能性,显著改进了文本分类、情绪剖析和机器翻译等任务。
Source: https://tinkerd.net/blog/machine-learning/bert-embeddings/
# pip install transformers && pip install torchfrom transformers import DistilBertTokenizerFast, DistilBertModeltokenizer = DistilBertTokenizerFast.from_pretrained("distilbert-base-uncased")tokens = tokenizer.encode('This is a input.', return_tensors='pt')print("These are tokens!", tokens)for token in tokens[0]: print("This are decoded tokens!", tokenizer.decode([token]))model = DistilBertModel.from_pretrained("distilbert-base-uncased")print(model.embeddings.word_embeddings(tokens))for e in model.embeddings.word_embeddings(tokens)[0]: print("This is an embedding!", e)
Transformer 的架构彻底改变了 NLP 中的嵌入。 Transformers 管理数据序列的能力及其把稳力过程,使模型能够天生专注于文本最干系部分的嵌入。这使得嵌入的质量和实用性显著提高,现在可以捕获文本内更深层的语义和联系。 Transformer 设计对嵌入产生了重大影响,不仅提高了 NLP 任务的性能,还为理解和天生人类措辞开辟了新的可能性。
嵌入如何有助于演习大型措辞模型嵌入是大型措辞模型的支柱嵌入在措辞模型的架构中发挥着重要浸染。嵌入将高维数据(例如措辞的词汇)简化为低维空间。这不仅简化了数据,而且保持了其语义和语法的同等性。
Source: https://vaclavkosar.com/images/transformer-architecture-tokens-vs-embeddings.drawio.svg
嵌入帮助模型理解单词之间的繁芜关系,准确捕获它们的含义和利用它们的高下文。真正的魔力在于这些代表单词的密集向量如何将相似的单词放在嵌入空间中更靠近,从而供应相似性的数值度量。这一根本步骤对付开拓能够以极高的准确性理解和天生人类措辞的前辈模型至关主要。
扩大规模:演习具有数十亿参数的模型随着措辞模型变得越来越繁芜,它们须要越来越多的参数。最新模型拥有数十亿个参数,既代表着潜力,也代表着寻衅。利用预先演习的嵌入是办理这些问题的好方法。通过在大量文本数据集上利用预先演习的嵌入,模型可以避免从一开始就创建这些表示的打算困难和数据密集的过程。这不仅加快了演习过程,而且使模型从一开始就能够彻底理解措辞的繁芜性。因此,这些预先演习的嵌入充当了坚实的根本,许可模型通过额外的演习来修正和调度这些向量,并进行扩展以知足人类措辞的深度和繁芜性。
在 NLP 中利用嵌入的最佳实践为您的任务选择精确的嵌入类型每个嵌入模型都有自己的优点和缺陷,使得该领域变得丰富多样。例如,某些嵌入善于捕捉措辞的高下文奇妙之处,这使得它们非常适宜情绪剖析或机器翻译等须要深入理解短语构造和含义的运用。有些可能更善于表达单个单词,这对付关键字提取或文本分类等任务特殊有帮助。
Source: https://www.linkedin.com/pulse/mastering-art-embeddings-how-choose-right-model-eduardo-ordax-njlnf/
以下是一个细分,可帮助您根据须要决定利用哪种模型。
词袋 (BoW)利用韶光:您须要一种大略快速的文本表示方法。非常适宜高下文不主要的小型数据集。运用领域:文本分类、文档相似度。TF-IDF(词频-逆文档频率)利用韶光:您须要捕获文档中单词相对付语料库的主要性。最适宜术语频率很主要的情形。运用领域:信息检索、文本分类、关键词提取。词向量利用韶光:您须要有效的词嵌入来捕获单词之间的语义关系。适用于较大的数据集。运用领域:相似性任务、聚类、文本分类。GloVe(用于词表示的全局向量)利用韶光:您须要嵌入来捕获全局单词共现统计数据。适宜大型语料库。运用领域:语义相似性任务,信息检索。快速文本利用韶光:您须要可以处理词汇表外单词和子词信息的嵌入。对付形态丰富的措辞很有用。运用领域:文本分类、情绪剖析、措辞建模。ELMo(措辞模型的嵌入)利用韶光:您须要根据高下文捕获繁芜的单词含义。适宜须要深入理解高下文的任务。运用领域:命名实体识别、情绪剖析、共指消解。COVE(高下文向量)利用韶光:您须要利用机器翻译模型来获取高下文信息的嵌入。适宜须要句子级高下文的任务。运用领域:文本分类、情绪剖析、机器翻译。BERT(来自 Transformers 的双向编码器表示)利用韶光:您须要考虑全体句子高下文的最前辈的高下文嵌入。非常适宜各种 NLP 任务。运用领域:问答、文本分类、命名实体识别、情绪剖析。ALBERT(精简版 BERT)利用韶光:您须要一个更轻、更高效的 BERT 版本。适用于类似的运用程序,但资源有限。运用领域:与 BERT 类似,但效率有所提高。GPT(天生式预演习变压器)利用韶光:您须要天生类似人类的文本,并且须要强大的高下文理解。适宜天生性任务。运用领域:文本天生、对话式人工智能、措辞建模。Cohere(和其他高等变压器模型)利用韶光:您须要具有专业功能的高度前辈的高下文嵌入。适宜前沿的 NLP 运用。运用领域:广泛的 NLP 任务,包括但不限于 BERT 和 GPT 模型支持的任务。Source: https://zilliz.com/blog/choosing-the-right-embedding-model-for-your-data
上面是 Hugging Face 上可用的顶级嵌入模型的列表,下面是如何利用它们的代码。
import torchfrom sentence_transformers import SentenceTransformer# Initialize torch settingstorch.backends.cudnn.deterministic = TrueDEVICE = torch.device('cuda:3' if torch.cuda.is_available() else 'cpu')# Load the model from huggingface.model_name = "WhereIsAI/UAE-Large-V1" # Just change model_name to use a different model!encoder = SentenceTransformer(model_name, device=DEVICE)# Get the model parameters and save for later.EMBEDDING_DIM = encoder.get_sentence_embedding_dimension()MAX_SEQ_LENGTH_IN_TOKENS = encoder.get_max_seq_length()# Print model parameters.print(f"model_name: {model_name}")print(f"EMBEDDING_DIM: {EMBEDDING_DIM}")print(f"MAX_SEQ_LENGTH: {MAX_SEQ_LENGTH_IN_TOKENS}")
针对特定运用微调预演习嵌入
预演习嵌入通过供应坚实的根本而供应了巨大的上风,特殊是对付 NLP 新手来说。这些嵌入经由大型文本文档的演习,包含丰富的措辞专业知识,可以立即运用于您的项目。然而,为了充分发挥其潜力,微调是必要的。该技能涉及修正预先演习的嵌入,以更好地匹配运用程序的特定特色和哀求。
微调可以通过自定义嵌入来捕获特定于您的领域的词汇、高下文和细微差别,从而提高 NLP 模型的性能。这可能包括在与您的行业干系的特天命据集上演习嵌入,或定制演习程序以突出对您的运用程序主要的措辞利用的特定特色。通过投入精力进行微调,您可以将通用嵌入转化为强大的工具,推动 NLP 项目取获胜利。
未来我们可以期待什么?随着自然措辞处理(NLP)的发展,下一代嵌入有望带来更前辈、更全面的模型。随着嵌入的快速发展,我们可以期望它不仅能够捕获措辞的语义和句法细节,还能捕获诸如实际剖析和谈论等附加维度。
Generated by GPT-4o
未来的嵌入可能会利用更前辈的神经网络架构,将多模式输入(例如文本与视觉或音频信息)相结合,以产生更丰富、更彻底的措辞表示。此外,正在进行的研究试图提高嵌入模型的可扩展性和效率,使它们在更广泛的运用和行业中更有用
办理嵌入演习中的道德问题拥有权利的同时也被授予了重大的任务。随着嵌入的强度和遍及度不断增强,办理嵌入开拓和运用中的道德问题变得越来越主要。确保嵌入不会强化或增加演习数据中的偏差是最主要的问题之一。不公正和歧视性的结果可能是由有偏见的嵌入造成的,特殊是在司法工具或招聘算法等敏感运用中。用于识别和减少嵌入偏差的方法正受到研究职员和从业者的更多关注,以确保这些模型支持多样性和公正性。此外,在开拓嵌入模型时,人们越来越关注问责制和透明度,这促进了最佳实践的采取,使道德问题与技能性能同等主要。