1. 程式人生 > 其它 >自然語言處理實踐——1.詞向量word2vec的轉化

自然語言處理實踐——1.詞向量word2vec的轉化

技術標籤:paper機器學習自然語言處理

1. 為什麼要進行詞向量的轉化?

計算機看不懂我們人類的語言文字,必須轉化成機器看得懂的形式才能進行下一步的處理。

2. 文字的預處理和詞向量化

自然語言中有很多字元是無用的(如:“嗎”,“的”,“。”,“,”),並且我們希望把整句整段的語言轉成容易處理的形式。不過在程式設計之前我們需要對檔案的目標進行良好的規劃:
在這裡插入圖片描述
data_try檔案中我們放了兩個對違紀黨員幹部的通報檔案:
在這裡插入圖片描述

然後程式碼如下,這裡我們使用的是Pycharm中的jupyter notebook:

#%%

import pandas as pd
import os,pathlib
import
re import jieba import logging from gensim.models import word2vec #%% root = pathlib.Path(os.path.abspath('__file__')).parent.parent #當前檔案的上兩級目錄 data_path = os.path.join(root,"data","data_try.xlsx") #data資料夾中的data_try檔案 df = pd.read_excel(data_path) #讀取檔案 df.columns = ['content'
] #%% # CELL: 預處理,包括去掉符號和停用詞 stopwords_path = os.path.join(root,"data","hit_stopwords.txt") #哈工大停詞表 semantic_train_path = os.path.join(root,"data","semantic_resource.txt") #訓練語料的目錄 jieba.load_userdict(stopwords_path) def stopwordslist(): stopwords = [line.
strip() for line in open(stopwords_path,encoding='UTF-8').readlines()] return stopwords def sentence_write(content,path): """ :param content: 等待分詞和去掉停用詞的內容 :param path: 儲存的目錄 :return: 無返回值 """ content_spliting = jieba.lcut(content.strip()) stopwords = stopwordslist() result = "" #在停詞表中的詞去掉 for word in content_spliting: if word not in stopwords: if word != '\t': result += word result += " " f = open(path, mode="a", encoding="utf-8") f.write(result) f.close() return 0 def clean_sentence(line): """ 去掉無用的符號 :param line: :return: """ line = re.sub( "[\s+\-\|\!\/\[\]\{\}_,.$%^*(+\"\')]+|[::;+——()?【】《》“”!,。?、[email protected]#¥%……&*()]+|", '',line) #對無意義字串進行替換 return line def proc(df,attr): df[attr] = df[attr].apply(clean_sentence) return df df = proc(df,'content') for index,row in df.iterrows(): sentence_write(row['content'],semantic_train_path) #%% #進行語料訓練 logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', level=logging.INFO) sentences = word2vec.Text8Corpus(semantic_train_path) # 訓練模型,部分引數如下 model = word2vec.Word2Vec(sentences, size=100, hs=1, min_count=1, window=3) #%% y = model.most_similar(u'阻撓', topn = 10) y

總的來說,上面程式碼的作用是載入Excel檔案中的資料,進行清洗和去掉停用詞,從而得到一個由有效詞語組成的txt檔案,然後將這個檔案丟到logging和word2vec的包中進行向量化處理。最後的most_similar的作用是訓練後的詞向量的相關性。
另外與one-hot詞向量不同,word3vec的向量化可以體現詞的相關性,具體的請參考我的其他博文。