預訓練詞向量詳解

一、預訓練詞向量可以用測試集嗎

預訓練詞向量是通過對大規模語料進行訓練,學習出每個單詞的向量表示,使得語言模型在詞彙相似度、情感分類、實體識別等任務上表現出更好的性能。一般情況下,預訓練詞向量是在訓練集上進行訓練得到的,但是也可以在測試集上用來評估模型的性能。當測試集與訓練集的文本領域和主題差異較大時,使用預訓練詞向量可以提升模型的性能。

在實際應用中,我們可以使用預訓練的詞向量對測試集進行處理,將其轉換為向量表示,然後和訓練集中的向量進行比較。我們可以使用餘弦相似度等方法來衡量兩個向量之間的相似程度。

#使用預訓練詞向量對測試集進行處理
import torch
import torch.nn as nn
from transformers import BertTokenizer, BertModel

tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained('bert-base-chinese')
text = '這是一篇測試文本'
input_ids = tokenizer(text, padding=True, truncation=True, return_tensors='pt')['input_ids']
with torch.no_grad():
  last_hidden_states = model(input_ids)[0]

二、訓練詞向量中文語料

在中文語料的訓練中,我們需要先對文本進行分詞處理,將文本轉換為單詞序列,然後使用word2vec、glove等算法對單詞進行向量化表示。在中文語料處理中,需要注意一些特殊的問題,如中文文本中的詞彙組成形式、詞彙的歧義性、分詞系統的選擇等。因此需要進行一些特殊的處理,如使用jieba分詞進行分詞等。

在訓練中,我們使用Skip-gram算法來學習詞向量,首先隨機初始化詞向量,然後通過最大化所有單詞與其上下文的餘弦相似度來學習單詞的向量表示。對於每個單詞,我們會採樣num_samples個“噪音”單詞作為負面例子,同時使用優化方法進行模型更新。

#使用gensim庫進行中文語料詞向量訓練
from gensim.models import Word2Vec
import jieba

# 假設已有訓練語料corpus,每行為分詞後文本
corpus = [['這是', '一隻', '很', '可愛', '的', '貓'], ['這是', '一隻', '很', '兇猛', '的', '狗']]

model = Word2Vec(sentences=corpus, size=100, window=5, min_count=1, workers=4, sg=1)
model.save('./chinese_word2vec.model')  # 保存模型
model = Word2Vec.load('./chinese_word2vec.model')  # 加載模型

三、預訓練詞向量在哪裡下載

目前常用的預訓練詞向量包括GloVe、Word2vec等。這些詞向量可以在官方網站或者開發者提供的預訓練詞向量庫中進行下載和使用。以Word2vec為例,我們可以在以下鏈接中找到訓練好的中文詞向量:

https://github.com/Embedding/Chinese-Word-Vectors

#使用預訓練的中文詞向量進行詞彙相似度計算
from gensim.models import KeyedVectors
model = KeyedVectors.load_word2vec_format('./sgns.zhihu.bigram', binary=False)

#計算兩個詞彙的相似度
word1 = '開心'
word2 = '高興'
result = model.similarity(word1, word2)

四、訓練詞向量

對於某些特殊的數據集,我們可以自己訓練詞向量。通常使用的算法有word2vec、glove等。在訓練中,我們需要指定一些參數,如詞向量的維度、窗口大小、負採樣的數量等。

#使用gensim庫訓練自己的詞向量
from gensim.models import Word2Vec
import jieba

# 假設已有訓練語料corpus,每行為分詞後文本
corpus = [['這是', '一隻', '很', '可愛', '的', '貓'], ['這是', '一隻', '很', '兇猛', '的', '狗']]

model = Word2Vec(sentences=corpus, size=100, window=5, min_count=1, workers=4, sg=1)
model.save('./my_word2vec.model')  # 保存模型
model = Word2Vec.load('./my_word2vec.model')  # 加載模型

五、訓練詞向量的算法有哪些

訓練詞向量的算法主要包括CBOW和Skip-gram兩種,其中Skip-gram算法是當前應用最廣泛的一種。Skip-gram算法是一種將單詞投射到低維空間中的方式,它會利用單詞周圍的上下文信息,學習出每個單詞的向量表示,使單詞向量之間的距離與含義之間的關係更加接近。

在Skip-gram算法中,每個單詞都被表示為一個向量,其餘單詞都被表示為一個與其單詞數量相同的向量。在訓練時,我們需要隨機抽樣目標單詞周圍的一些單詞,來預測目標單詞。訓練時使用的目標值是二進制,表示目標單詞是否出現在其他單詞的周圍窗口中。Skip-gram算法通常涉及到兩個矩陣,一個是輸入向量,一個是輸出向量。輸入向量指的是一個單詞的向量表達形式,輸出向量指的是當這個單詞出現在一個詞對或者一個句子中的時候的向量表達形式。

#使用gensim庫訓練CBOW詞向量
from gensim.models import Word2Vec
import jieba

# 假設已有訓練語料corpus,每行為分詞後文本
corpus = [['這是', '一隻', '很', '可愛', '的', '貓'], ['這是', '一隻', '很', '兇猛', '的', '狗']]

model = Word2Vec(sentences=corpus, size=100, window=5, min_count=1, workers=4, sg=0)
model.save('./cbow_word2vec.model')  # 保存模型
model = Word2Vec.load('./cbow_word2vec.model')  # 加載模型

六、自己訓練的詞向量與預訓練的區別

自己訓練的詞向量與預訓練的詞向量在訓練數據規模、詞彙覆蓋範圍、數據集特徵等方面有所不同。預訓練的詞向量往往基於大型通用語料庫進行訓練,旨在學習單詞的通用語義和模式,涵蓋更廣泛的語言方言和語種,通常對於任務的適應性更強。自己訓練的詞向量往往基於任務相關和特定領域數據進行訓練,旨在學習與特定領域相關的特徵和模式,通常能夠更好地適應於任務。

另外,在訓練的超參數、算法選擇方面也會對詞向量在性能上產生更明顯的區別。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/245186.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:06
下一篇 2024-12-12 13:06

相關推薦

  • Python向量內積用法介紹

    本文將從以下幾個方面對Python向量內積進行詳細的闡述:概念解釋、代碼實現、運算性質、應用場景以及示例。 一、概念解釋 向量是指由一組數按照一定順序排列而成的數列,通常表示成一列…

    編程 2025-04-28
  • GloVe詞向量:從原理到應用

    本文將從多個方面對GloVe詞向量進行詳細的闡述,包括其原理、優缺點、應用以及代碼實現。如果你對詞向量感興趣,那麼這篇文章將會是一次很好的學習體驗。 一、原理 GloVe(Glob…

    編程 2025-04-27
  • Python如何求向量的模

    本文將從多個方面對Python如何求向量的模進行詳細闡述,幫助你更好地理解和運用向量的模的概念。 一、什麼是向量的模 向量是在數學和物理中常用的概念,用來表示具有大小和方向的量。向…

    編程 2025-04-27
  • Python計算向量長度

    Python提供了許多內置函數、模塊和方法來計算向量長度。本文將從多個方面對Python計算向量長度進行詳細闡述。 一、使用Math模塊計算向量長度 Python中提供了一個Mat…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論