日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CBOW模型的数据预处理

發布時間:2025/3/12 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CBOW模型的数据预处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據預處理:從語料庫生成上下文和目標詞。如下圖所示,contexts 的各行成為神經網絡的輸入,target 的各行成為正確解標簽(要預測出的單詞)。

之前做過一個preprocess函數,將文本分割為單詞,并將分割后的單詞列表轉化為單詞ID列表。實現代碼如下,其中corpus 是單詞ID列表,word_to_id 是單詞到單詞ID的字典,id_to_word是單詞ID到單詞的字典。

def preprocess(text):text = text.lower()text = text.replace('.', ' .')words = text.split(' ')word_to_id = {}id_to_word = {}for word in words:if word not in word_to_id:new_id = len(word_to_id)word_to_id[word] = new_idid_to_word[new_id] = wordcorpus = np.array([word_to_id[w] for w in words])return corpus, word_to_id, id_to_word

然后生成上下文和目標詞的create_contexts_target函數就可以將corpus(單詞ID列表)作為參數。函數的輸出contexts是一個二維數組,第 0 維保存的是各個上下文數據。函數的輸出 target[N] 保存的是第 N 個目標詞,如下圖所示。

def create_contexts_target(corpus, window_size=1):'''生成上下文和目標詞:param corpus: 語料庫(單詞ID列表):param window_size: 窗口大小(當窗口大小為1時,左右各1個單詞為上下文):return:'''target = corpus[window_size:-window_size]contexts = []for idx in range(window_size, len(corpus)-window_size):cs = []for t in range(-window_size, window_size + 1):if t == 0:continuecs.append(corpus[idx + t])contexts.append(cs)return np.array(contexts), np.array(target)

用這個函數:

import sys sys.path.append('..') from common.util import preprocess #, create_co_matrix, most_similar from common.util import create_contexts_targettext = 'You say goodbye and I say hello.' corpus, word_to_id, id_to_word = preprocess(text) contexts, target = create_contexts_target(corpus, window_size=1) print(contexts) print(target)

輸出:

[[0 2][1 3][2 4][3 1][4 5][1 6]] [1 2 3 4 1 5]

因為這些上下文和目標詞的元素還是單詞 ID,所以 還需要將它們轉化為 one-hot 表示。如下圖所示。

實現代碼如下:convert_one_hot函數的參數是單詞 ID 列表和詞匯個數。

def convert_one_hot(corpus, vocab_size):'''轉換為one-hot表示:param corpus: 單詞ID列表(一維或二維的NumPy數組):param vocab_size: 詞匯個數:return: one-hot表示(二維或三維的NumPy數組)'''N = corpus.shape[0]if corpus.ndim == 1:one_hot = np.zeros((N, vocab_size), dtype=np.int32)for idx, word_id in enumerate(corpus):one_hot[idx, word_id] = 1elif corpus.ndim == 2:C = corpus.shape[1]one_hot = np.zeros((N, C, vocab_size), dtype=np.int32)for idx_0, word_ids in enumerate(corpus):for idx_1, word_id in enumerate(word_ids):one_hot[idx_0, idx_1, word_id] = 1return one_hot

運行上面幾個預處理函數:

import sys sys.path.append('..') from common.util import preprocess #, create_co_matrix, most_similar from common.util import create_contexts_target, convert_one_hottext = 'You say goodbye and I say hello.' corpus, word_to_id, id_to_word = preprocess(text) contexts, target = create_contexts_target(corpus, window_size=1) print(contexts) print(target) vocab_size = len(word_to_id) target = convert_one_hot(target, vocab_size) contexts = convert_one_hot(contexts, vocab_size) print(vocab_size) print(target) print(contexts)

結果:

[[0 2][1 3][2 4][3 1][4 5][1 6]] [1 2 3 4 1 5] 7 [[0 1 0 0 0 0 0][0 0 1 0 0 0 0][0 0 0 1 0 0 0][0 0 0 0 1 0 0][0 1 0 0 0 0 0][0 0 0 0 0 1 0]] [[[1 0 0 0 0 0 0][0 0 1 0 0 0 0]][[0 1 0 0 0 0 0][0 0 0 1 0 0 0]][[0 0 1 0 0 0 0][0 0 0 0 1 0 0]][[0 0 0 1 0 0 0][0 1 0 0 0 0 0]][[0 0 0 0 1 0 0][0 0 0 0 0 1 0]][[0 1 0 0 0 0 0][0 0 0 0 0 0 1]]]

總結

以上是生活随笔為你收集整理的CBOW模型的数据预处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。