您好,登錄后才能下訂單哦!
本篇文章為大家展示了Python中如何學習NLP自然語言處理基本操作詞向量模型,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
從今天開始我們將開啟一段自然語言處理 (NLP) 的旅程. 自然語言處理可以讓來處理, 理解, 以及運用人類的語言, 實現機器語言和人類語言之間的溝通橋梁.
我們先來說說詞向量究竟是什么. 當我們把文本交給算法來處理的時候, 計算機并不能理解我們輸入的文本, 詞向量就由此而生了. 簡單的來說, 詞向量就是將詞語轉換成數字組成的向量.
當我們描述一個人的時候, 我們會使用身高體重等種種指標, 這些指標就可以當做向量. 有了向量我們就可以使用不同方法來計算相似度.
那我們如何來描述語言的特征呢? 我們把語言分割成一個個詞, 然后在詞的層面上構建特征.
詞向量的維度越高, 其所能提供的信息也就越多, 計算結果的可靠性就更值得信賴.
50 維的詞向量:
用熱度圖表示一下:
從上圖我們可以看出, 相似的詞在特征表達中比較相似. 由此也可以證明詞的特征是有意義的.
Word2Vec 是一個經過預訓練的 2 層神經網絡, 可以幫助我們將單詞轉換為向量. Word2Vec 分為兩種學習的方法: CBOW 和 Skip-Gram.
CBOW (Continuous Bag-of-Words) 是根據單詞周圍的上下文來預測中間的詞. 如圖:
Skip-Gram 用于預測同一句子中當前單詞前后的特定范圍內的單詞.
Skip-Gram 所需的訓練數據集:
如果一個語料庫稍微大一些, 可能的結果簡直太多了. 詞向量模型的最后一層相當于 softmax (轉換為概率), 計算起來會非常耗時.
我們可以將輸入改成兩個單詞, 判斷這兩個詞是否為前后對應的輸入和輸出, 即一個二分類任務.
但是我們會發現一個問題, 此時的訓練集構建出來的標簽全為 1, 無法進行較好的訓練. 這時候負采樣模型就派上用場了. (默認為 5 個)
通過神經網絡反向傳播來計算更新. 此時不光更新權重參數矩陣 W, 也會更新輸入數據.
格式:
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自然語言處理基本操作詞向量模型,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。