1.Word2Vec
Word2Vec?
是一種將詞語表示為向量的技術,能夠捕捉詞語之間的語義關系。它由 Google 的 Tomas Mikolov 等人在 2013 年提出,廣泛應用于自然語言處理任務中。其核心概念主要包括:
詞嵌入(Word Embeddings)
詞嵌入是將詞語映射到一個固定大小的向量空間中,使得在語義上相似的詞在向量空間中也相互接近。Word2Vec 通過神經網絡模型生成詞嵌入。
模型架構
Word2Vec 主要有兩種模型架構:
-
CBOW(Continuous Bag of Words):給定一個詞的上下文,預測中心詞。例如,給定上下文 ["The", "cat", "on", "the", "mat"],目標詞是 "sat"。
-
Skip-gram:給定一個詞,預測其上下文。例如,目標詞是 "sat",上下文是 ["The", "cat", "on", "the", "mat"]。
工作原理
CBOW 模型
CBOW 模型通過上下文詞預測中心詞。其工作原理如下:
-
輸入層接受上下文詞的詞向量,將這些詞向量求平均,得到一個上下文表示。
-
隱藏層將上下文表示映射到一個新的空間。
-
輸出層使用 softmax 函數預測中心詞的概率分布,選擇概率最大的詞作為預測結果。
Skip-gram 模型
Skip-gram 模型通過中心詞預測上下文詞。其工作原理如下:
-
輸入層接受中心詞的詞向量。
-
隱藏層將中心詞詞向量映射到一個新的空間。
-
輸出層使用 softmax 函數預測上下文詞的概率分布,選擇概率最大的詞作為預測結果。
訓練過程
Word2Vec 的訓練過程包括以下幾個步驟:
-
語料庫準備:收集并預處理大量文本數據,將其分詞,并去除低頻詞和停用詞。
-
模型初始化:初始化詞向量矩陣和模型參數。
-
前向傳播:將輸入詞通過神經網絡進行前向傳播,計算預測的上下文詞或中心詞。
-
損失計算:計算預測結果與實際標簽之間的損失。
-
反向傳播:通過反向傳播算法更新詞向量和模型參數。
-
迭代訓練:重復上述過程,直至模型收斂。
2. Gensim
Gensim
?是一個開源的 Python 庫,用于從非結構化文本數據中提取語義信息,主要應用于自然語言處理(NLP)領域。它提供了高效的工具和算法來實現主題建模、文檔相似性分析、詞嵌入等任務。其核心功能主要包括:
Gensim
?提供了多種強大的 NLP 功能,包括但不限于:
-
詞嵌入(Word Embeddings):
-
支持 Word2Vec、FastText、Glove 等詞嵌入模型。
-
可以從文本語料庫中訓練詞向量,或加載預訓練的詞向量。
-
-
主題建模(Topic Modeling):
-
支持 Latent Dirichlet Allocation (LDA)、Latent Semantic Indexing (LSI)、Hierarchical Dirichlet Process (HDP) 等主題模型。
-
可以從文檔集合中提取主題,分析文檔的主題分布。
-
-
文檔相似性分析(Document Similarity):
-
提供相似性檢索工具,可以計算文檔與文檔、文檔與查詢之間的相似性。
-
-
文本預處理(Text Preprocessing):
-
包括分詞、去停用詞、詞干提取、詞頻計算等功能。
-
3. Python實現
以下代碼使用?Gensim
?庫中的?Word2Vec
?模型對分詞后的文本數據進行訓練,并實現以下功能:
-
加載分詞語料文件?
word.txt
。 -
訓練一個向量維度為200的skip-gram模型。
-
計算并打印兩個單詞"企業"和"公司"的相似度。
-
查找并打印與"科技"最相關的20個詞。
-
通過詞向量計算,尋找與"公司-產品+生產"關系最相關的詞。
-
查找并打印在"企業 公司 是 合作伙伴"中最不合群的詞。
-
將訓練好的模型保存為?
企業關系.model
。
這段代碼展示了如何使用 Word2Vec 模型進行文本數據的相似性計算和關系分析。
#?導入包
from?gensim.models?import?word2vec
import?logging#?初始化日志
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',?level=logging.INFO)
sentences?=?word2vec.Text8Corpus("files/data/python32-data/word.txt")??#?加載分詞語料#?訓練skip-gram模型,使用vector_size參數替代size
model?=?word2vec.Word2Vec(sentences,?vector_size=200)??#?默認window=5
print("輸出模型",?model)#?計算兩個單詞的相似度
try:y1?=?model.wv.similarity("企業",?"公司")
except?KeyError:y1?=?0
print("【企業】和【公司】的相似度為:{}\n".format(y1))#?計算某個詞的相關詞列表
y2?=?model.wv.most_similar("科技",?topn=20)??#?20個最相關的
print("與【科技】最相關的詞有:\n")
for?word?in?y2:print(word[0],?word[1])
print("*********\n")#?尋找對應關系
print("公司-產品",?"生產")
y3?=?model.wv.most_similar(positive=["公司",?"產品"],?negative=["生產"],?topn=3)
for?word?in?y3:print(word[0],?word[1])
print("*********\n")#?尋找不合群的詞
y4?=?model.wv.doesnt_match("企業?公司?是?合作伙伴".split())
print("不合群的詞:{}".format(y4))
print("***********\n")#?保存模型
model.save("files/data/python32-data/企業關系.model")
輸入數據:
輸出結果:
通過 Gensim 的 Word2Vec 模型對給定文本數據進行了訓練,生成了詞向量,并通過計算詞語相似度、相關詞、對應關系、不合群的詞等方法對詞向量進行了分析和應用。
以上內容總結自網絡,如有幫助歡迎轉發,我們下次再見!