精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從簡單計(jì)數(shù)到多模態(tài):嵌入技術(shù)的演變與應(yīng)用 原創(chuàng) 精華

發(fā)布于 2025-4-30 10:43
瀏覽
0收藏

在自然語言處理(NLP)的浩瀚宇宙中,嵌入技術(shù)(Embedding)無疑是其中最閃耀的星辰之一。從最初的簡單計(jì)數(shù)方法,到如今的多模態(tài)深度學(xué)習(xí)模型,嵌入技術(shù)的演進(jìn)不僅推動(dòng)了 NLP 的發(fā)展,也為我們理解和處理語言提供了全新的視角。今天,就讓我們一起踏上這場奇妙的旅程,探索 14 種定義嵌入技術(shù)演進(jìn)的強(qiáng)大方法!

從簡單計(jì)數(shù)到多模態(tài):嵌入技術(shù)的演變與應(yīng)用-AI.x社區(qū)

一、初窺門徑:基礎(chǔ)的嵌入方法

(一)計(jì)數(shù)向量器(Count Vectorizer)

在 NLP 的世界里,一切都要從最基礎(chǔ)的計(jì)數(shù)開始。計(jì)數(shù)向量器(Count Vectorizer)是一種簡單而直觀的文本嵌入方法。它通過統(tǒng)計(jì)每個(gè)單詞在文本中出現(xiàn)的次數(shù),將文本轉(zhuǎn)換為向量形式。

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd

# 示例文本
documents = ["cat sits here", "dog barks loud", "cat barks loud"]

# 初始化 CountVectorizer
vectorizer = CountVectorizer(binary=True)

# 擬合并轉(zhuǎn)換文本數(shù)據(jù)
X = vectorizer.fit_transform(documents)

# 獲取特征名稱(唯一單詞)
feature_names = vectorizer.get_feature_names_out()

# 轉(zhuǎn)換為 DataFrame 以便更好地可視化
df = pd.DataFrame(X.toarray(), columns=feature_names)

# 打印獨(dú)熱編碼矩陣
print(df)

輸出:

cat  barks  dog  here  loud  sits
0    1      0    0     1     0     1
1    0      1    1     0     1     0
2    1      1    0     0     1     0

這種方法的優(yōu)點(diǎn)在于簡單易懂,實(shí)現(xiàn)起來幾乎沒有難度。但它也有明顯的缺點(diǎn):向量維度會(huì)隨著詞匯量的增加而迅速膨脹,而且無法捕捉單詞之間的語義關(guān)系。不過,對(duì)于一些簡單的任務(wù),比如垃圾郵件檢測,計(jì)數(shù)向量器仍然能發(fā)揮重要作用。

(二)獨(dú)熱編碼(One-Hot Encoding)

獨(dú)熱編碼是另一種基礎(chǔ)的嵌入方法。它將每個(gè)單詞表示為一個(gè)獨(dú)熱向量,即在詞匯表中,某個(gè)單詞對(duì)應(yīng)的維度為 1,其余維度為 0。

from sklearn.preprocessing import OneHotEncoder

# 示例單詞
words = ["cat", "dog", "barks", "loud"]

# 初始化獨(dú)熱編碼器
encoder = OneHotEncoder(sparse=False)

# 擬合并轉(zhuǎn)換
encoded_words = encoder.fit_transform([[word] for word in words])

# 轉(zhuǎn)換為 DataFrame 以便更好地可視化
df_onehot = pd.DataFrame(encoded_words, columns=encoder.get_feature_names_out(['word']))

# 打印獨(dú)熱編碼矩陣
print(df_onehot)

輸出:

word_cat  word_dog  word_barks  word_loud
0       1.0       0.0         0.0        0.0
1       0.0       1.0         0.0        0.0
2       0.0       0.0         1.0        0.0
3       0.0       0.0         0.0        1.0

從簡單計(jì)數(shù)到多模態(tài):嵌入技術(shù)的演變與應(yīng)用-AI.x社區(qū)

獨(dú)熱編碼的優(yōu)點(diǎn)在于清晰明了,每個(gè)單詞都有一個(gè)獨(dú)一無二的表示,不會(huì)出現(xiàn)重疊。但它最大的問題是效率低下,尤其是在面對(duì)大型詞匯表時(shí),向量會(huì)變得極其稀疏。而且,它也無法捕捉單詞之間的語義相似性。

(三)TF-IDF(詞頻-逆文檔頻率)

TF-IDF 是一種經(jīng)典的文本嵌入方法,它在 20 世紀(jì) 70 年代被提出,至今仍然是信息檢索系統(tǒng)和文本挖掘應(yīng)用中的基石。TF-IDF 通過計(jì)算單詞在文檔中的頻率(TF)和在整個(gè)語料庫中的逆文檔頻率(IDF),為每個(gè)單詞賦予一個(gè)權(quán)重。最終的 TF-IDF 分?jǐn)?shù)是 TF 和 IDF 的乘積。

from sklearn.feature_extraction.text import TfidfVectorizer

# 示例文本
documents = ["cat sits here", "dog barks loud", "cat barks loud"]

# 初始化 TfidfVectorizer
vectorizer = TfidfVectorizer()

# 擬合并轉(zhuǎn)換文本數(shù)據(jù)
X = vectorizer.fit_transform(documents)

# 獲取特征名稱(唯一單詞)
feature_names = vectorizer.get_feature_names_out()

# 轉(zhuǎn)換為 DataFrame 以便更好地可視化
df_tfidf = pd.DataFrame(X.toarray(), columns=feature_names)

# 打印 TF-IDF 矩陣
print(df_tfidf)

輸出:

cat  barks  dog  here  loud  sits
0  0.5  0.0   0.0  0.5   0.0   0.5
1  0.0  0.7   0.7  0.0   0.7   0.0
2  0.5  0.7   0.0  0.0   0.7   0.0

TF-IDF 的優(yōu)點(diǎn)在于能夠增強(qiáng)單詞的重要性,并且可以減少維度。但它也有不足之處:盡管進(jìn)行了加權(quán),但最終的向量仍然是稀疏的,而且它無法捕捉單詞的順序或更深層次的語義關(guān)系。

從簡單計(jì)數(shù)到多模態(tài):嵌入技術(shù)的演變與應(yīng)用-AI.x社區(qū)

二、進(jìn)階之路:基于統(tǒng)計(jì)和機(jī)器學(xué)習(xí)的嵌入方法

(四)Okapi BM25

Okapi BM25 是一種概率模型,主要用于信息檢索系統(tǒng)中的文檔排名。它是 TF-IDF 的改進(jìn)版本,考慮了文檔長度歸一化和詞頻飽和度(即重復(fù)單詞的邊際效應(yīng)遞減)。BM25 引入了兩個(gè)參數(shù) k1 和 b,分別用于調(diào)整詞頻飽和度和文檔長度歸一化。

import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer

# 示例文檔
documents = ["cat sits here", "dog barks loud", "cat barks loud"]

# 計(jì)算詞頻(TF)
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)
tf_matrix = X.toarray()
feature_names = vectorizer.get_feature_names_out()

# 計(jì)算逆文檔頻率(IDF)
N = len(documents)  # 文檔總數(shù)
df = np.sum(tf_matrix > 0, axis=0)  # 每個(gè)詞的文檔頻率
idf = np.log((N - df + 0.5) / (df + 0.5) + 1)  # BM25 IDF 公式

# 計(jì)算 BM25 分?jǐn)?shù)
k1 = 1.5  # 平滑參數(shù)
b = 0.75  # 長度歸一化參數(shù)
avgdl = np.mean([len(doc.split()) for doc in documents])  # 平均文檔長度
doc_lengths = np.array([len(doc.split()) for doc in documents])
bm25_matrix = np.zeros_like(tf_matrix, dtype=np.float64)

for i in range(N):  # 遍歷每個(gè)文檔
    for j in range(len(feature_names)):  # 遍歷每個(gè)詞
        term_freq = tf_matrix[i, j]
        num = term_freq * (k1 + 1)
        denom = term_freq + k1 * (1 - b + b * (doc_lengths[i] / avgdl))
        bm25_matrix[i, j] = idf[j] * (num / denom)

# 轉(zhuǎn)換為 DataFrame 以便更好地可視化
df_bm25 = pd.DataFrame(bm25_matrix, columns=feature_names)

# 打印 BM25 分?jǐn)?shù)矩陣
print(df_bm25)

輸出:

cat  barks  dog  here  loud  sits
0  0.6  0.0   0.0  0.6   0.0   0.6
1  0.0  0.8   0.8  0.0   0.8   0.0
2  0.6  0.8   0.0  0.0   0.8   0.0

從簡單計(jì)數(shù)到多模態(tài):嵌入技術(shù)的演變與應(yīng)用-AI.x社區(qū)

BM25 的優(yōu)勢在于能夠更好地處理文檔長度和詞頻飽和度問題。但它并不是一種真正的嵌入方法,因?yàn)樗皇菍?duì)文檔進(jìn)行評(píng)分,而不是生成連續(xù)的向量空間表示。此外,它對(duì)參數(shù)的調(diào)整非常敏感,需要仔細(xì)調(diào)優(yōu)才能達(dá)到最佳性能。

(五)Word2Vec(CBOW 和 Skip-gram)

2013 年,Google 推出了 Word2Vec,這一模型徹底改變了 NLP 的格局。Word2Vec 通過訓(xùn)練淺層神經(jīng)網(wǎng)絡(luò),學(xué)習(xí)單詞的密集、低維向量表示,從而捕捉單詞之間的語義和語法關(guān)系。Word2Vec 有兩種架構(gòu):連續(xù)詞袋模型(CBOW)和 Skip-gram。

from gensim.models import Word2Vec

# 示例語料庫
sentences = [
    ["I", "love", "deep", "learning"],
    ["Natural", "language", "processing", "is", "fun"],
    ["Word2Vec", "is", "a", "great", "tool"],
    ["AI", "is", "the", "future"],
]

# 訓(xùn)練 CBOW 模型
cbow_model = Word2Vec(sentences, vector_size=10, window=2, min_count=1, sg=0)  # CBOW

# 訓(xùn)練 Skip-gram 模型
skipgram_model = Word2Vec(sentences, vector_size=10, window=2, min_count=1, sg=1)  # Skip-gram

# 獲取單詞向量
word = "is"
print(f"CBOW Vector for '{word}':\n", cbow_model.wv[word])
print(f"\nSkip-gram Vector for '{word}':\n", skipgram_model.wv[word])

# 獲取最相似的單詞
print("\nCBOW Most Similar Words:", cbow_model.wv.most_similar(word))
print("\nSkip-gram Most Similar Words:", skipgram_model.wv.most_similar(word))

輸出:

CBOW Vector for 'is':
 [0.123, 0.456, 0.789, ...]

Skip-gram Vector for 'is':
 [0.987, 0.654, 0.321, ...]

CBOW Most Similar Words: [('learning', 0.85), ('fun', 0.80)]
Skip-gram Most Similar Words: [('tool', 0.90), ('future', 0.88)]

從簡單計(jì)數(shù)到多模態(tài):嵌入技術(shù)的演變與應(yīng)用-AI.x社區(qū)

從簡單計(jì)數(shù)到多模態(tài):嵌入技術(shù)的演變與應(yīng)用-AI.x社區(qū)

Word2Vec 的優(yōu)點(diǎn)在于能夠?qū)W習(xí)到單詞之間的語義關(guān)系,例如 “king” 減去 “man” 加上 “woman” 約等于 “queen”。它還可以在大規(guī)模語料庫上快速訓(xùn)練,并生成密集的向量表示,便于后續(xù)處理。

然而,Word2Vec 也有局限性。它為每個(gè)單詞提供一個(gè)固定的嵌入,無法根據(jù)上下文動(dòng)態(tài)調(diào)整。此外,它也無法區(qū)分多義詞在不同上下文中的不同含義。

(六)GloVe(全局向量詞表示)

2014 年,斯坦福大學(xué)推出了 GloVe,它在 Word2Vec 的基礎(chǔ)上進(jìn)行了改進(jìn),結(jié)合了全局共現(xiàn)統(tǒng)計(jì)信息和局部上下文信息。GloVe 通過構(gòu)建一個(gè)矩陣來捕捉單詞對(duì)在整個(gè)語料庫中共同出現(xiàn)的頻率,然后通過矩陣分解來生成單詞向量。

import gensim.downloader as api

# 加載預(yù)訓(xùn)練的 GloVe 模型
glove_model = api.load("glove-wiki-gigaword-50")  # 也可以使用 "glove-twitter-25", "glove-wiki-gigaword-100" 等

# 示例單詞
word = "king"
print(f"Vector representation for '{word}':\n", glove_model[word])

# 查找相似單詞
similar_words = glove_model.most_similar(word, topn=5)
print("\nWords similar to 'king':", similar_words)

# 計(jì)算單詞相似度
word1 = "king"
word2 = "queen"
similarity = glove_model.similarity(word1, word2)
print(f"Similarity between '{word1}' and '{word2}': {similarity:.4f}")

輸出:

Vector representation for 'king':
 [0.123, 0.456, 0.789, ...]

Words similar to 'king': [('queen', 0.85), ('prince', 0.80), ('monarch', 0.78), ...]

Similarity between 'king' and 'queen': 0.85

從簡單計(jì)數(shù)到多模態(tài):嵌入技術(shù)的演變與應(yīng)用-AI.x社區(qū)

GloVe 的優(yōu)點(diǎn)在于它使用整個(gè)語料庫的統(tǒng)計(jì)信息來改進(jìn)表示,并且通常能夠生成更穩(wěn)定的嵌入。但它的缺點(diǎn)是構(gòu)建和分解大型矩陣需要大量的計(jì)算資源,而且它仍然無法生成上下文相關(guān)的嵌入。

從簡單計(jì)數(shù)到多模態(tài):嵌入技術(shù)的演變與應(yīng)用-AI.x社區(qū)

(七)FastText

2016 年,F(xiàn)acebook 推出了 FastText,它在 Word2Vec 的基礎(chǔ)上引入了子詞(字符 n-gram)信息。這種方法通過將單詞分解為更小的單元,幫助模型更好地處理罕見單詞和形態(tài)豐富的語言。

import gensim.downloader as api

# 加載預(yù)訓(xùn)練的 FastText 模型
fasttext_model = api.load("fasttext-wiki-news-subwords-300")

# 示例單詞
word = "king"
print(f"Vector representation for '{word}':\n", fasttext_model[word])

# 查找相似單詞
similar_words = fasttext_model.most_similar(word, topn=5)
print("\nWords similar to 'king':", similar_words)

# 計(jì)算單詞相似度
word1 = "king"
word2 = "queen"
similarity = fasttext_model.similarity(word1, word2)
print(f"Similarity between '{word1}' and '{word2}': {similarity:.4f}")

輸出:

Vector representation for 'king':
 [0.123, 0.456, 0.789, ...]

Words similar to 'king': [('queen', 0.85), ('prince', 0.80), ('monarch', 0.78), ...]

Similarity between 'king' and 'queen': 0.85

FastText 的優(yōu)點(diǎn)在于能夠處理罕見單詞和形態(tài)豐富的語言,并且可以更好地泛化到類似的單詞形式。但它的缺點(diǎn)是增加了計(jì)算復(fù)雜度,并且仍然無法根據(jù)上下文動(dòng)態(tài)調(diào)整嵌入。

(八)Doc2Vec

Doc2Vec 是 Word2Vec 的擴(kuò)展,它將 Word2Vec 的思想應(yīng)用到更大的文本片段,如句子、段落或整篇文檔。Doc2Vec 提供了一種方法,可以將可變長度的文本轉(zhuǎn)換為固定長度的向量表示,從而更有效地進(jìn)行文檔分類、聚類和檢索。

import gensim
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
import nltk

nltk.download('punkt')

# 示例文檔
documents = [
    "Machine learning is amazing",
    "Natural language processing enables AI to understand text",
    "Deep learning advances artificial intelligence",
    "Word embeddings improve NLP tasks",
    "Doc2Vec is an extension of Word2Vec"
]

# 分詞并標(biāo)記文檔
tagged_data = [TaggedDocument(words=nltk.word_tokenize(doc.lower()), tags=[str(i)]) for i, doc in enumerate(documents)]

# 打印標(biāo)記后的數(shù)據(jù)
print(tagged_data)

# 定義模型參數(shù)
model = Doc2Vec(vector_size=50, window=2, min_count=1, workers=4, epochs=100)

# 構(gòu)建詞匯表
model.build_vocab(tagged_data)

# 訓(xùn)練模型
model.train(tagged_data, total_examples=model.corpus_count, epochs=model.epochs)

# 測試文檔的向量表示
test_doc = "Artificial intelligence uses machine learning"
test_vector = model.infer_vector(nltk.word_tokenize(test_doc.lower()))
print(f"Vector representation of test document:\n{test_vector}")

# 查找與測試文檔最相似的文檔
similar_docs = model.dv.most_similar([test_vector], topn=3)
print("Most similar documents:")
for tag, score in similar_docs:
    print(f"Document {tag} - Similarity Score: {score:.4f}")

輸出:

Most similar documents:
Document 0 - Similarity Score: 0.85
Document 1 - Similarity Score: 0.80
Document 2 - Similarity Score: 0.78

Doc2Vec 的優(yōu)點(diǎn)在于能夠有效地捕捉文檔的主題和上下文信息,并且可以應(yīng)用于多種任務(wù),如推薦系統(tǒng)、聚類和總結(jié)。但它的缺點(diǎn)是需要大量的數(shù)據(jù)和仔細(xì)的調(diào)整才能生成高質(zhì)量的文檔向量,并且每個(gè)文檔的表示是固定的,無法根據(jù)內(nèi)容的內(nèi)部變化進(jìn)行調(diào)整。

三、深度探索:基于深度學(xué)習(xí)的嵌入方法

(九)InferSent

2017 年,F(xiàn)acebook 推出了 InferSent,這是一種通過在自然語言推理(NLI)數(shù)據(jù)集上進(jìn)行監(jiān)督學(xué)習(xí)來生成高質(zhì)量句子嵌入的方法。InferSent 的目標(biāo)是捕捉句子級(jí)別的語義細(xì)微差別,使其在語義相似性和文本蘊(yùn)含等任務(wù)中表現(xiàn)出色。

InferSent 使用雙向 LSTM 來處理句子,從兩個(gè)方向捕捉上下文信息。通過監(jiān)督學(xué)習(xí),InferSent 能夠?qū)⒄Z義相似的句子在向量空間中拉得更近,從而提高在情感分析和釋義檢測等任務(wù)中的性能。

# 由于 InferSent 的實(shí)現(xiàn)較為復(fù)雜,建議參考以下 Kaggle Notebook 進(jìn)行實(shí)現(xiàn):
# https://www.kaggle.com/code/jeffd23/infer-sent-implementation

InferSent 的優(yōu)點(diǎn)在于能夠提供深度、上下文豐富的句子嵌入,并且在語義推理任務(wù)中表現(xiàn)優(yōu)異。但它的缺點(diǎn)是需要大量的標(biāo)注數(shù)據(jù)進(jìn)行訓(xùn)練,并且計(jì)算資源需求較高。

(十)Universal Sentence Encoder(USE)

2018 年,Google 推出了 Universal Sentence Encoder(USE),這是一種用于生成高質(zhì)量、通用句子嵌入的模型。USE 的目標(biāo)是在各種 NLP 任務(wù)中表現(xiàn)出色,而無需進(jìn)行大量的微調(diào)。它可以通過 Transformer 架構(gòu)或深度平均網(wǎng)絡(luò)(DAN)來編碼句子。

import tensorflow_hub as hub
import tensorflow as tf
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# 加載模型
embed = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")
print("USE model loaded successfully!")

# 示例句子
sentences = [
    "Machine learning is fun.",
    "Artificial intelligence and machine learning are related.",
    "I love playing football.",
    "Deep learning is a subset of machine learning."
]

# 獲取句子嵌入
embeddings = embed(sentences)
embeddings_np = embeddings.numpy()

# 打印嵌入形狀和第一個(gè)句子的嵌入(截?cái)啵?print(f"Embedding shape: {embeddings_np.shape}")
print(f"First sentence embedding (truncated):\n{embeddings_np[0][:10]} ...")

# 計(jì)算兩兩余弦相似度
similarity_matrix = cosine_similarity(embeddings_np)
similarity_df = pd.DataFrame(similarity_matrix, index=sentences, columns=sentences)
print("\nSentence Similarity Matrix:\n")
print(similarity_df.round(2))

# 可視化句子嵌入(PCA 降維)
pca = PCA(n_compnotallow=2)
reduced = pca.fit_transform(embeddings_np)

plt.figure(figsize=(8, 6))
plt.scatter(reduced[:, 0], reduced[:, 1], color='blue')
for i, sentence in enumerate(sentences):
    plt.annotate(f"Sentence {i+1}", (reduced[i, 0]+0.01, reduced[i, 1]+0.01))
plt.title("Sentence Embeddings (PCA projection)")
plt.xlabel("PCA 1")
plt.ylabel("PCA 2")
plt.grid(True)
plt.show()

輸出:

Embedding shape: (4, 512)
First sentence embedding (truncated):
[0.123, 0.456, 0.789, ...] ...

Sentence Similarity Matrix:
Machine learning is fun.                     1.00  0.85  0.20  0.30
Artificial intelligence and machine learning are related.  0.85  1.00  0.25  0.35
I love playing football.                     0.20  0.25  1.00  0.15
Deep learning is a subset of machine learning.  0.30  0.35  0.15  1.00

USE 的優(yōu)點(diǎn)在于它的通用性和易用性,無需進(jìn)行大量的任務(wù)特定調(diào)整即可在多種應(yīng)用中發(fā)揮作用。但它的缺點(diǎn)是生成的句子嵌入是固定的,無法根據(jù)不同的上下文動(dòng)態(tài)調(diào)整,并且某些變體的模型較大,可能會(huì)影響在資源受限環(huán)境中的部署。

(十一)Node2Vec

Node2Vec 是一種用于學(xué)習(xí)圖結(jié)構(gòu)中節(jié)點(diǎn)嵌入的方法,雖然它本身并不是一種文本表示方法,但在涉及網(wǎng)絡(luò)或圖數(shù)據(jù)的 NLP 任務(wù)中,如社交網(wǎng)絡(luò)或知識(shí)圖譜,它得到了越來越多的應(yīng)用。

Node2Vec 通過在圖上執(zhí)行有偏隨機(jī)游走來生成節(jié)點(diǎn)序列,然后使用類似 Word2Vec 的策略來學(xué)習(xí)低維節(jié)點(diǎn)嵌入。這種方法能夠有效地捕捉圖的局部和全局結(jié)構(gòu)。

import networkx as nx
import numpy as np
from node2vec import Node2Vec
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# 創(chuàng)建一個(gè)簡單的圖
G = nx.karate_club_graph()  # 一個(gè)著名的測試圖,包含 34 個(gè)節(jié)點(diǎn)

# 可視化原始圖
plt.figure(figsize=(6, 6))
nx.draw(G, with_labels=True, node_color='skyblue', edge_color='gray', node_size=500)
plt.title("Original Karate Club Graph")
plt.show()

# 初始化 Node2Vec 模型
node2vec = Node2Vec(G, dimensinotallow=64, walk_length=30, num_walks=200, workers=2)

# 訓(xùn)練模型(底層使用 Word2Vec)
model = node2vec.fit(window=10, min_count=1, batch_words=4)

# 獲取某個(gè)節(jié)點(diǎn)的嵌入
node_id = 0
vector = model.wv[str(node_id)]  # 注意:節(jié)點(diǎn) ID 以字符串形式存儲(chǔ)
print(f"Embedding for node {node_id}:\n{vector[:10]}...")  # 截?cái)囡@示

# 獲取所有嵌入
node_ids = model.wv.index_to_key
embeddings = np.array([model.wv[node] for node in node_ids])

# 降維到 2D
pca = PCA(n_compnotallow=2)
reduced = pca.fit_transform(embeddings)

# 可視化嵌入
plt.figure(figsize=(8, 6))
plt.scatter(reduced[:, 0], reduced[:, 1], color='orange')
for i, node in enumerate(node_ids):
    plt.annotate(node, (reduced[i, 0] + 0.05, reduced[i, 1] + 0.05))
plt.title("Node2Vec Embeddings (PCA Projection)")
plt.xlabel("PCA 1")
plt.ylabel("PCA 2")
plt.grid(True)
plt.show()

# 查找與節(jié)點(diǎn) 0 最相似的節(jié)點(diǎn)
similar_nodes = model.wv.most_similar(str(0), topn=5)
print("Nodes most similar to node 0:")
for node, score in similar_nodes:
    print(f"Node {node} → Similarity Score: {score:.4f}")

輸出:

Embedding for node 0:
[0.123, 0.456, 0.789, ...]

Nodes most similar to node 0:
Node 1 → Similarity Score: 0.85
Node 2 → Similarity Score: 0.80
Node 3 → Similarity Score: 0.78

Node2Vec 的優(yōu)點(diǎn)在于能夠捕捉圖結(jié)構(gòu)中的豐富關(guān)系信息,并且可以應(yīng)用于任何圖結(jié)構(gòu)數(shù)據(jù)。但它的缺點(diǎn)是對(duì)于非圖結(jié)構(gòu)的文本數(shù)據(jù)不太適用,并且嵌入的質(zhì)量對(duì)隨機(jī)游走的參數(shù)非常敏感。

(十二)ELMo(語言模型嵌入)

2018 年,艾倫人工智能研究所推出了 ELMo,這是一種突破性的方法,能夠提供深度上下文化的單詞表示。與早期的模型不同,ELMo 為每個(gè)單詞生成動(dòng)態(tài)嵌入,這些嵌入會(huì)根據(jù)句子的上下文發(fā)生變化,從而捕捉語法和語義的細(xì)微差別。

ELMo 使用雙向 LSTM 來處理文本,從兩個(gè)方向捕捉完整的上下文信息。它通過結(jié)合神經(jīng)網(wǎng)絡(luò)的多層表示,每層捕捉語言的不同方面,從而實(shí)現(xiàn)這一目標(biāo)。

# ELMo 的實(shí)現(xiàn)較為復(fù)雜,建議參考以下文章進(jìn)行實(shí)現(xiàn):
# https://www.geeksforgeeks.org/elmo-embeddings-in-python/

ELMo 的優(yōu)點(diǎn)在于它能夠根據(jù)上下文動(dòng)態(tài)調(diào)整單詞嵌入,并且在情感分析、問答和機(jī)器翻譯等多種任務(wù)中提高了性能。但它的缺點(diǎn)是計(jì)算資源需求較高,并且實(shí)現(xiàn)和調(diào)整相對(duì)復(fù)雜。

(十三)BERT 及其變體

BERT(雙向編碼器表示)是 Google 在 2018 年推出的一種基于 Transformer 的架構(gòu),它通過捕捉雙向上下文徹底改變了 NLP 的格局。BERT 的出現(xiàn)使得模型能夠同時(shí)考慮每個(gè)單詞的左側(cè)和右側(cè)上下文,從而在問答、情感分析和命名實(shí)體識(shí)別等任務(wù)中表現(xiàn)出色。

BERT 的工作機(jī)制基于 Transformer 架構(gòu),它使用自注意力機(jī)制同時(shí)捕捉句子中所有單詞之間的依賴關(guān)系。BERT 在預(yù)訓(xùn)練過程中隨機(jī)掩蓋某些單詞,然后根據(jù)上下文預(yù)測這些單詞,從而學(xué)習(xí)雙向上下文。此外,BERT 還通過訓(xùn)練句子對(duì)來預(yù)測一個(gè)句子是否邏輯上跟隨另一個(gè)句子,從而捕捉句子之間的關(guān)系。

from transformers import AutoTokenizer, AutoModel
import torch

# 輸入句子
sentence = "Natural Language Processing is transforming how machines understand humans."

# 選擇設(shè)備(如果有 GPU 則使用 GPU)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 加載 BERT 模型
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name).to(device)
model.eval()

# 分詞
inputs = tokenizer(sentence, return_tensors='pt', truncatinotallow=True, padding=True).to(device)

# 前向傳播獲取嵌入
with torch.no_grad():
    outputs = model(**inputs)

# 獲取單詞嵌入
token_embeddings = outputs.last_hidden_state  # (batch_size, seq_len, hidden_size)

# 通過平均池化獲取句子嵌入
sentence_embedding = torch.mean(token_embeddings, dim=1)
print(f"Sentence embedding from {model_name}:")
print(sentence_embedding)

輸出:

Sentence embedding from bert-base-uncased:
tensor([[ 0.1234,  0.5678, -0.9012,  ...,  0.3456, -0.7890,  0.1111]])

BERT 的優(yōu)點(diǎn)在于它能夠生成更豐富、更細(xì)致的單詞表示,并且可以通過少量的微調(diào)應(yīng)用于各種下游任務(wù)。但它的缺點(diǎn)是計(jì)算資源需求高,模型參數(shù)多,部署在資源受限的環(huán)境中可能會(huì)有困難。

(十四)CLIP 和 BLIP

CLIP 和 BLIP 是現(xiàn)代多模態(tài)模型的代表,它們將文本和視覺數(shù)據(jù)結(jié)合起來,為涉及語言和圖像的任務(wù)提供了強(qiáng)大的支持。這些模型在圖像搜索、圖像描述和視覺問答等應(yīng)用中發(fā)揮著重要作用。

CLIP 通過在大規(guī)模圖像-文本對(duì)數(shù)據(jù)集上進(jìn)行對(duì)比學(xué)習(xí),將圖像嵌入和對(duì)應(yīng)的文本嵌入對(duì)齊到一個(gè)共享的向量空間中。而 BLIP 則通過引導(dǎo)式訓(xùn)練方法進(jìn)一步優(yōu)化語言和視覺之間的對(duì)齊。

from transformers import CLIPProcessor, CLIPModel
from PIL import Image
import torch
import requests

# 加載模型和處理器
clip_model_name = "openai/clip-vit-base-patch32"
clip_model = CLIPModel.from_pretrained(clip_model_name).to(device)
clip_processor = CLIPProcessor.from_pretrained(clip_model_name)

# 加載示例圖像和文本
image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/datasets/cat_style_layout.png"
image = Image.open(requests.get(image_url, stream=True).raw).convert("RGB")
text = "a cute puppy"

# 預(yù)處理輸入
inputs = clip_processor(text=[text], images=image, return_tensors="pt", padding=True).to(device)

# 獲取文本和圖像嵌入
with torch.no_grad():
    text_embeddings = clip_model.get_text_features(input_ids=inputs["input_ids"])
    image_embeddings = clip_model.get_image_features(pixel_values=inputs["pixel_values"])

# 歸一化嵌入(可選)
text_embeddings = text_embeddings / text_embeddings.norm(dim=-1, keepdim=True)
image_embeddings = image_embeddings / image_embeddings.norm(dim=-1, keepdim=True)

print("Text Embedding Shape (CLIP):", text_embeddings.shape)
print("Image Embedding Shape (CLIP):", image_embeddings.shape)

輸出:

Text Embedding Shape (CLIP): torch.Size([1, 512])
Image Embedding Shape (CLIP): torch.Size([1, 512])

CLIP 和 BLIP 的優(yōu)點(diǎn)在于它們能夠提供跨模態(tài)的強(qiáng)大表示,并且在多模態(tài)任務(wù)中表現(xiàn)出色。但它們的缺點(diǎn)是訓(xùn)練需要大量的配對(duì)數(shù)據(jù),并且計(jì)算資源需求極高。

四、綜合對(duì)比

序號(hào)

嵌入方法

類型

模型架構(gòu)/方法

常見用途

1

Count Vectorizer

無上下文依賴,無機(jī)器學(xué)習(xí)

基于計(jì)數(shù)(詞袋模型)

搜索、聊天機(jī)器人、語義相似性中的句子嵌入

2

One-Hot Encoding

無上下文依賴,無機(jī)器學(xué)習(xí)

手動(dòng)編碼

基線模型、基于規(guī)則的系統(tǒng)

3

TF-IDF

無上下文依賴,無機(jī)器學(xué)習(xí)

計(jì)數(shù) + 逆文檔頻率

文檔排名、文本相似性、關(guān)鍵詞提取

4

Okapi BM25

無上下文依賴,統(tǒng)計(jì)排名

概率信息檢索模型

搜索引擎、信息檢索

5

Word2Vec(CBOW、SG)

無上下文依賴,基于機(jī)器學(xué)習(xí)

淺層神經(jīng)網(wǎng)絡(luò)

情感分析、單詞相似性、NLP 流水線

6

GloVe

無上下文依賴,基于機(jī)器學(xué)習(xí)

全局共現(xiàn)矩陣 + 機(jī)器學(xué)習(xí)

單詞相似性、嵌入初始化

7

FastText

無上下文依賴,基于機(jī)器學(xué)習(xí)

Word2Vec + 子詞嵌入

豐富的形態(tài)語言、處理未登錄詞

8

Doc2Vec

無上下文依賴,基于機(jī)器學(xué)習(xí)

Word2Vec 的文檔擴(kuò)展

文檔分類、聚類

9

InferSent

有上下文依賴,基于 RNN

帶監(jiān)督學(xué)習(xí)的雙向 LSTM

語義相似性、自然語言推理任務(wù)

10

Universal Sentence Encoder

有上下文依賴,基于 Transformer

Transformer / 深度平均網(wǎng)絡(luò)(DAN)

搜索、聊天機(jī)器人、語義相似性中的句子嵌入

11

Node2Vec

基于圖的嵌入

隨機(jī)游走 + Skipgram

圖表示、推薦系統(tǒng)、鏈接預(yù)測

12

ELMo

有上下文依賴,基于 RNN

雙向 LSTM

命名實(shí)體識(shí)別、問答、共指消解

13

BERT 及其變體

有上下文依賴,基于 Transformer

問答、情感分析、總結(jié)、語義搜索

問答、情感分析、總結(jié)、語義搜索

14

CLIP

多模態(tài),基于 Transformer

視覺 + 文本編碼器(對(duì)比學(xué)習(xí))

圖像描述、跨模態(tài)搜索、文本到圖像檢索

15

BLIP

多模態(tài),基于 Transformer

視覺 - 語言預(yù)訓(xùn)練(VLP)

圖像描述、視覺問答(VQA)

五、總結(jié)與展望

從基礎(chǔ)的計(jì)數(shù)方法到如今的多模態(tài)深度學(xué)習(xí)模型,嵌入技術(shù)的演進(jìn)歷程充滿了創(chuàng)新和突破。每一種方法都有其獨(dú)特的優(yōu)勢和局限性,它們?cè)诓煌娜蝿?wù)和場景中發(fā)揮著重要作用。

在實(shí)際應(yīng)用中,選擇合適的嵌入技術(shù)至關(guān)重要。如果你正在構(gòu)建一個(gè)簡單的聊天機(jī)器人,計(jì)數(shù)向量器或 TF-IDF 可能就足夠了;如果你需要處理復(fù)雜的語義任務(wù),BERT 或其變體可能是更好的選擇;而如果你需要處理多模態(tài)數(shù)據(jù),CLIP 和 BLIP 則是不可或缺的工具。

隨著技術(shù)的不斷發(fā)展,嵌入技術(shù)也在不斷進(jìn)化。未來,我們可以期待更高效、更智能的嵌入模型出現(xiàn),它們將能夠更好地理解和處理人類語言,為自然語言處理領(lǐng)域帶來更多的可能性。

在這個(gè)充滿挑戰(zhàn)和機(jī)遇的時(shí)代,讓我們一起探索嵌入技術(shù)的無限可能,用向量的力量點(diǎn)亮語言智能的未來!


本文轉(zhuǎn)載自公眾號(hào)Halo咯咯    作者:基咯咯

原文鏈接:??https://mp.weixin.qq.com/s/3PQcxLgkri4zYqDtA8YxIg??


?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
男女啪啪免费观看| 91天堂在线视频| 国产高潮呻吟久久| 粉嫩一区二区三区在线观看| 一区二区三区中文字幕| 精品中文字幕一区| 亚洲中文字幕在线观看| 好看的日韩av电影| 国产亚洲一区精品| 又大又长粗又爽又黄少妇视频| 男人天堂视频在线观看| 国产精品久久久久久久裸模| 亚洲综合自拍一区| 久久久久久无码午夜精品直播| 亚洲国产一成人久久精品| 亚洲加勒比久久88色综合 | 麻豆传媒视频在线观看免费| 懂色中文一区二区在线播放| 国产精品激情av电影在线观看 | 男生女生差差差的视频在线观看| 久久99国产精品免费| 性色av一区二区三区红粉影视| 调教驯服丰满美艳麻麻在线视频| 97se亚洲| 91精品在线免费| 粉嫩虎白女毛片人体| 欧美aaaxxxx做受视频| 国产精品女同互慰在线看 | 波多野结衣在线观看一区二区三区| 91精品中文字幕一区二区三区| 久久久久久久久久久免费视频| 女人天堂av在线播放| 亚洲欧洲性图库| 日本一区免费看| 农村少妇久久久久久久| 国产麻豆精品视频| 国产免费亚洲高清| 精品一区二区无码| 麻豆精品网站| 欧美在线视频一二三| 国产小视频在线观看免费| 我不卡手机影院| 中文字幕日本欧美| 97在线观看免费视频| 色愁久久久久久| 亚洲а∨天堂久久精品9966| 午夜性福利视频| 麻豆视频久久| 欧美一二三四区在线| 三级av免费观看| 97精品国产99久久久久久免费| 色综合激情五月| 国产成人久久婷婷精品流白浆| free性m.freesex欧美| 亚洲成av人片www| 给我免费播放片在线观看| 超碰免费在线播放| 综合欧美亚洲日本| 欧美日韩中文字幕在线播放 | 综合av第一页| 2021狠狠干| 中文字幕有码在线观看| 亚洲乱码中文字幕综合| 欧美激情亚洲天堂| 俺来俺也去www色在线观看| 亚洲午夜av在线| 国产精品50p| 欧美黄色网页| 欧美日韩免费高清一区色橹橹| 五月婷婷六月丁香激情| 成人污版视频| 精品裸体舞一区二区三区| 久草视频福利在线| 九九久久精品| 日韩在线视频观看| 欧美日韩免费做爰视频| 一本久久综合| 国产成人一区二区| 97超碰资源站| www.日本不卡| 天堂av一区二区| 国产黄色在线观看| 精品电影在线观看| 性欧美videossex精品| 综合久久av| 亚洲第一区中文字幕| 扒开jk护士狂揉免费| 色狮一区二区三区四区视频| 九九精品在线观看| 中文字幕在线观看视频网站| 蜜臀av一区二区在线观看| 亚洲一区二区中文字幕| 四虎精品在永久在线观看 | 在线观看日本一区| 男女免费观看在线爽爽爽视频| 精品久久中文字幕| 亚洲欧美日韩精品一区| 欧美三级午夜理伦三级在线观看 | 国产精品精品软件男同| 伊人久久大香线蕉综合热线| 欧美一区二区影院| 国产乱码精品一区二区三区精东 | 国产精品裸体一区二区三区| 国产资源在线观看| 亚洲国产另类精品专区| 国产一二三区av| 国产一区在线电影| 久久偷看各类女兵18女厕嘘嘘| 在线看成人av| 国产精品一区免费在线观看| 区一区二区三区中文字幕| 欧美hdxxxxx| 宅男在线国产精品| 中文字幕第4页| 1000部精品久久久久久久久| 国产美女扒开尿口久久久| 午夜一区在线观看| 亚洲激情欧美激情| 中文字幕 日韩 欧美| 香蕉人人精品| 韩剧1988免费观看全集| 国产女人高潮时对白| 欧美国产激情一区二区三区蜜月| 成年女人18级毛片毛片免费| 国产一区二区三区免费在线| 中文字幕国产日韩| 婷婷激情五月综合| 91蜜桃视频在线| 免费看国产曰批40分钟| 一区二区网站| 欧美成人在线网站| 国产精品久久久久久久成人午夜| 国产欧美日韩另类一区| 欧美成人精品欧美一级乱| 国产精品久久久久av蜜臀| 欧美成人精品影院| 国产精品高潮呻吟久久久| 中文在线免费一区三区高中清不卡| 国产精品333| 群体交乱之放荡娇妻一区二区| 欧美日韩国产91| www.久久久久久| 一区二区在线观看免费视频播放| www.成人黄色| 亚洲一级淫片| 91国产在线播放| 日韩欧美一起| 亚洲精品在线一区二区| 国产网站在线看| 不卡区在线中文字幕| 黄页免费在线观看视频| 久久综合五月婷婷| 2019中文在线观看| 日韩大片b站免费观看直播| 色综合婷婷久久| 亚洲精品国产精品国自产网站| 日本中文字幕一区二区有限公司| 日韩一区二区电影在线观看| 欧美黄色成人| 久热99视频在线观看| www.国产黄色| 午夜精品久久久久久久99樱桃| 男人网站在线观看| 噜噜噜91成人网| 亚洲第一综合| 五月婷婷丁香在线| 99视频热这里只有精品免费| av无码久久久久久不卡网站| 欧美在线关看| 国产成人精品久久二区二区91| 国产九九在线| 欧美妇女性影城| 欧美三根一起进三p| 成人黄色在线看| 国产视频一区二区视频| 欧美xxxxx视频| 97超碰在线播放| 中文在线а√在线8| 中文字幕少妇一区二区三区| 国产免费一区二区三区最新不卡| 亚洲午夜精品网| 国产精品国产三级国产专业不| 国产在线不卡一区| 精品欧美一区免费观看α√| 欧美日韩中字| 动漫精品视频| 国产一区二区主播在线| 欧美成人亚洲成人| 涩爱av在线播放一区二区| 欧美性大战久久久久久久蜜臀| 极品久久久久久| 久久综合狠狠综合久久综合88| 色乱码一区二区三区在线| 在线观看亚洲| 亚洲美女搞黄| 亚洲第一福利社区| 97在线电影| 免费在线观看一区| 久久久久久午夜| 在线视频自拍| 日韩精品在线播放| 国产av无码专区亚洲a∨毛片| 欧美性高潮床叫视频| 欧美卡一卡二卡三| 日本一区二区三区国色天香| 永久免费未满蜜桃| 精品一区二区三区在线视频| 日日摸日日碰夜夜爽av| 欧美精品一卡| 一区二区三区四区五区视频 | 日韩欧美国产精品一区| 免费无码国产精品| 亚洲国产精品嫩草影院| 黄色精品视频在线观看| 2017欧美狠狠色| 韩国一区二区三区四区| 精品一区精品二区高清| 精品免费国产一区二区| 日韩一区二区久久| 欧美另类videosbestsex日本| 日本一二区不卡| 免费久久久一本精品久久区| 999久久久精品一区二区| 国产在线98福利播放视频| 免费观看亚洲| 2021国产精品视频| 91视频欧美| 欧美日韩国产91| 影院在线观看全集免费观看| www国产亚洲精品久久网站| 成人动漫在线播放| 亚洲欧美国产精品| 日韩精品福利| 国产丝袜高跟一区| 婷婷五月综合激情| 亚洲国产精品成人va在线观看| 超碰在线观看99| 欧美一级片免费看| 国产高清免费在线观看| 日韩欧美亚洲国产另类| av网站在线免费看| 91精品国模一区二区三区| 国产精品久久欧美久久一区| 欧美日本一道本在线视频| 亚洲性在线观看| 欧美日韩精品专区| 国产永久免费视频| 欧美一区二区三区免费观看视频 | 亚洲欧洲免费视频| 黄色影院在线播放| 国产亚洲激情在线| 岛国最新视频免费在线观看| 国产亚洲精品一区二区| yjizz视频网站在线播放| 有码中文亚洲精品| 18视频免费网址在线观看| 深夜福利亚洲导航| 超碰人人在线| 国内精久久久久久久久久人| segui88久久综合9999| 2019亚洲日韩新视频| japanese23hdxxxx日韩| 国产精品小说在线| 国产精品白丝久久av网站| 国产不卡一区二区在线观看| 黄色美女久久久| 欧洲av一区| 99久久亚洲精品| 中文精品无码中文字幕无码专区| 亚洲欧洲综合| 国产视频在线视频| 国产一区二区福利| 日本三级日本三级日本三级极| 久久综合色天天久久综合图片| 日韩一级av毛片| 亚洲品质自拍视频| 日韩成人高清视频| 在线视频国内一区二区| 91欧美日韩麻豆精品| 精品国产一区二区在线观看| 日本福利片高清在线观看| 色妞久久福利网| 超碰在线cao| 国产乱肥老妇国产一区二 | 国产大片中文字幕| 色网站国产精品| 国产男女裸体做爰爽爽| 亚洲欧美国产一区二区三区| 麻豆系列在线观看| 欧美亚洲另类在线| 国产精品久久久久久久久久久久久久久 | 久久色中文字幕| 99久久久免费精品| 欧美性猛交xxxx久久久| 中文字幕乱码视频| 亚洲国产精品久久| 美女羞羞视频在线观看| 欧美亚洲视频在线观看| 国产午夜亚洲精品一级在线| 久久久久久久免费| 国产一区视频在线观看免费| 日日碰狠狠丁香久燥| 成人免费毛片片v| 日韩一卡二卡在线观看| 欧美日韩在线免费| 亚洲国产精品久久人人爱潘金莲| 一区二区三区四区视频| 九色porny自拍视频在线播放| 亚洲r级在线观看| 欧美日韩激情在线一区二区三区| 亚洲精品无码国产| 国产一区二区不卡在线| 毛片久久久久久| 色狠狠一区二区| 日批视频免费播放| 欧美成人精品一区二区三区| 欧美一区=区三区| 日本不卡在线播放| 亚洲欧美春色| 国产 xxxx| 亚洲一卡二卡三卡四卡| 国产精品视频在线观看免费| 亚洲无线码在线一区观看| av漫画网站在线观看| 91精品国产综合久久久久久丝袜| 日本久久精品| 五月婷婷激情久久| 国产午夜精品一区二区三区视频 | 大胸美女被爆操| 色婷婷av一区二区三区之一色屋| 日韩在线视频第一页| 欧美国产日韩精品| 538任你躁精品视频网免费| 公共露出暴露狂另类av| 久久国产三级精品| 免费看一级黄色| 欧美亚洲愉拍一区二区| 成人在线视频成人| 国产精品亚洲自拍| 98精品视频| 日本一二三四区视频| 18欧美乱大交hd1984| 88av在线视频| 欧美超级乱淫片喷水| 日韩精品一区国产| 黄色网在线视频| 波多野洁衣一区| yjizz国产| 亚洲一区av在线播放| 成人网ww555视频免费看| 色一情一乱一伦一区二区三区丨| 天堂va蜜桃一区二区三区漫画版| 老头老太做爰xxx视频| 欧美日韩专区在线| 嫩草在线视频| 99精彩视频| 亚洲国产一区二区三区a毛片 | 手机看片福利日韩| 国产精品你懂的在线欣赏| 伊人久久一区二区| 美女视频久久黄| 欧美18xxxx| 一级在线免费视频| 一区二区三区不卡视频| 色一情一乱一乱一区91av| 青青久久aⅴ北条麻妃| 日韩大片在线| 日本黄色大片在线观看| 精品福利视频导航| av免费在线一区二区三区| 91丝袜美腿美女视频网站| 好吊视频一区二区三区四区| 一出一进一爽一粗一大视频| 欧美性高清videossexo| 久久大胆人体| 日韩av大全| 国产激情一区二区三区四区| 尤物视频在线观看国产| 伊人伊人伊人久久| 在线日韩成人| 蜜臀久久99精品久久久酒店新书| 亚洲欧洲精品成人久久奇米网| 丰满岳乱妇国产精品一区| 国产91色在线免费| 女人香蕉久久**毛片精品| 国产精品无码午夜福利| 欧美精品vⅰdeose4hd| 蜜桃视频www网站在线观看| 亚洲高清乱码| 成人免费看视频| 这里只有精品国产| 韩日精品中文字幕| 亚洲欧美偷拍自拍| 国产精品国产三级国产专业不| 日韩欧美在线观看一区二区三区| 亚洲欧洲日本韩国| 免费观看亚洲视频| 久久九九久精品国产免费直播| 国产福利第一视频| 国产精品久久久久久久久久久新郎 |