中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中如何學習NLP自然語言處理基本操作詞向量模型

發布時間:2021-09-24 14:55:26 來源:億速云 閱讀:110 作者:柒染 欄目:開發技術

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

概述

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

Python中如何學習NLP自然語言處理基本操作詞向量模型

詞向量

我們先來說說詞向量究竟是什么. 當我們把文本交給算法來處理的時候, 計算機并不能理解我們輸入的文本, 詞向量就由此而生了. 簡單的來說, 詞向量就是將詞語轉換成數字組成的向量.

Python中如何學習NLP自然語言處理基本操作詞向量模型

當我們描述一個人的時候, 我們會使用身高體重等種種指標, 這些指標就可以當做向量. 有了向量我們就可以使用不同方法來計算相似度.

Python中如何學習NLP自然語言處理基本操作詞向量模型

那我們如何來描述語言的特征呢? 我們把語言分割成一個個詞, 然后在詞的層面上構建特征.

Python中如何學習NLP自然語言處理基本操作詞向量模型

詞向量維度

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

50 維的詞向量:

Python中如何學習NLP自然語言處理基本操作詞向量模型

用熱度圖表示一下:

Python中如何學習NLP自然語言處理基本操作詞向量模型

Python中如何學習NLP自然語言處理基本操作詞向量模型

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

Word2Vec

Word2Vec 是一個經過預訓練的 2 層神經網絡, 可以幫助我們將單詞轉換為向量. Word2Vec 分為兩種學習的方法: CBOW 和 Skip-Gram.

Python中如何學習NLP自然語言處理基本操作詞向量模型

CBOW 模型

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

Python中如何學習NLP自然語言處理基本操作詞向量模型

Skip-Gram 模型

Skip-Gram 用于預測同一句子中當前單詞前后的特定范圍內的單詞.

Python中如何學習NLP自然語言處理基本操作詞向量模型

Skip-Gram 所需的訓練數據集:

Python中如何學習NLP自然語言處理基本操作詞向量模型

Python中如何學習NLP自然語言處理基本操作詞向量模型

負采樣模型

如果一個語料庫稍微大一些, 可能的結果簡直太多了. 詞向量模型的最后一層相當于 softmax (轉換為概率), 計算起來會非常耗時.

我們可以將輸入改成兩個單詞, 判斷這兩個詞是否為前后對應的輸入和輸出, 即一個二分類任務.

Python中如何學習NLP自然語言處理基本操作詞向量模型

Python中如何學習NLP自然語言處理基本操作詞向量模型

但是我們會發現一個問題, 此時的訓練集構建出來的標簽全為 1, 無法進行較好的訓練. 這時候負采樣模型就派上用場了. (默認為 5 個)

Python中如何學習NLP自然語言處理基本操作詞向量模型

Python中如何學習NLP自然語言處理基本操作詞向量模型

詞向量的訓練過程

1. 初始化詞向量矩陣

Python中如何學習NLP自然語言處理基本操作詞向量模型

Python中如何學習NLP自然語言處理基本操作詞向量模型

2. 神經網絡反向傳播

通過神經網絡反向傳播來計算更新. 此時不光更新權重參數矩陣 W, 也會更新輸入數據.

Python中如何學習NLP自然語言處理基本操作詞向量模型

詞向量模型實戰

格式:

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

參數:

seg: 1 為skip-gram算法, 對低配詞敏感. 默認 sg=0, CBOW算法

window: 句子中當前詞與目標詞時間的最大距離. 3表示在目標詞前看3-b個詞, 后面看b個詞 (b在0-3之間隨機)

min_count: 對詞進行過濾, 頻率小于min-cout的單詞會被忽視, 默認值為5

訓練模型

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

輸出結果:

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

使用模型

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

輸出結果:

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桃江县| 溧水县| 灯塔市| 宁阳县| 太康县| 隆化县| 山西省| 阿勒泰市| 美姑县| 汶川县| 潍坊市| 莫力| 永安市| 襄垣县| 抚州市| 拉萨市| 瑞安市| 阳信县| 道孚县| 图木舒克市| 公主岭市| 衡南县| 凤翔县| 华亭县| 冀州市| 壶关县| 梅河口市| 神池县| 晋中市| 张北县| 牙克石市| 交口县| 宜川县| 金溪县| 唐山市| 甘谷县| 临夏市| 长岛县| 互助| 天祝| 青神县|