Task4 文本表示:從one-hot到word2vec

任務:

  • 詞袋模型:離散燃领、高維士聪、稀疏;
  • 分布式表示:連續(xù)柿菩、低維戚嗅、稠密。word2vec詞向量原理并實踐枢舶,用來表示文本懦胞;

詞袋模型

詞集模型: 單詞構成的集合,集合中每個元素都只有一個;
詞袋模型:在詞集的基礎上,如果一個單詞在文檔中出現(xiàn)不止一次,統(tǒng)計其出現(xiàn)的次數(shù);
詞袋在詞集的基礎上增加了頻率的維度,詞集關注的是單詞是否存在,詞袋增加關注了單詞出現(xiàn)的頻率;

當我們要對一篇文章進行特征化,最常見的方式就是詞袋,利用sklearn實踐詞袋模型:


from sklearn.feature_extraction.text import CountVectorizer

corpus = ['This is the first document.',
        'This is the second second document.',
        'And the third one.',
        'Is this the first document?']

# 實例化分詞對象
vectorizer = CountVectorizer(min_df=1)
# 將文本進行詞袋處理
X = vectorizer.fit_transform(corpus)
# 獲取對應的特征名稱
print(vectorizer.get_feature_names())
# 詞袋化
corpus_X = X.toarray()

當使用現(xiàn)有的詞袋特征對其他文本進行特征提取時,可利用詞袋的特征空間,在針對其它文本進行詞袋處理時,,直接使用現(xiàn)有的詞匯表:

# 定義詞袋的特征空間,便于使用現(xiàn)有的詞袋的特征,對其他文本進行特征提取
vocabulary = vectorizer.vocabulary_
# 使用現(xiàn)有的詞匯表對其他文本進行詞袋處理
new_vectorizer = CountVectorizer(min_df=1, vocabulary=vocabulary)

Word2Vec

word2vec 是 Google 于 2013 年開源推出的一個用于獲取 word vector 的工具包;
word2vec是用來生成詞向量的工具凉泄,而詞向量與語言模型有著密切的關系

  1. 原理知識
    • sigmoid函數(shù)
    • 邏輯回歸
    • Bayes 公式
    • Huffman 編碼
      • Huffman 樹
      • Huffman 樹的構造
      • Huffman 編碼

預備知識原理參考鏈接:https://blog.csdn.net/itplus/article/details/37969635

  • 統(tǒng)計語言模型

統(tǒng)計語言模型用來計算一個句子的概率的概率模型躏尉,通常基于一個語料庫來構建后众,假設W=w_1^T := (W_1, W_2, ...,w_T)表示由T個詞W_1, W_2, ...,w_T按順序構成的一個句子胀糜,則 W_1, W_2, ...,w_T的聯(lián)合概率:
p(W)=p(w_1^T) = p(W_1, W_2, ...,w_T)
p(W)為這個句子的概率

  • 計算語言模型的參數(shù)
    • n-gram模型
    • 神經(jīng)概率語言模型

在NLP任務中,機器無法理解文字的含義蒂誉,首先需要做的就是將語言數(shù)學化——詞向量教藻,其中one-hot是一種最簡單的詞向量
但是one-hot存在缺點,容易受到維度災難的困擾右锨,尤其當用在Deep Learning場景時括堤;one-hot還不能很好的刻畫詞與詞之間的相似性。

背景原理知識參考鏈接:https://blog.csdn.net/itplus/article/details/37969817

  1. word2vec中用到的兩個重要模型

CBOW模型,Skip-gram模型

CBOW-Skip-gram網(wǎng)絡結構

其中w(t)代表當前詞語位于句子的位置t

CBOW-Skip-gram模型原理參考鏈接:https://blog.csdn.net/itplus/article/details/37969979
https://blog.csdn.net/itplus/article/details/37998797

  • word2vec實踐:利用gensim實現(xiàn)
    • 第一步:獲得數(shù)據(jù)悄窃,建立語料庫
    • 第二步:分詞
    • 第三步:訓練
    • 第四步:查看效果
      選擇《人民的名義》的小說原文作為語料,原文鏈接:這里
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat May 18 19:53:52 2019

@author: leo
"""

import jieba
import jieba.analyse
from gensim.models import word2vec

# 讀數(shù)據(jù)
def get_file(path):
    with open(path) as f:
        document = f.read()
        
    return document.replace('\n','').replace('\t','').replace('\r','').replace(' ','').replace(' ','')

data = get_file('/Users/leo/Desktop/in_the_name_of_people.txt')

# 加入人名
jieba.suggest_freq('沙瑞金', True)
jieba.suggest_freq('田國富', True)
jieba.suggest_freq('高育良', True)
jieba.suggest_freq('侯亮平', True)
jieba.suggest_freq('鐘小艾', True)
jieba.suggest_freq('陳巖石', True)
jieba.suggest_freq('歐陽菁', True)
jieba.suggest_freq('易學習', True)
jieba.suggest_freq('王大路', True)
jieba.suggest_freq('蔡成功', True)
jieba.suggest_freq('孫連城', True)
jieba.suggest_freq('季昌明', True)
jieba.suggest_freq('丁義珍', True)
jieba.suggest_freq('鄭西坡', True)
jieba.suggest_freq('趙東來', True)
jieba.suggest_freq('高小琴', True)
jieba.suggest_freq('趙瑞龍', True)
jieba.suggest_freq('林華華', True)
jieba.suggest_freq('陸亦可', True)
jieba.suggest_freq('劉新建', True)
jieba.suggest_freq('劉慶祝', True)
# 分詞
data_cut = list(jieba.cut(data))

model = word2vec.Word2Vec([data_cut], hs=1, min_count=1, window=3, size=100)

# 找出沙瑞金最相近的5個詞
req_count = 5
for key in model.wv.similar_by_word('丁義珍', topn = 100):
    if len(key[0]) == 3:
        if req_count == 0:
            break
        req_count -= 1
        print(key[0], key[1])
           
# 查看兩個詞向量相似程度
print(model.wv.similarity('沙瑞金', '高育良'))

存在問題:
jiebe.cut為全模式分詞時,此時輸出的精確度中不存在人名

全模式分詞后word2vec結果

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讥电,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子轧抗,更是在濱河造成了極大的恐慌恩敌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件横媚,死亡現(xiàn)場離奇詭異纠炮,居然都是意外死亡,警方通過查閱死者的電腦和手機灯蝴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門抗碰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绽乔,你說我怎么就攤上這事√及” “怎么了折砸?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沙峻。 經(jīng)常有香客問我睦授,道長,這世上最難降的妖魔是什么摔寨? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任去枷,我火速辦了婚禮,結果婚禮上是复,老公的妹妹穿的比我還像新娘删顶。我一直安慰自己,他們只是感情好淑廊,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布逗余。 她就那樣靜靜地躺著,像睡著了一般季惩。 火紅的嫁衣襯著肌膚如雪录粱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天画拾,我揣著相機與錄音啥繁,去河邊找鬼。 笑死青抛,一個胖子當著我的面吹牛旗闽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼宪睹,長吁一口氣:“原來是場噩夢啊……” “哼愁茁!你這毒婦竟也來了?” 一聲冷哼從身側響起亭病,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鹅很,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后罪帖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體促煮,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年整袁,在試婚紗的時候發(fā)現(xiàn)自己被綠了菠齿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡坐昙,死狀恐怖绳匀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情炸客,我是刑警寧澤疾棵,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站痹仙,受9級特大地震影響是尔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜开仰,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一拟枚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧众弓,春花似錦恩溅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至傻粘,卻和暖如春每窖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弦悉。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工窒典, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稽莉。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓瀑志,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子劈猪,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 本文關鍵詞:NLP昧甘、詞向量、word2vec战得、ELMo充边、語言模型該系列更新的第二篇已在個人微信公眾號「AI極客 」...
    流川楓AI閱讀 27,588評論 6 48
  • 前面的文章主要從理論的角度介紹了自然語言人機對話系統(tǒng)所可能涉及到的多個領域的經(jīng)典模型和基礎知識。這篇文章常侦,甚至之后...
    我偏笑_NSNirvana閱讀 13,930評論 2 64
  • 目前詞向量主要用的技術 word2vec fasttext glove 1 one-host編碼 one-hot編...
    georgeguo閱讀 2,316評論 0 2
  • 我在山頂想你浇冰,因為你像風起,帶來陰帶來晴聋亡,帶來內(nèi)心情緒肘习。 我在林中想你,因為你像空氣坡倔,時時來時時去漂佩,時時在一起。 ...
    張若聽閱讀 206評論 0 0
  • 世界上牛人很多,他們或身懷絕技垢袱,或聰明絕頂,或生財有道港柜,或吃苦耐勞……看中央電視臺《世界聽我說》请契,這個24歲...
    萌耕閱讀 445評論 0 10