成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于gensim的Wiki百科中文word2vec訓(xùn)練

stdying / 3198人閱讀

摘要:而騰訊和寶馬保時捷,網(wǎng)易和寶馬保時捷將會離得較遠(yuǎn)一些。關(guān)于的使用方法,可以參考基于的實踐。下面我們分別查看同寶馬和騰訊最相近的前個詞語??梢园l(fā)現(xiàn)和寶馬相近的詞大都屬于汽車行業(yè),而且是汽車品牌和騰訊相近的詞大都屬于互聯(lián)網(wǎng)行業(yè)。

Word2Vec簡介

Word2Vec是詞(Word)的一種表示方式。不同于one-hot vector,word2vec可以通過計算各個詞之間的距離,來表示詞與詞之間的相似度。word2vec提取了更多的特征,它使得具有相同上下文語義的詞盡可能離得近一些,而不太相關(guān)的詞盡可能離得較遠(yuǎn)一些。例如,【騰訊】和【網(wǎng)易】兩個詞向量將會離得很近,同理【寶馬】和【保時捷】兩個詞向量將會離得很近。而【騰訊】和【寶馬】/【保時捷】,【網(wǎng)易】和【寶馬】/【保時捷】將會離得較遠(yuǎn)一些。因為【騰訊】和【網(wǎng)易】都同屬于互聯(lián)網(wǎng)類目,而【寶馬】和【保時捷】都同屬于汽車類目。人以類聚,物以群分嘛!互聯(lián)網(wǎng)圈子中談的畢竟都是互聯(lián)網(wǎng)相關(guān)的話題,而汽車圈子中談?wù)摰亩际呛推囅嚓P(guān)的話題。

我們怎么得到一個詞的word2vec呢?下面我們將介紹如何使用python gensim得到我們想要的詞向量??偟膩碚f,包括以下幾個步驟:

wiki中文數(shù)據(jù)預(yù)處理

文本數(shù)據(jù)分詞

gensim word2vec訓(xùn)練

wiki中文數(shù)據(jù)預(yù)處理

首先,下載wiki中文數(shù)據(jù):zhwiki-latest-pages-articles.xml.bz2。因為zhwiki數(shù)據(jù)中包含很多繁體字,所以我們想獲得簡體語料庫,接下來需要做以下兩件事:

使用gensim模塊中的WikiCorpus從bz2中獲取原始文本數(shù)據(jù)

使用OpenCC將繁體字轉(zhuǎn)換為簡體字

WikiCorpus獲取原始文本數(shù)據(jù)

數(shù)據(jù)處理的python代碼如下:

from __future__ import print_function
from gensim.corpora import WikiCorpus
import jieba
import codecs
import os
import six
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
import multiprocessing

 
class Config:
    data_path = "xxx/zhwiki"
    zhwiki_bz2 = "zhwiki-latest-pages-articles.xml.bz2"
    zhwiki_raw = "zhwiki_raw.txt"
    zhwiki_raw_t2s = "zhwiki_raw_t2s.txt"
    zhwiki_seg_t2s = "zhwiki_seg.txt"
    embedded_model_t2s = "embedding_model_t2s/zhwiki_embedding_t2s.model"
    embedded_vector_t2s = "embedding_model_t2s/vector_t2s"
 
 
def dataprocess(_config):
    i = 0
    if six.PY3:
        output = open(os.path.join(_config.data_path, _config.zhwiki_raw), "w")
    output = codecs.open(os.path.join(_config.data_path, _config.zhwiki_raw), "w")
    wiki = WikiCorpus(os.path.join(_config.data_path, _config.zhwiki_bz2), lemmatize=False, dictionary={})
    for text in wiki.get_texts():
        if six.PY3:
            output.write(b" ".join(text).decode("utf-8", "ignore") + "
")
        else:
            output.write(" ".join(text) + "
")
        i += 1
        if i % 10000 == 0:
            print("Saved " + str(i) + " articles")
    output.close()
    print("Finished Saved " + str(i) + " articles")

config = Config()
dataprocess(config)
使用OpenCC將繁體字轉(zhuǎn)換為簡體字

這里,需要預(yù)先安裝OpenCC,關(guān)于OpenCC在linux環(huán)境中的安裝方法,請參考這篇文章。僅僅需要兩行l(wèi)inux命令就可以完成繁體字轉(zhuǎn)換為簡體字的任務(wù),而且速度很快。

$ cd /xxx/zhwiki/
$ opencc -i zhwiki_raw.txt -o zhwiki_t2s.txt -c t2s.json
文本數(shù)據(jù)分詞

對于分詞這個任務(wù),我們直接使用了python的jieba分詞模塊。你也可以使用哈工大的ltp或者斯坦福的nltk python接口進(jìn)行分詞,準(zhǔn)確率及權(quán)威度挺高的。不過這兩個安裝的時候會花費(fèi)很長時間,尤其是斯坦福的。關(guān)于jieba的分詞處理代碼,參考如下:

def is_alpha(tok):
    try:
        return tok.encode("ascii").isalpha()
    except UnicodeEncodeError:
        return False


def zhwiki_segment(_config, remove_alpha=True):
    i = 0
    if six.PY3:
        output = open(os.path.join(_config.data_path, _config.zhwiki_seg_t2s), "w", encoding="utf-8")
    output = codecs.open(os.path.join(_config.data_path, _config.zhwiki_seg_t2s), "w", encoding="utf-8")
    print("Start...")
    with codecs.open(os.path.join(_config.data_path, _config.zhwiki_raw_t2s), "r", encoding="utf-8") as raw_input:
        for line in raw_input.readlines():
            line = line.strip()
            i += 1
            print("line " + str(i))
            text = line.split()
            if True:
                text = [w for w in text if not is_alpha(w)]
            word_cut_seed = [jieba.cut(t) for t in text]
            tmp = ""
            for sent in word_cut_seed:
                for tok in sent:
                    tmp += tok + " "
            tmp = tmp.strip()
            if tmp:
                output.write(tmp + "
")
        output.close()

zhwiki_segment(config)
gensim word2vec訓(xùn)練

python的gensim模塊提供了word2vec訓(xùn)練,為我們模型的訓(xùn)練提供了很大的方便。關(guān)于gensim的使用方法,可以參考基于Gensim的Word2Vec實踐。
本次訓(xùn)練的詞向量大小size為50,訓(xùn)練窗口為5,最小詞頻為5,并使用了多線程,具體代碼如下:

def word2vec(_config, saved=False):
    print("Start...")
    model = Word2Vec(LineSentence(os.path.join(_config.data_path, _config.zhwiki_seg_t2s)),
                     size=50, window=5, min_count=5, workers=multiprocessing.cpu_count())
    if saved:
        model.save(os.path.join(_config.data_path, _config.embedded_model_t2s))
        model.save_word2vec_format(os.path.join(_config.data_path, _config.embedded_vector_t2s), binary=False)
    print("Finished!")
    return model
 
 
def wordsimilarity(word, model):
    semi = ""
    try:
        semi = model.most_similar(word, topn=10)
    except KeyError:
        print("The word not in vocabulary!")
    for term in semi:
        print("%s,%s" % (term[0],term[1]))

model = word2vec(config, saved=True)

word2vec訓(xùn)練已經(jīng)完成,我們得到了想要的模型以及詞向量,并保存到本地。下面我們分別查看同【寶馬】和【騰訊】最相近的前10個詞語??梢园l(fā)現(xiàn):和【寶馬】相近的詞大都屬于汽車行業(yè),而且是汽車品牌;和【騰訊】相近的詞大都屬于互聯(lián)網(wǎng)行業(yè)。

>>> wordsimilarity(word=u"寶馬", model=model)
保時捷,0.92567974329
固特異,0.888278841972
勞斯萊斯,0.884045600891
奧迪,0.881808757782
馬自達(dá),0.881799697876
亞菲特,0.880708634853
歐寶,0.877104878426
雪鐵龍,0.876984715462
瑪莎拉蒂,0.868475496769
桑塔納,0.865387916565

>>> wordsimilarity(word=u"騰訊", model=model)
網(wǎng)易,0.880213916302
優(yōu)酷,0.873666107655
騰訊網(wǎng),0.87026232481
廣州日報,0.859486758709
微信,0.835543811321
天涯社區(qū),0.834927380085
李彥宏,0.832848489285
土豆網(wǎng),0.831390202045
團(tuán)購,0.829696238041
搜狐網(wǎng),0.825544642448

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38691.html

相關(guān)文章

  • word2vec

    Word2Vec是一種流行的自然語言處理技術(shù),它可以將單詞轉(zhuǎn)換為向量,使得計算機(jī)能夠更好地理解和處理語言。在本文中,我們將討論如何使用Python編寫Word2Vec模型。 首先,我們需要安裝Gensim庫,它是一個Python庫,用于實現(xiàn)Word2Vec模型。您可以使用以下命令在終端中安裝Gensim: pip install gensim 接下來,我們需要準(zhǔn)備我們的語料庫。語料庫是我...

    Leck1e 評論0 收藏1162
  • 中文維基百科文本數(shù)據(jù)獲取與預(yù)處理

    摘要:下載數(shù)據(jù)方法使用官方的數(shù)據(jù)最新打包的中文文檔下載地址是。中文維基數(shù)據(jù)繁簡混雜大家都說存在這個問題,但的網(wǎng)站是將繁體中文和簡體中文分開處理的,所以一直覺得從數(shù)據(jù)庫到結(jié)構(gòu)都應(yīng)有方法將兩者區(qū)分開,暫罷,待有空研究其數(shù)據(jù)時再議。 照例,先講下環(huán)境,Mac OSX 10.11.2 ,Python 3.4.3。 下載數(shù)據(jù) 方法1:使用官方dump的xml數(shù)據(jù) 最新打包的中文文檔下載地址是:http...

    loostudy 評論0 收藏0
  • 自然語言處理真實項目實戰(zhàn)

    摘要:在自然語言處理中,一個很重要的技術(shù)手段就是將文檔轉(zhuǎn)換為一個矢量,這個過程一般是使用這個庫進(jìn)行處理的。自然語言處理中,一般來說,代表詞。自然語言預(yù)處理中,一個很重要的步驟就是將你收集的句子進(jìn)行分詞,將一個句子分解成詞的列表。 前言 本文根據(jù)實際項目撰寫,由于項目保密要求,源代碼將進(jìn)行一定程度的刪減。本文撰寫的目的是進(jìn)行公司培訓(xùn),請勿以任何形式進(jìn)行轉(zhuǎn)載。由于是日語項目,用到的分詞軟件等,在...

    王巖威 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<