溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

發(fā)布時(shí)間:2021-09-24 14:55:26 來源:億速云 閱讀:106 作者:柒染 欄目:開發(fā)技術(shù)

本篇文章為大家展示了Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

概述

從今天開始我們將開啟一段自然語言處理 (NLP) 的旅程. 自然語言處理可以讓來處理, 理解, 以及運(yùn)用人類的語言, 實(shí)現(xiàn)機(jī)器語言和人類語言之間的溝通橋梁.

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

詞向量

我們先來說說詞向量究竟是什么. 當(dāng)我們把文本交給算法來處理的時(shí)候, 計(jì)算機(jī)并不能理解我們輸入的文本, 詞向量就由此而生了. 簡(jiǎn)單的來說, 詞向量就是將詞語轉(zhuǎn)換成數(shù)字組成的向量.

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

當(dāng)我們描述一個(gè)人的時(shí)候, 我們會(huì)使用身高體重等種種指標(biāo), 這些指標(biāo)就可以當(dāng)做向量. 有了向量我們就可以使用不同方法來計(jì)算相似度.

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

那我們?nèi)绾蝸砻枋稣Z言的特征呢? 我們把語言分割成一個(gè)個(gè)詞, 然后在詞的層面上構(gòu)建特征.

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

詞向量維度

詞向量的維度越高, 其所能提供的信息也就越多, 計(jì)算結(jié)果的可靠性就更值得信賴.

50 維的詞向量:

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

用熱度圖表示一下:

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

從上圖我們可以看出, 相似的詞在特征表達(dá)中比較相似. 由此也可以證明詞的特征是有意義的.

Word2Vec

Word2Vec 是一個(gè)經(jīng)過預(yù)訓(xùn)練的 2 層神經(jīng)網(wǎng)絡(luò), 可以幫助我們將單詞轉(zhuǎn)換為向量. Word2Vec 分為兩種學(xué)習(xí)的方法: CBOW 和 Skip-Gram.

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

CBOW 模型

CBOW (Continuous Bag-of-Words) 是根據(jù)單詞周圍的上下文來預(yù)測(cè)中間的詞. 如圖:

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

Skip-Gram 模型

Skip-Gram 用于預(yù)測(cè)同一句子中當(dāng)前單詞前后的特定范圍內(nèi)的單詞.

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

Skip-Gram 所需的訓(xùn)練數(shù)據(jù)集:

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

負(fù)采樣模型

如果一個(gè)語料庫稍微大一些, 可能的結(jié)果簡(jiǎn)直太多了. 詞向量模型的最后一層相當(dāng)于 softmax (轉(zhuǎn)換為概率), 計(jì)算起來會(huì)非常耗時(shí).

我們可以將輸入改成兩個(gè)單詞, 判斷這兩個(gè)詞是否為前后對(duì)應(yīng)的輸入和輸出, 即一個(gè)二分類任務(wù).

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

但是我們會(huì)發(fā)現(xiàn)一個(gè)問題, 此時(shí)的訓(xùn)練集構(gòu)建出來的標(biāo)簽全為 1, 無法進(jìn)行較好的訓(xùn)練. 這時(shí)候負(fù)采樣模型就派上用場(chǎng)了. (默認(rèn)為 5 個(gè))

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

詞向量的訓(xùn)練過程

1. 初始化詞向量矩陣

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

2. 神經(jīng)網(wǎng)絡(luò)反向傳播

通過神經(jīng)網(wǎng)絡(luò)反向傳播來計(jì)算更新. 此時(shí)不光更新權(quán)重參數(shù)矩陣 W, 也會(huì)更新輸入數(shù)據(jù).

Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型

詞向量模型實(shí)戰(zhàn)

格式:

Word2Vec(tokenized, sg=1, window=5, min_count=2, negative=1, sample=0.001, hs=1, workers=4)

參數(shù):

seg: 1 為skip-gram算法, 對(duì)低配詞敏感. 默認(rèn) sg=0, CBOW算法

window: 句子中當(dāng)前詞與目標(biāo)詞時(shí)間的最大距離. 3表示在目標(biāo)詞前看3-b個(gè)詞, 后面看b個(gè)詞 (b在0-3之間隨機(jī))

min_count: 對(duì)詞進(jìn)行過濾, 頻率小于min-cout的單詞會(huì)被忽視, 默認(rèn)值為5

訓(xùn)練模型

import jieba
from gensim.models import Word2Vec
# 獲取停用詞
file = open("../stop_words/cn_stopwords.txt", encoding="utf-8")
stop_word = set(file.read())
print("停用詞:", stop_word)  # 調(diào)試輸出
# 定義語料
content = [
    "長(zhǎng)江是中國第一大河,干流全長(zhǎng)6397公里(以沱沱河為源),一般稱6300公里。流域總面積一百八十余萬平方公里,年平均入海水量約九千六百余億立方米。以干流長(zhǎng)度和入海水量論,長(zhǎng)江均居世界第三位。",
    "黃河,中國古代也稱河,發(fā)源于中華人民共和國青海省巴顏喀拉山脈,流經(jīng)青海、四川、甘肅、寧夏、內(nèi)蒙古、陜西、山西、河南、山東9個(gè)省區(qū),最后于山東省東營墾利縣注入渤海。干流河道全長(zhǎng)5464千米,僅次于長(zhǎng)江,為中國第二長(zhǎng)河。黃河還是世界第五長(zhǎng)河。",
    "黃河,是中華民族的母親河。作為中華文明的發(fā)祥地,維系炎黃子孫的血脈.是中華民族民族精神與民族情感的象征。",
    "黃河被稱為中華文明的母親河。公元前2000多年華夏族在黃河領(lǐng)域的中原地區(qū)形成、繁衍。",
    "在蘭州的“黃河第一橋”內(nèi)蒙古托克托縣河口鎮(zhèn)以上的黃河河段為黃河上游。",
    "黃河上游根據(jù)河道特性的不同,又可分為河源段、峽谷段和沖積平原三部分。 ",
    "黃河,是中華民族的母親河。"
]
# 分詞
seg = [jieba.lcut(sentence) for sentence in content]
# 去除停用詞 & 標(biāo)點(diǎn)符號(hào)操作
tokenized = []
for sentence in seg:
    words = []
    for word in sentence:
        if word not in stop_word & {'(', ')'}:
            words.append(word)
    tokenized.append(words)
print(tokenized)  # 調(diào)試輸出
# 創(chuàng)建模型
model = Word2Vec(tokenized, sg=1, window=5, min_count=2, negative=1, sample=0.001, hs=1, workers=4)
# 保存模型
model.save("model")

輸出結(jié)果:

Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\Windows\AppData\Local\Temp\jieba.cache
停用詞: {'它', '算', '比', '庶', '針', '乎', '相', '幸', '上', '慢', '叫', '儻', '時(shí)', '出', '爾', '吱', '著', '要', '身', '所', '大', '?', '是', '家', '介', '幾', '隨', '由', '況', '”', '像', '有', '兒', '歸', '果', '簡(jiǎn)', '唷', '您', '啦', '間', '止', '僅', '啊', '喂', '步', '待', ' ', '豈', '料', '二', '或', '結(jié)', '乃', '竟', '人', '方', '若', '無', '3', '哼', '6', '鑒', '莫', '誰', '會(huì)', '們', '嗎', '呸', '讓', '根', '固', '惟', '致', '余', '就', '乘', '拿', '啐', '換', '循', '次', '哩', '代', '死', '類', '\n', '經(jīng)', '始', '問', '較', ':', '咧', '否', '令', '登', '首', '許', '云', '尚', '得', '這', '諸', '夫', '罷', '見', '多', '種', '嘿', '該', '然', '小', '除', '雖', '兩', '呀', '己', '極', '天', '前', '咦', '進(jìn)', '設(shè)', '望', '對(duì)', '彼', '徒', '反', '咚', '$', '哎', '唉', '呼', '噠', '受', '直', '據(jù)', '連', '體', '哇', '寧', '?', '遵', '言', '任', '今', '點(diǎn)', '憑', '緊', '俺', '獨(dú)', '如', '旦', '正', '哦', '下', '已', '打', '接', '呃', '》', '可', '在', '邊', '縱', '何', '叮', '矣', '每', '過', '沿', '則', '盡', '樣', '愿', '!', '全', '唄', '0', '值', '非', '《', '另', '轉(zhuǎn)', '給', '成', '年', '切', '特', '往', '恰', '5', '巴', '處', '依', '噯', '哪', '悉', '拘', '到', '些', '眨', '賴', '巧', '逐', '眼', '自', '2', '說', '此', '越', '基', '消', '哧', '至', '嘩', '很', '毋', '用', '省', '般', '借', '。', '還', '曰', '最', ',', '冒', '述', '誠', '光', '兼', '啥', '個(gè)', '呵', '別', '其', '免', '曾', '繼', '怎', '先', '甚', '使', '譬', '8', '嗚', '再', '鄙', '抑', '候', '了', '總', '以', '他', '都', '倘', '一', '截', '離', '作', '沖', '啪', '道', '分', '喻', '靠', '因', '等', '什', '達(dá)', '噓', '朝', '按', '句', '話', '者', '及', '管', '故', '關(guān)', '外', '嘍', '孰', '兮', '向', '限', '面', '沒', '加', '順', '咳', '賊', '么', '亦', '里', '奈', '各', '照', '嘔', '“', '之', '萬', '于', '似', '9', '我', '而', '7', '少', '從', '怕', '地', '論', '哉', ';', '去', '某', '又', '_', '4', '將', '把', '和', '能', '呢', '猶', '來', '也', '阿', '啷', '便', '與', '內(nèi)', '好', '本', '吧', '齊', '知', '單', '歟', '唯', '跟', '嚇', '喔', '第', '部', '喏', '卻', '嗡', '那', '為', '距', '嗬', '1', '起', '咋', '嘛', '被', '即', '并', '喲', '嗯', '、', '仍', '位', '嘻', '趁', '哈', '凡', '例', '騰', '烏', '焉', '替', '且', '假', '但', '漫', '辦', '同', '才', '中', '她', '舊', '真', '妨', '開', '既', '通', '難', '趕', '咱', '確', '看', '你', '綜', '期', '只', '臨', '具', '肯', '旁', '后', '嘎', '的', '當(dāng)', '不'}
Loading model cost 1.641 seconds.
Prefix dict has been built successfully.
[['長(zhǎng)江', '是', '中國', '第一', '大河', ',', '干流', '全長(zhǎng)', '6397', '公里', '(', '以', '沱沱河', '為源', ')', ',', '一般', '稱', '6300', '公里', '。', '流域', '總面積', '一百八十', '余萬平方公里', ',', '年', '平均', '入海', '水量', '約', '九千', '六百余', '億立方米', '。', '以', '干流', '長(zhǎng)度', '和', '入海', '水量', '論', ',', '長(zhǎng)江', '均', '居', '世界', '第三位', '。'], ['黃河', ',', '中國', '古代', '也', '稱河', ',', '發(fā)源', '于', '中華人民共和國', '青海省', '巴顏喀拉山', '脈', ',', '流經(jīng)', '青海', '、', '四川', '、', '甘肅', '、', '寧夏', '、', '內(nèi)蒙古', '、', '陜西', '、', '山西', '、', '河南', '、', '山東', '9', '個(gè)', '省區(qū)', ',', '最后', '于', '山東省', '東營', '墾利縣', '注入', '渤海', '。', '干流', '河道', '全長(zhǎng)', '5464', '千米', ',', '僅次于', '長(zhǎng)江', ',', '為', '中國', '第二', '長(zhǎng)河', '。', '黃河', '還是', '世界', '第五', '長(zhǎng)河', '。'], ['黃河', ',', '是', '中華民族', '的', '母親河', '。', '作為', '中華文明', '的', '發(fā)祥地', ',', '維系', '炎黃子孫', '的', '血脈', '.', '是', '中華民族', '民族', '精神', '與', '民族', '情感', '的', '象征', '。'], ['黃河', '被', '稱為', '中華文明', '的', '母親河', '。', '公元前', '2000', '多年', '華夏', '族', '在', '黃河', '領(lǐng)域', '的', '中原地區(qū)', '形成', '、', '繁衍', '。'], ['在', '蘭州', '的', '“', '黃河', '第一', '橋', '”', '內(nèi)蒙古', '托克托縣', '河口鎮(zhèn)', '以上', '的', '黃河', '河段', '為', '黃河', '上游', '。'], ['黃河', '上游', '根據(jù)', '河道', '特性', '的', '不同', ',', '又', '可', '分為', '河源', '段', '、', '峽谷', '段', '和', '沖積平原', '三', '部分', '。', ' '], ['黃河', ',', '是', '中華民族', '的', '母親河', '。']]

使用模型

from gensim.models import Word2Vec
# 加載模型
model = Word2Vec.load("model")
# 判斷相似度
sim1 = model.wv.similarity("黃河", "長(zhǎng)江")
print(sim1)
sim2 = model.wv.similarity("黃河", "黃河")
print(sim2)
# 預(yù)測(cè)最接近的人
most_similar = model.wv.most_similar(positive=["黃河", "母親河"], negative=["長(zhǎng)江"])
print(most_similar)

輸出結(jié)果:

0.20415045
0.99999994
[('公里', 0.15817636251449585), ('上游', 0.15374179184436798), ('入海', 0.15248821675777435), ('干流', 0.15130287408828735), ('的', 0.14548806846141815), ('是', 0.11208685487508774), ('段', 0.09545847028493881), ('為', 0.0872812420129776), ('于', 0.05294770747423172), ('長(zhǎng)河', 0.02978350967168808)]

上述內(nèi)容就是Python中如何學(xué)習(xí)NLP自然語言處理基本操作詞向量模型,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI