人工智能任務1-【NLP系列】句子嵌入的應用與多模型實現方式

大家好,我是微學AI,今天給大家介紹一下人工智能任務1-【NLP系列】句子嵌入的應用與多模型實現方式。句子嵌入是將句子映射到一個固定維度的向量表示形式,它在自然語言處理(NLP)中有著廣泛的應用。通過將句子轉化為向量表示,可以使得計算機能夠更好地理解和處理文本數據。

本文采用多模型實現方式詞嵌入,包括:Word2Vec 、Doc2Vec、BERT模型,將其應用于句子嵌入任務。這些預訓練模型通過大規模的無監督學習從海量文本數據中學習到了豐富的語義信息,并能夠產生高質量的句子嵌入。

目錄

  1. 引言
  2. 項目背景與意義
  3. 句子嵌入基礎
  4. 實現方式
    1. Word2Vec
    2. Doc2Vec
    3. BERT
  5. 項目實踐與代碼
    1. 數據預處理
    2. 句子嵌入實現
  6. 總結
  7. 參考資料

引言

隨著人工智能和大數據的發展,自然語言處理(NLP)在許多領域得到了廣泛應用,如搜索引擎,推薦系統,自動翻譯等。其中,句子嵌入是NLP的關鍵技術之一,它可以將自然語言的句子轉化為計算機可以理解的向量,從而使機器可以處理和理解自然語言。本文將詳細介紹句子嵌入在NLP中的應用項目,以及幾種常見的中文文本句子嵌入的實現方式。

項目背景與意義

在自然語言處理中,將句子轉化為向量的過程稱為句子嵌入。這是因為計算機不能直接理解自然語言,而是通過處理數值數據(例如向量)來實現。句子嵌入可以捕捉句子的語義信息,幫助機器理解和處理自然語言。

句子嵌入的應用項目廣泛,如情感分析,文本分類,語義搜索,機器翻譯等。例如,在情感分析中,句子嵌入可以將文本轉化為向量,然后通過機器學習模型來預測文本的情感。在機器翻譯中,句子嵌入可以幫助機器理解源語言的句子,并將其轉化為目標語言的句子。

句子嵌入的應用主要包括以下幾個方面:

文本分類/情感分析:句子嵌入可以用于文本分類任務,如將電影評論分為正面和負面情感。基于句子嵌入的模型能夠學習到句子的語義信息,并將其應用于情感分類。

語義相似度:通過計算句子嵌入之間的相似度,可以衡量句子之間的語義相似性。這在問答系統、推薦系統等任務中非常有用,可以幫助找到與輸入句子最相關的其他句子。

機器翻譯:句子嵌入可以用于機器翻譯任務中的句子對齊和翻譯建模。通過將源語言句子和目標語言句子編碼成嵌入向量,可以捕捉句子之間的對應關系和語義信息,從而提高翻譯質量。

句子生成:利用預訓練的語言模型和句子嵌入,可以生成連貫、語義正確的句子。句子嵌入可以作為生成任務的輸入,保證生成的句子與輸入的上下文相關。

信息檢索/相似句子查找:通過將句子轉換為嵌入向量,可以建立索引并進行快速的相似句子查找。這在搜索引擎、知識圖譜等領域具有重要應用價值。

句子嵌入基礎

句子嵌入是一種將自然語言句子轉化為固定長度的實數向量的技術。這個向量能夠捕獲句子的語義信息,例如句子的主題,情感,語氣等。句子嵌入通常是通過神經網絡模型學習得到的。這些模型可以是無監督的,如Word2Vec,Doc2Vec,或者是有監督的,如BERT。

實現方式

接下來,我們將介紹三種常見的中文文本句子嵌入的實現方式。

方法一:Word2Vec

Word2Vec是一種常見的詞嵌入方法,它可以將詞語轉化為向量。這種方法的思想是,將一個句子中的所有詞向量取平均,得到句子的向量。
在這里插入圖片描述

Word2Vec 有兩種實現方式:CBOW(Continuous Bag-of-Words)和Skip-gram。

CBOW 模型旨在根據上下文預測中心詞,而 Skip-gram 模型則是根據中心詞預測上下文。以下是這兩種模型的基本數學原理:

CBOW 模型:

假設我們有一個中心詞 w t w_t wt?,并且上下文窗口大小為 m m m,則上下文詞可以表示為 w t ? m , w t ? m + 1 , . . . , w t ? 1 , w t + 1 , . . . , w t + m w_{t-m}, w_{t-m+1}, ..., w_{t-1}, w_{t+1}, ..., w_{t+m} wt?m?,wt?m+1?,...,wt?1?,wt+1?,...,wt+m?

CBOW 模型試圖根據上下文詞來預測中心詞,其目標是最大化給定上下文條件下中心詞的條件概率。

具體而言,CBOW 模型通過將上下文詞的詞向量進行平均或求和,得到上下文表示 v = 1 2 m ∑ i = 1 2 m v w t i \mathbf{v} = \frac{1}{2m} \sum_{i=1}^{2m} \mathbf{v}_{w_{t_i}} v=2m1?i=12m?vwti???。然后,將上下文表示 v \mathbf{v} v 輸入到一個隱藏層中,并通過一個非線性函數(通常是 sigmoid 函數)得到隱藏層的輸出 h = σ ( W v + b ) \mathbf{h} = \sigma(\mathbf{W}\mathbf{v} + \mathbf{b}) h=σ(Wv+b)。最后,將隱藏層的輸出與中心詞 w t w_t wt? 相關的 one-hot 編碼表示進行比較,并使用 softmax 函數得到每個詞的概率分布 y ^ \hat{\mathbf{y}} y^?。模型的目標是最大化實際中心詞的對數概率: max ? log ? P ( w t ∣ w t ? m , . . . , w t ? 1 , w t + 1 , . . . , w t + m ) \max \log P(w_t | w_{t-m}, ..., w_{t-1}, w_{t+1}, ..., w_{t+m}) maxlogP(wt?wt?m?,...,wt?1?,wt+1?,...,wt+m?)

Skip-gram 模型:

Skip-gram 模型與 CBOW 模型相反,它試圖根據中心詞預測上下文詞。

具體而言,Skip-gram 模型將中心詞 w t w_t wt? 的詞向量 v w t \mathbf{v}_{w_t} vwt?? 輸入到隱藏層,并通過一個非線性函數得到隱藏層的輸出 h = σ ( W v w t + b ) \mathbf{h} = \sigma(\mathbf{W}\mathbf{v}_{w_t} + \mathbf{b}) h=σ(Wvwt??+b)。然后,將隱藏層的輸出與上下文詞 w t ? m , w t ? m + 1 , . . . , w t ? 1 , w t + 1 , . . . , w t + m w_{t-m}, w_{t-m+1}, ..., w_{t-1}, w_{t+1}, ..., w_{t+m} wt?m?,wt?m+1?,...,wt?1?,wt+1?,...,wt+m? 相關的 one-hot 編碼表示依次比較,并使用 softmax 函數得到每個詞的概率分布 y ^ \hat{\mathbf{y}} y^?。模型的目標是最大化實際上下文詞的對數概率: max ? ∑ i = 1 2 m log ? P ( w t i ∣ w t ) \max \sum_{i=1}^{2m} \log P(w_{t_i} | w_{t}) maxi=12m?logP(wti??wt?)

在實際訓練過程中,Word2Vec 使用負采樣(negative sampling)來近似 softmax 函數的計算,加快模型的訓練速度,并取得更好的性能。

希望上述使用 LaTeX 輸出的數學表示對您有所幫助!

方法二:Doc2Vec

Doc2Vec是一種直接獲取句子向量的方法,它是Word2Vec的擴展。Doc2Vec不僅考慮詞語的上下文關系,還考慮了文檔的全局信息。

假設我們有一個包含N個文檔的語料庫,每個文檔由一系列單詞組成。Doc2Vec的目標是為每個文檔生成一個固定長度的向量表示。

Doc2Vec使用了兩種不同的模型來實現這一目標:分別是PV-DM和PV-DBOW。

對于PV-DM模型,在訓練過程中,每個文檔被映射到一個唯一的向量(paragraph vector),同時也將每個單詞映射到一個向量。在預測階段,模型輸入一部分文本(可能是一個或多個單詞)并嘗試預測缺失部分文本(通常是一個單詞)。模型的損失函數基于預測和真實值之間的差異進行計算,然后通過反向傳播來更新文檔和單詞的向量表示。

對于PV-DBOW模型,它忽略了文檔內單詞的順序,只關注文檔的整體表示。在該模型中,一個文檔被映射到一個向量,并且模型的目標是通過上下文單詞的信息預測該文檔。同樣地,模型使用損失函數和反向傳播來更新文檔和單詞的向量表示。

總體而言,Doc2Vec通過將每個文檔表示為固定長度的向量來捕捉文檔的語義信息。這些向量可以用于度量文檔之間的相似性、聚類文檔或作為其他任務的輸入。

使用數學符號描述Doc2Vec的具體細節,可以參考以下公式:

PV-DM模型:

  • 輸入:一個文檔d,由單詞序列 ( w 1 , w 2 , . . . , w n ) (w_1, w_2, ..., w_n) (w1?,w2?,...,wn?)組成,其中 n n n是文檔中的單詞數。
  • 文檔向量: p v dm ( d ) pv_{\text{dm}}(d) pvdm?(d),表示文檔d的向量表示。
  • 單詞向量:每個單詞 w i w_i wi?都有一個對應的向量表示 w i w_i wi?
  • 預測:給定輸入部分文本 ( w 1 , w 2 , . . . , w k ) (w_1, w_2, ..., w_k) (w1?,w2?,...,wk?),模型嘗試預測缺失文本 w k + 1 w_{k+1} wk+1?
  • 損失函數:使用交叉熵或其他適當的損失函數計算預測值與真實值之間的差異。
  • 訓練:通過反向傳播和梯度下降算法更新文檔向量和單詞向量。

PV-DBOW模型:

  • 輸入:一個文檔d,由單詞序列 ( w 1 , w 2 , . . . , w n ) (w_1, w_2, ..., w_n) (w1?,w2?,...,wn?)組成,其中 n n n是文檔中的單詞數。
  • 文檔向量: p v dbow ( d ) pv_{\text{dbow}}(d) pvdbow?(d),表示文檔d的向量表示。
  • 單詞向量:每個單詞 w i w_i wi?都有一個對應的向量表示 w i w_i wi?
  • 預測:給定一個文檔d,模型嘗試預測與該文檔相關的上下文單詞。
  • 損失函數:使用交叉熵或其他適當的損失函數計算預測值與真實值之間的差異。
  • 訓練:通過反向傳播和梯度下降算法更新文檔向量和單詞向量。

在這里插入圖片描述

方法三:BERT

BERT是一種基于Transformer的深度學習模型,它可以獲取到句子的深層次語義信息。

BERT模型的數學原理基于兩個關鍵概念:MLM和NSP。

首先,我們將輸入文本序列表示為一系列的詞向量,并且為每個詞向量添加相對位置編碼。然后,通過多次堆疊的Transformer層來進行特征抽取。

在MLM階段,BERT會對輸入序列中的一部分詞進行隨機掩碼操作,即將這些詞的嵌入向量替換為一個特殊的標記 “[MASK]”。然后,模型通過上下文上下文預測這些被掩碼的詞。

在NSP階段,BERT會將兩個句子作為輸入,并判斷它們是否是原始文本中的連續句子。這個任務旨在幫助模型學習到句子級別的語義信息。

具體而言,BERT模型的數學原理包括以下幾個步驟:

  1. 輸入嵌入層:輸入是一系列的詞語索引,將其映射為詞向量表示。
  2. 位置編碼:為每個輸入添加相對位置編碼,以便模型能夠理解詞語之間的順序關系。
  3. Transformer層:通過多次堆疊的Transformer層進行特征抽取,每層由多頭自注意力機制和前饋神經網絡組成。
  4. Masked Language Model(MLM):對輸入序列中的一部分詞進行掩碼,并通過上下文預測這些被掩碼的詞。
  5. Next Sentence Prediction(NSP):將兩個句子作為輸入,判斷它們是否是原始文本中的連續句子。
    在這里插入圖片描述

項目實踐與代碼

接下來,我們將通過一個例子來展示如何實現中文文本的句子嵌入。我們將使用Python語言和相關的NLP庫(如gensim,torch,transformers等)來完成。

數據預處理

首先,我們需要對數據進行預處理,包括分詞,去除停用詞等。以下是一個簡單的數據預處理代碼示例:

import jiebadef preprocess_text(text):# 使用jieba進行分詞words = jieba.cut(text)# 去除停用詞stop_words = set(line.strip() for line in open('stop_words.txt', 'r', encoding='utf-8'))words = [word for word in words if word not in stop_words]return words

句子嵌入實現

接下來,我們將展示如何使用上述的三種方法來實現句子嵌入。

方法一:Word2Vec + 文本向量平均

from gensim.models import Word2Vecdef sentence_embedding_word2vec(sentences, size=100, window=5, min_count=5):# 訓練Word2Vec模型model = Word2Vec(sentences, size=size, window=window, min_count=min_count)# 對每個句子的詞向量進行平均sentence_vectors = []for sentence in sentences:vectors = [model.wv[word] for word in sentence if word in model.wv]sentence_vectors.append(np.mean(vectors, axis=0))return sentence_vectors

方法二:Doc2Vec

from gensim.models import Doc2Vec
from gensim.models.doc2vec import TaggedDocumentdef sentence_embedding_doc2vec(sentences, vector_size=100, window=5, min_count=5):# 將句子轉化為TaggedDocument對象documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(sentences)]# 訓練Doc2Vec模型model = Doc2Vec(documents, vector_size=vector_size, window=window, min_count=min_count)# 獲取句子向量sentence_vectors = [model.docvecs[i] for i in range(len(sentences))]return sentence_vectors

方法三:BERT

import torch
from transformers import BertTokenizer, BertModel# 加載預訓練的BERT模型和分詞器
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained('bert-base-chinese')# 輸入待轉換的句子
sentence = "這是一個示例句子。"# 使用分詞器將句子分成tokens
tokens = tokenizer.tokenize(sentence)# 添加特殊標記 [CLS] 和 [SEP]
tokens = ['[CLS]'] + tokens + ['[SEP]']# 將tokens轉換為對應的id
input_ids = tokenizer.convert_tokens_to_ids(tokens)# 創建輸入tensor
input_tensor = torch.tensor([input_ids])# 使用BERT模型獲取句子的嵌入向量
with torch.no_grad():outputs = model(input_tensor)sentence_embedding = outputs[0][0][0]  # 取第一個句子的第一個token的輸出作為句子的嵌入向量# 輸出句子的嵌入向量
print(sentence_embedding)
print(sentence_embedding.shape)

總結

本文詳細介紹了句子嵌入在NLP中的應用項目,以及幾種常見的中文文本句子嵌入的實現方式。我們通過實踐和代碼示例展示了如何使用Word2Vec + 文本向量平均,Doc2Vec,和BERT來實現句子嵌入。希望本文能夠幫助讀者更好地理解句子嵌入,并在實際項目中應用句子嵌入技術。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37411.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37411.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37411.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ASP.NET Core - 緩存之分布式緩存

分布式緩存是由多個應用服務器共享的緩存,通常作為訪問它的應用服務器的外部服務進行維護。 分布式緩存可以提高 ASP.NET Core 應用的性能和可伸縮性,尤其是當應用由云服務或服務器場托管時。 與其他將緩存數據存儲在單個應用服務器上的緩存方案相比&am…

沁恒ch32V208處理器開發(三)GPIO控制

目錄 GPIO功能概述 CH32V2x 微控制器的GPIO 口可以配置成多種輸入或輸出模式,內置可關閉的上拉或下拉電阻,可以配置成推挽或開漏功能。GPIO 口還可以復用成其他功能。端口的每個引腳都可以配置成以下的多種模式之一: 1 浮空輸入 2 上拉輸入…

AMEYA360:DNB1101大唐恩智浦工規級電池管理芯片

大唐恩智浦作為全球領先的半導體供應商,一直致力于為全球客戶提供高質量的解決方案。在電池管理芯片領域,大唐恩智浦推出的DNB1101可謂是一款工規級的電池管理芯片,其卓越的性能和可靠性成為市場上備受全球領先的半導體供應商,一直…

c#編碼技巧(十四):全面總結delegate、Func委托的寫法演變

delegate委托對于初學者來說不太好理解。 按筆者的經驗,delegate本質是函數指針,可以把它理解為某一類方法的入口,把他翻譯為:“長得像XXX的函數方法(入參是什么、返回值是什么)”可能更容易理解。 以下示例…

2023杭電多校第7場M題-M. Minimal and Maximal XOR Sum

題目鏈接:csoj | M. Minimal and Maximal XOR Sum (scnu.edu.cn) 解題思路: 最小值:每次操作的區間長度為2,即交換兩個相鄰數,每次異或2(10),故最小值肯定為2(10)或0(00),如果是偶排序最小值是…

Java接口壓力測試—如何應對并優化Java接口的壓力測試

導言 在如今的互聯網時代,Java接口壓力測試是評估系統性能和可靠性的關鍵一環。一旦接口不能承受高并發量,用戶體驗將受到嚴重影響,甚至可能導致系統崩潰。因此,了解如何進行有效的Java接口壓力測試以及如何優化接口性能至關重要…

SpringBoot復習:(48)RedisAutoConfiguration自動配置類

RedisAutoConfiguration類代碼如下: 可以看到在這個類中配置了2個bean: redisTemplate和stringRedisTemplate. 而它通過EnableConfigurationProperties(RedisProperties.class)注解,把配置文件中配置的Redis相關的信息引入進來了,RedisPrope…

安裝Linux操作系統CentOS 6詳細圖文步驟

為滿足業務對Linux操作系統部署的要求,本文檔主要提供CentOS 6操作系統的最小化安裝和基本配置, 安裝本系統建議最少1GB內存和2GB磁盤空間。 1、 使用光盤或者掛載ISO鏡像,在出現如下圖形界面時選擇【Install or upgrade an existing system】并按Ent…

CLickhouse核心特性

目錄 CLickhouse核心特性 1 完備的DBMS功能 2 列式存儲與數據壓縮 3 向量化執行引擎 4 關系模型與SQL查詢 5 多樣化的表引擎 6 多線程與分布式 7 多主架構 8 在線查詢 9 數據分片與分布式查詢 Clickhouse適用場景 Clickhouse不適用場景 Clickhouse名稱含義 CLickh…

P8642 [藍橋杯 2016 國 AC] 路徑之謎

[藍橋杯 2016 國 AC] 路徑之謎 題目描述 小明冒充 X X X 星球的騎士,進入了一個奇怪的城堡。 城堡里邊什么都沒有,只有方形石頭鋪成的地面。 假設城堡地面是 n n n\times n nn 個方格。如圖所示。 按習俗,騎士要從西北角走到東南角。 …

C/C++中const關鍵字詳解

為什么使用const?采用符號常量寫出的代碼更容易維護;指針常常是邊讀邊移動,而不是邊寫邊移動;許多函數參數是只讀不寫的。const最常見用途是作為數組的界和switch分情況標號(也可以用枚舉符代替),分類如下:…

音視頻 vs2017配置FFmpeg

vs2017 ffmpeg4.2.1 一、首先我把FFmpeg整理了一下&#xff0c;放在C盤 二、新建空項目 三、添加main.cpp&#xff0c;將bin文件夾下dll文件拷貝到cpp目錄下 #include<stdio.h> #include<iostream>extern "C" { #include "libavcodec/avcodec.h&…

【Docker】使用 Docker Registry 搭建自己的 Docker 鏡像倉庫

使用 Docker Registry 搭建自己的 Docker 鏡像倉庫 在使用 Docker 進行應用程序的開發和部署時&#xff0c;使用 Docker 鏡像倉庫是一個很好的實踐。它允許集中存儲和管理 Docker 鏡像&#xff0c;方便團隊協作和版本控制。在本文中&#xff0c;將介紹如何使用 Docker Registr…

Nginx隨筆

Nginx下載鏈接 安裝命令&#xff1a; apt update apt install nginx 一、基礎命令&#xff08;Ubuntu&#xff09; 1、在全局 nginx -t //檢查Nginx的配置文件是否有錯 systemctl start nginx //啟動Nginx systemctl stop nginx //停止Nginx systemctl status nginx //查…

【數據結構與算法——TypeScript】圖結構(Graph)

【數據結構與算法——TypeScript】 圖結構(Graph) 認識圖結構以及特性 什么是圖? 在計算機程序設計中&#xff0c;圖結構 也是一種非常常見的數據結構。 但是&#xff0c;圖論其實是一個非常大的話題 認識一下關于圖的一些內容 圖的抽象數據類型一些算法實現。 什么是圖?…

jmeter獲取mysql數據

JDBC Connection Configuration Database URL: jdbc:mysql:// 數據庫地址 /庫名 JDBC Driver class&#xff1a;com.mysql.jdbc.Driver Username&#xff1a;賬號 Password&#xff1a;密碼 JDBC Request 字段含義 字段含義 Variable Name Bound to Pool 數據庫連接池配置…

使用vue3 + ts + vite + v-md-editor 在前端頁面預覽markdown文件

1.效果預覽 2. 依賴包安裝 yarn add kangc/v-md-editornext v-md-editor中文官網&#xff1a;https://code-farmer-i.github.io/vue-markdown-editor/zh/ v-md-editor分為4種組件&#xff1a; 輕量版編輯器進階版編輯器預覽組件html預覽組件 對UI組件庫頁面&#xff0c;我只需…

問道管理:縮量小幅上漲說明什么?

股市里面&#xff0c;股票價格上漲或跌落都是常見現象。可是關于那些在商場上尋求收益的出資者來說&#xff0c;他們需要對每一個股市中的價格動搖有深化的了解&#xff0c;以便做出更正確的出資決策。最近&#xff0c;出資者們發現商場縮量小幅上漲的現象時有發生&#xff0c;…

Jmeter壓測實戰:Jmeter二次開發之自定義函數

目錄 1 前言 2 開發準備 3 自定義函數核心實現 3.1 新建項目 3.2 繼承實現AbstractFunction類 3.3 最終項目結構 4 Jmeter加載擴展包 4.1 maven構建配置 4.2 項目打包 4.3 Jmeter加載擴展包 5 自定義函數調用調試 5.1 打開Jmeter函數助手&#xff0c;選擇自定義函數…

clickhouse 刪除操作

OLAP 數據庫設計的宗旨在于分析適合一次插入多次查詢的業務場景&#xff0c;市面上成熟的 AP 數據庫在更新和刪除操作上支持的均不是很好&#xff0c;當然 clickhouse 也不例外。但是不友好不代表不支持&#xff0c;本文主要介紹在 clickhouse 中如何實現數據的刪除&#xff0c…