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

任務(wù):

  • 詞袋模型:離散、高維、稀疏;
  • 分布式表示:連續(xù)、低維、稠密。word2vec詞向量原理并實(shí)踐,用來表示文本;

詞袋模型

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

當(dāng)我們要對一篇文章進(jìn)行特征化,最常見的方式就是詞袋,利用sklearn實(shí)踐詞袋模型:


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?']

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

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

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

Word2Vec

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

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

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

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

統(tǒng)計(jì)語言模型用來計(jì)算一個(gè)句子的概率的概率模型,通?;谝粋€(gè)語料庫來構(gòu)建,假設(shè)W=w_1^T := (W_1, W_2, ...,w_T)表示由T個(gè)詞W_1, W_2, ...,w_T按順序構(gòu)成的一個(gè)句子,則 W_1, W_2, ...,w_T的聯(lián)合概率:
p(W)=p(w_1^T) = p(W_1, W_2, ...,w_T)
p(W)為這個(gè)句子的概率

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

在NLP任務(wù)中,機(jī)器無法理解文字的含義,首先需要做的就是將語言數(shù)學(xué)化——詞向量,其中one-hot是一種最簡單的詞向量
但是one-hot存在缺點(diǎn),容易受到維度災(zāi)難的困擾,尤其當(dāng)用在Deep Learning場景時(shí);one-hot還不能很好的刻畫詞與詞之間的相似性。

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

  1. word2vec中用到的兩個(gè)重要模型

CBOW模型,Skip-gram模型

CBOW-Skip-gram網(wǎng)絡(luò)結(jié)構(gòu)

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

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

  • word2vec實(shí)踐:利用gensim實(shí)現(xiàn)
    • 第一步:獲得數(shù)據(jù),建立語料庫
    • 第二步:分詞
    • 第三步:訓(xùn)練
    • 第四步:查看效果
      選擇《人民的名義》的小說原文作為語料,原文鏈接:這里
#!/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('易學(xué)習(xí)', 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個(gè)詞
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])
           
# 查看兩個(gè)詞向量相似程度
print(model.wv.similarity('沙瑞金', '高育良'))

存在問題:
當(dāng)jiebe.cut為全模式分詞時(shí),此時(shí)輸出的精確度中不存在人名

全模式分詞后word2vec結(jié)果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文關(guān)鍵詞:NLP、詞向量、word2vec、ELMo、語言模型該系列更新的第二篇已在個(gè)人微信公眾號「AI極客 」...
    流川楓AI閱讀 27,910評論 6 48
  • 前面的文章主要從理論的角度介紹了自然語言人機(jī)對話系統(tǒng)所可能涉及到的多個(gè)領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識。這篇文章,甚至之后...
    我偏笑_NSNirvana閱讀 14,431評論 2 64
  • 目前詞向量主要用的技術(shù) word2vec fasttext glove 1 one-host編碼 one-hot編...
    georgeguo閱讀 2,602評論 0 2
  • 我在山頂想你,因?yàn)槟阆耧L(fēng)起,帶來陰帶來晴,帶來內(nèi)心情緒。 我在林中想你,因?yàn)槟阆窨諝猓瑫r(shí)時(shí)來時(shí)時(shí)去,時(shí)時(shí)在一起。 ...
    張若聽閱讀 229評論 0 0
  • 世界上牛人很多,他們或身懷絕技,或聰明絕頂,或生財(cái)有道,或吃苦耐勞……看中央電視臺《世界聽我說》,這個(gè)24歲...
    萌耕閱讀 485評論 0 10

友情鏈接更多精彩內(nèi)容