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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

nlp小白教程:word2vec之数据预处理

發布時間:2024/1/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nlp小白教程:word2vec之数据预处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 數據預處理

首先說的就是分詞,對英語來說每個詞與詞之間是通過空格辨別的,例如I love natural language processing,每個詞之間都是有空格的,所以很容劃分為[i, love, natural, language, processing]但是中文的詞并沒有分開,而是全部連在一起的,例如我愛自然語言處理,我們可以通過分詞工具進行切分,我這里使用的jieba分詞

import jiebares = jieba.cut("我愛自然語言處理",cut_all=False) print(list(res)) # ['我', '愛', '自然語言', '處理']

首先我們需要準備一段預料,一般情況下通常是一個非常大的語料庫,這樣才能覆蓋更多的詞語,訓練的詞向量也會更加準確,但是這里只是為了演示,所以隨便搞一點就行。正好最近在看仙逆,截取前兩章節作為訓練語料。我們將其保存到一個txt中

首先我們需要對去除每一行的換行符,然后將每一行拼接在一起,送到jieba分詞中

import jiebadef read_text_and_cut_word(cropus_path):data = []with open(cropus_path, 'r', encoding='utf-8') as f:lines = f.readlines()for line in lines:line = line.strip()if line != '': # 過濾掉空白行data.append(line)sentences = "\n".join(data) # 將文本拼接成一個字符串words = jieba.cut(sentences,cut_all=False) with open("p_input.txt", "w") as f: # 將分詞的結果保存到txt中f.write(' '.join(words))read_text_and_cut_word('news.txt')

原始的文本已經分好詞保存下來了,可以看到分的詞里面有很多中文的停用詞和標點符號,。?、\n等等,通常情況下,分詞的時候需要加載我們自定義的停用詞,例如啊,的,是等等,不過為了簡單,這里只去除標點和數字,

def handle_stopwords_and_whitesapce():# 標點符號集stopwords = '''~!@#$%^&*()_+`1234567890-={}[]::";'<>,.?/|\、·!()¥“”‘’《》,。?/—-【】….'''stopwords_set = set([i for i in stopwords])stopwords_set.add("br") # 異常詞也加入此集,方便去除with open("temp.txt", "r", encoding="utf-8") as f:lines = f.readlines()data = []for line in lines:line = line.strip()for s in stopwords_set:line = line.strip().replace(s, "")line = line.replace(" "," ").replace(" "," ")if line != "" and line != " ":data.append(line)all_text = " ".join(data)with open("train.txt", "w") as f:f.write(all_text)handle_stopwords_and_whitesapce()


很好,語聊基本就處理好了,現在每個詞之間使用空格進行分割,我們就可以將切好的詞輸入到我們的網絡中訓練了。但是由于計算機只認識01,所以我們需要對詞進行編碼。

  • 首先統計語料中有多少個詞,每個詞出現的次數是多少
  • 給每個詞進行id編碼,為了擴展性,這里留出幾個未定義的詞
  • 同時也將每個id編碼重新映射為詞
  • from collections import Counterword2idx = {} idx2word = {} max_idx = 0 def build_vocab(cropus,unused_cnt=100):with open(cropus, "r", encoding="utf-8") as f:all_text = f.readline()vocabs = all_text.split(" ") # 讀出所有的詞vocab_dict = dict(Counter(vocabs).most_common()) # 統計每個詞出現的頻率for i,w in enumerate(vocab_dict.keys()): word2idx[w] = i + unused_cnt # 為每個詞進行id編碼idx2word[i + unused_cnt] = w # id重新映射為詞build_vocab('train.txt')words = ["鐵柱", "坐在", "村內", "的", "小", "路邊", "望", "著", "蔚藍", "的", "天空"]token_id = [word2idx.get(w, 0) for w in words] print(' '.join(words)) # 鐵柱 坐在 村內 的 小 路邊 望 著 蔚藍 的 天空 print(token_id) # [101, 317, 318, 100, 456, 457, 124, 107, 458, 100, 459]newwords = [idx2word.get(i, '<UNK>') for i in token_id] print(newwords) # ['鐵柱', '坐在', '村內', '的', '小', '路邊', '望', '著', '蔚藍', '的', '天空']

    總結

    以上是生活随笔為你收集整理的nlp小白教程:word2vec之数据预处理的全部內容,希望文章能夠幫你解決所遇到的問題。

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