2017-12-20 20 views
2

私はword2vec類似性辞書を構築しようとしています。私は1つの辞書を構築することができましたが、類似点は正しく配置されていません。私のコードで何かが欠けていますか?Word2Vecをスキップして正しく動作しない

入力サンプル・データ・テキスト

TAK PO LUN UNIT 3 15/F WAYSON COMMERCIAL G 28 CONNAUGHT RD WEST SHEUNG WAN 
- EDDY SUSANTO YAHYA ROOM 1503-05 WESTERN CENTRE 40-50 DES VOEUX W. SHEUNG WAN 
DNA FINANCIAL SYSTEMS INC UNIT 10 19F WAYSON COMMERCIAL 28 CONNAUGHT RD SHEUNG WAN 
G/F 60 PO HING FONG SHEUNG WAN 
10B CENTRAL MANSION 270 QUEENS RD CENTRAL SHEUNG WAN 
AKAMAI INTERNATIONAL BV C/O IADVANTAGE 28/F OF MEGA I-ADVANTAGE 399 CHAI WAN RD CHAI WAN HONG KO HONG KONG 
VICTORIA CHAN F/5E 1-3 FLEMING RD WANCHI WAN CHAI 
HISTREND 365 5/F FOO TAK BUILDING 365 HENNESSY RD WAN CHAI H WAN CHAI 
ROOM 1201 12F CHINACHEM JOHNSO PLAZA 178 186 JOHNSTON RD WAN CHAI 
LUEN WO BUILDING 339 HENNESSY RD 9 FLOOR WAN CHAI HONG KONG 

マイコード:

model.most_similar("wan") 
[('want', 0.6867533922195435), 
('puiwan', 0.6323356032371521), 
('wan.', 0.6132887005805969), 
('wanstreet', 0.5945449471473694), 
('aupuiwan', 0.594132661819458), 
('futan', 0.5883135199546814), 
('fotan', 0.5817855000495911), 
('shanmei', 0.5807071924209595), 
('30-33', 0.5789132118225098), 
('61-63au', 0.5711270570755005)] 

ここに私の期待している:私の結果は

import gensim 
from gensim import corpora,similarities,models 
class AccCorpus(object): 

    def __init__(self): 
     self.path = '' 

    def __iter__(self): 
     for sentence in data["Adj_Addr"]: 
      yield [word.lower() for word in sentence.split()] 

    def build_corpus(): 
     model = gensim.models.word2vec.Word2Vec(alpha=0.05, min_alpha=0.05,window=2,sg=1) 
     sentences = AccCorpus() 
     model.build_vocab(sentences) 
     for epoch in range(1): 
      model.train(sentences,total_examples=model.corpus_count, epochs=model.iter) 
      model.alpha -= 0.002 # decrease the learning rate 
      model.min_alpha = model.alpha # fix the learning rate, no decay 

     model_name = "word2vec_model" 
     model.save(model_name) 
     return model 

model=build_corpus() 

類似性のためのed出力:sheungwan、wanchai、chaiwan。私はスキップグラムが正しく動作していないと推測しています。これをどうすれば解決できますか?

+0

デフォルトから 'alpha'や' min_alpha'を変更しないでください。 'train()'を複数回呼び出さないでください。 'alpha 'を自分で管理しようとしないでください。あなたが合理的な方法でワードトークンに前処理されたたくさんの良いデータを持っていることを確認してください。ロギングを有効にして、すべてのステップが進捗状況を示す合理的な出力を生成していることを確認します。いくつかの同様のデータセットの実際の例から始めて、ベースラインの結果を改善するのに役立っている場合は、(windowなどの)パラメータを変更するだけです。 – gojomo

+0

@gojomo、sgパラメータで何かしていますか –

答えて

2

コメントの中で既に示唆しているように、あなたが必要でないことが確かでない限り、alphaと他の内部パラメータを微調整する必要はありません。

データがどこかの場所にあるため、余分な結果がたくさんあります。 Adj_Addrが何であるか分かりませんが、あなたが提供したテキストだけではありません:puiwanfutanfotan、... - これは上記のテキストにはありません。

import gensim 

text = """TAK PO LUN UNIT 3 15/F WAYSON COMMERCIAL G 28 CONNAUGHT RD WEST SHEUNG WAN 
- EDDY SUSANTO YAHYA ROOM 1503-05 WESTERN CENTRE 40-50 DES VOEUX W. SHEUNG WAN 
DNA FINANCIAL SYSTEMS INC UNIT 10 19F WAYSON COMMERCIAL 28 CONNAUGHT RD SHEUNG WAN 
G/F 60 PO HING FONG SHEUNG WAN 
10B CENTRAL MANSION 270 QUEENS RD CENTRAL SHEUNG WAN 
AKAMAI INTERNATIONAL BV C/O IADVANTAGE 28/F OF MEGA I-ADVANTAGE 399 CHAI WAN RD CHAI WAN HONG KO HONG KONG 
VICTORIA CHAN F/5E 1-3 FLEMING RD WANCHI WAN CHAI 
HISTREND 365 5/F FOO TAK BUILDING 365 HENNESSY RD WAN CHAI H WAN CHAI 
ROOM 1201 12F CHINACHEM JOHNSO PLAZA 178 186 JOHNSTON RD WAN CHAI 
LUEN WO BUILDING 339 HENNESSY RD 9 FLOOR WAN CHAI HONG KONG""" 

sentences = text.split('\n') 

class AccCorpus(object): 
    def __init__(self): 
    self.path = '' 

    def __iter__(self): 
    for sentence in sentences: 
     yield [word.lower() for word in sentence.split()] 

def build_corpus(): 
    model = gensim.models.word2vec.Word2Vec() 
    sentences = AccCorpus() 
    model.build_vocab(sentences) 
    model.train(sentences, total_examples=model.corpus_count, epochs=model.iter) 
    return model 

model = build_corpus() 
print(model.most_similar("wan")) 

結果は次のとおりです:

[('chai', 0.04687393456697464), ('rd', -0.03181878849864006), ('sheung', -0.06769674271345139)] 
- (同様に動作しますが、私は関連部分のみを残し sg=1を追加して自由に感じる)

は、ここではそれが仕事をしたいだけのように動作し、クリーンテストです