2017-12-20 30 views
2

word2vec 유사성 사전을 만들려고합니다. 하나의 사전을 만들 수 있었지만 유사점이 제대로 채워지지 않았습니다. 내 코드에서 아무 것도 놓치고 있습니까?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 

내 코드 :

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() 

내 결과 : 여기

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)] 

은 내 기대 유사성에 대한 ed 출력 : sheungwan, wanchai, chaiwan. 내 스킵 그램이 제대로 작동하지 않는 것 같아요. 이 문제를 어떻게 해결할 수 있습니까?

+0

기본값에서'alpha' 또는'min_alpha'를 변경하지 마십시오. 'train()'을 두 번 이상 호출하거나'alpha '를 직접 관리하지 마라. 합리적인 방법으로 사전에 워드 토큰으로 처리 된 많은 양질의 데이터가 있는지 확인하십시오. 로깅을 활성화하고 모든 단계에서 진행 상황을 보여주는 합리적인 결과를 생성하는지 확인하십시오. 유사한 데이터 세트에 대한 작업 예제로 시작하고 기본 결과를 개선하는 데 도움이된다면 매개 변수 (예 : 'window') 만 변경하십시오. – gojomo

+0

@gojomo, sg 매개 변수로 수행 한 작업이 있습니까? –

답변

2

이미 언급 한대로 alpha 및 기타 내부 매개 변수를 조정할 필요는 없습니다 (필요한 경우가 아니라면 대부분 가능할 수 있습니다).

데이터가 어딘가에 있기 때문에 많은 추가 결과가 발생합니다. Adj_Addr은 무엇인지 모르지만 제공하신 텍스트가 아닙니다 : puiwan, futan, fotan, ... - 위 텍스트에 해당되지 않습니다.

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을 추가 부담)

다음은 작동 할 것처럼 작동 깨끗한 테스트입니다