国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于gensim的Wiki百科中文word2vec訓練

stdying / 3188人閱讀

摘要:而騰訊和寶馬保時捷,網易和寶馬保時捷將會離得較遠一些。關于的使用方法,可以參考基于的實踐。下面我們分別查看同寶馬和騰訊最相近的前個詞語。可以發現和寶馬相近的詞大都屬于汽車行業,而且是汽車品牌和騰訊相近的詞大都屬于互聯網行業。

Word2Vec簡介

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

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

wiki中文數據預處理

文本數據分詞

gensim word2vec訓練

wiki中文數據預處理

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

使用gensim模塊中的WikiCorpus從bz2中獲取原始文本數據

使用OpenCC將繁體字轉換為簡體字

WikiCorpus獲取原始文本數據

數據處理的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將繁體字轉換為簡體字

這里,需要預先安裝OpenCC,關于OpenCC在linux環境中的安裝方法,請參考這篇文章。僅僅需要兩行linux命令就可以完成繁體字轉換為簡體字的任務,而且速度很快。

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

對于分詞這個任務,我們直接使用了python的jieba分詞模塊。你也可以使用哈工大的ltp或者斯坦福的nltk python接口進行分詞,準確率及權威度挺高的。不過這兩個安裝的時候會花費很長時間,尤其是斯坦福的。關于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訓練

python的gensim模塊提供了word2vec訓練,為我們模型的訓練提供了很大的方便。關于gensim的使用方法,可以參考基于Gensim的Word2Vec實踐。
本次訓練的詞向量大小size為50,訓練窗口為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訓練已經完成,我們得到了想要的模型以及詞向量,并保存到本地。下面我們分別查看同【寶馬】和【騰訊】最相近的前10個詞語。可以發現:和【寶馬】相近的詞大都屬于汽車行業,而且是汽車品牌;和【騰訊】相近的詞大都屬于互聯網行業。

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38691.html

相關文章

  • word2vec

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

    Leck1e 評論0 收藏1162
  • 中文維基百科文本數據獲取與預處理

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

    loostudy 評論0 收藏0
  • 自然語言處理真實項目實戰

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

    王巖威 評論0 收藏0

發表評論

0條評論

stdying

|高級講師

TA的文章

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