2017-03-28 58 views
0

我想用gensim製作word2vec。我聽說詞彙語料庫應該是unicode,所以我把它轉換成unicode。Python Gensim word2vec詞彙表鍵

# -*- encoding:utf-8 -*- 
# !/usr/bin/env python 
import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 
from gensim.models import Word2Vec 
import pprint 

with open('parsed_data.txt', 'r') as f: 
    corpus = map(unicode, f.read().split('\n')) 

model = Word2Vec(size=128, window=5, min_count=5, workers=4) 
model.build_vocab(corpus,keep_raw_vocab=False) 
model.train(corpus) 
model.save('w2v') 

pprint.pprint(model.most_similar(u'너')) 

以上是我的源代碼。這似乎很好。但是,詞彙密鑰存在問題。我想製作使用unicode的韓文word2vec。對於這意味着在英國道歉和它的unicode是\xC0AC\xACFC如果我試圖找到사과在word2vec,關鍵錯誤發生...
而不是\xc0ac\xacfc\xc0ac\xacfc店分別例如字사과。 是什麼原因以及如何解決它?

回答

2

Word2Vec需要將文本示例分解爲單詞 - 標記。看來你只是簡單地向Word2Vec提供字符串,所以當它遍歷它們時,它只會看到單個字符作爲單詞。

韓語是否使用空格來分隔單詞?如果是這樣,請在將單詞列表作爲文本示例交給Word2Vec之前,按空格分隔文本。

如果不是,那麼在將您的句子傳遞給Word2Vec之前,您需要使用一些外部word-tokenizer(不是gensim的一部分)。

+0

Umm ...我給出的輸入是'u'u450 u479 uc2a4',u'uc758',u'uc138 uacc4',u'\ uc801',u'\ uc774',u '\ u11ab',u'\ uc758 \ uc0c1',u'\ ub514 \ uc790 \ uc774 \ ub108',u'\ uc5e0 \ ub9c8 \ ub204 \ uc5d8',u'\ uc6c5 \ uac00 \ ub85c',u'\ uac00',u'\ uc2e4 \ ub0b4',u'\ uc7a5 \ uc2dd',u'\ uc6a9',u'\ uc9c1 \ ubb3c',u'\ ub514 \ uc790 \ uc774 \ ub108',u'\ ub85c' ,u'\ ub098 \ uc11c',u'\ uc5c8',u'\ ub2e4'] '。 unicode字符串列表。這不正確嗎? – Damotorie

+0

這不是你創建'corpus'列表的代碼。 (你的實際代碼與問題中的代碼有什麼不同?)什麼是語料庫[0]?如果它是一個字符串,而不是一個令牌列表,那麼所有的Word2Vec都會看到單個字符。 (並且,如果您的整個詞彙似乎是單字符標記,gensim的最新版本會記錄警告。) – gojomo