日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

使用行業(yè)文本素材訓練自己的word2vec詞向量

 AI量化實驗室 2023-10-12 發(fā)布于北京

深度學習當下炙手可熱,但大部分集中在圖片識別,視頻識別領(lǐng)域。前兩年google開源的word2vec可看做深度學習在NLP文本領(lǐng)域的一大應用,無監(jiān)督,簡法,優(yōu)雅,效果良好。

無論是圖像識別,還是視頻識別,語音還是文本,都需要數(shù)學符號化,計算機才可以處理。詞向量就是把文本里的詞向量化的一種表示。

文本最簡單的處理方式是one-hot,中文叫“獨熱編碼”,比如:

    “話筒”表示為 [0 0 0 1 00 0 0 0 0 0 0 0 0 0 0 ...]

    “麥克”表示為 [0 0 0 0 00 0 0 1 0 0 0 0 0 0 0 ...]

就是按詞表的長度,只有一個1,其余都為0的表示方式。這種方式傳統(tǒng)機器學習(SVM,CRF),或深度學習都可以很好處理。

但有兩個缺陷:一是維數(shù)太高,二是詞語的孤立表示,話筒和麥克也沒什么關(guān)系,它們之間在語義上其實是很近。

它的改進方案就是詞的分布式表示,比如:

[0.792, ?0.177, ?0.107, 0.109, ?0.542, ...]

這種向量維度可就是幾十幾百,這是hinton在1986年提出的表示方式,但如何得到這樣的向量,有許多訓練方法,word2vec就是其中之一。每個詞是空間中的一個向量表示,也就是一個高維的點,點與點之間是有距離的,距離(歐式距離或cos值)越近的,在語義上也越相近。

語言模型是個比較模糊的概念,傳統(tǒng)有專家系統(tǒng)的形式去表征語言模型,幾十年基本沒有進展,后來改用統(tǒng)計模型才有了很大進步。

大概簡單理解一下,”大家喜歡吃蘋果“這句話是正常自然語言的概率有多大,按統(tǒng)計理論可以展開如下:

P(大家,喜歡,吃,蘋果)=p(大家)p(喜歡|大家)p(吃|大家,喜歡)p(蘋果|大家,喜歡,吃)

但問題在于,這個公式雖然簡單,但這么展開下去,維度非常高,普通計算機是無法承受的,也就是計算上不可行的,比如中文有幾千詞匯,這樣排列組合一下,計算量太大了。

后來就有了“N-gram”的簡化。就是只算這個詞前邊的n-1個詞就好了。一般也就是2-gram,google的算力也就3-gram。

假設詞表是20000個詞,那表計算量如下:

這里對所有詞是一視同仁的,只考慮位置。但又有人提出“n-pos”問題,就是考慮當前詞的詞性,然后再分別考慮不同的概率,當然都是很好的研究。

思路清楚了,那下面就是建模和實現(xiàn)了。

google實現(xiàn)的版本,采用了兩個模型:CBOW(連續(xù)詞袋模型)和skip-gram。這里要致謝一下這個圈子里的大神。

gensim里有一個python的實現(xiàn),后面有時間,我們可以用tensorflow自己實現(xiàn)一遍,加深理解,我們先使用gensim里的word2vec來訓練自己的行業(yè)word2vec。

gensim里的word2vec使用是非常簡單的,我們準備好語料,中文用空格分好詞即可。word2vec會遍歷兩輪素材,一輪是建詞表,第二輪才是訓練。

import gensim
from gensim.models import word2vec

# 引入日志配置
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
# 引入數(shù)據(jù)集
sentences = word2vec.Text8Corpus('text8')
#raw_sentences = ["the quick brown fox jumps over the lazy dogs","brown fox brown fox brown fox yoyoyo you go home now to sleep"]
# 切分詞匯
#sentences= [s.split() for s in raw_sentences]
# 構(gòu)建模型
model = word2vec.Word2Vec(sentences, min_count=1)
# 進行相關(guān)性比較
print(model.similarity('man','woman'))

model.save('text8.model')
new_model = gensim.models.Word2Vec.load('text8.model')
print(new_model.similarity('man','woman'))

關(guān)于作者:魏佳斌,互聯(lián)網(wǎng)產(chǎn)品/技術(shù)總監(jiān),北京大學光華管理學院(MBA),特許金融分析師(CFA),資深產(chǎn)品經(jīng)理/碼農(nóng)。偏愛python,深度關(guān)注互聯(lián)網(wǎng)趨勢,人工智能,AI金融量化。致力于使用最前沿的認知技術(shù)去理解這個復雜的世界。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多