word2vec訓練模型實現文本轉換詞向量


利用 Word2Vec 實現文本分詞后轉換成詞向量

步驟:

1、對語料庫進行分詞,中文分詞借助jieba分詞。需要對標點符號進行處理

2、處理后的詞語文本利用word2vec模塊進行模型訓練,並保存

  詞向量維度可以設置高一點,300

3、保存模型,並測試,查找相似詞,相似詞topN

 1 import re
 2 import jieba
 3 from gensim.models import Word2Vec, word2vec
 4 
 5 
 6 def tokenize():
 7     """
 8     分詞
 9     :return:
10     """
11     f_input = open('166893.txt', 'r', encoding='utf-8')
12     f_output = open('yttlj.txt', 'w', encoding='utf-8')
13     line = f_input.readline()
14     while line:
15         newline = jieba.cut(line, cut_all=False)
16         newline = ' '.join(newline)
17         fileters = ['', '', '', '!', '', '"', '#', '$', '%', '&', '\(', '\)', '\*', '\+', ',', '-', '\.', '/', ':', ';', '<', '=', '>', '\?', '@'
18             , '\[', '\\', '\]', '^', '_', '`', '\{', '\|', '\}', '~', '', '', '']
19         newline = re.sub("<.*?>", " ", newline, flags=re.S)
20         newline = re.sub("|".join(fileters), " ", newline, flags=re.S)
21         f_output.write(newline)
22         print(newline)
23         line = f_input.readline()
24     f_input.close()
25     f_output.close()
26 
27 
28 def train_model():
29     """
30     訓練模型
31     :return:
32     """
33     model_file_name = 'model_yt.txt'
34     sentences = word2vec.LineSentence('yttlj.txt')
35     model = word2vec.Word2Vec(sentences, window=5, min_count=5, workers=4, vector_size=300)
36     model.save(model_file_name)
37 
38 
39 def test():
40     """
41     測試
42     :return:
43     """
44     model = Word2Vec.load('model_yt.txt')
45     print(model.wv.similarity('趙敏', '趙敏'))
46     print(model.wv.similarity('趙敏', '周芷若'))
47     for k in model.wv.most_similar('趙敏', topn=10):
48         print(k[0], k[1])
49 
50 
51 if __name__ == '__main__':
52     test()
View Code

 小結:

word2vec是實現詞嵌入的一種方式。

文本數據需要預處理成張量的形式,才能輸入到神經網絡 ;

文本划分成單元的過程叫做分詞過程(tokenization),分成的單元叫做標記(token);

文本 → 分詞 → 向量化

1、如何將文本轉成機器可處理成數值張量?
  1. one-hot編碼

    • 語料庫有多少單獨的詞,就建立多少維度的向量,當前詞語位置表示為1,其他位置為0

    • 表示離散數據的方式

    • 缺點:

      • 過於稀疏,數據量越大,維度越大,越稀疏

      • 不能表示出兩個有關聯的詞語之間的內在聯系

      • one-hot編碼簡單,但是沒有結構,任何兩個單詞之間的距離為根號二

  2. word embedding (詞嵌入)

    • word-embedding空間維度較小,空間中具有結構,相似的單詞距離近,不相關的單詞距離遠

    • embedding層的作用實際上可以看作是一個矩陣,將高維空間中的點映射到低維空間中

    • Embedding空間維度低,且可以讓空間擁有結構

    • 從向量之間的距離體現性別,年齡等等(這需要訓練,沒有經過訓練的embedding層沒有任何結構)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM