Word2Vec Basics#
import logging
from ekorpkit import eKonf
logging.basicConfig(level=logging.WARNING)
print(eKonf.__version__)
0.1.31+3.g3e40284.dirty
import gensim
gensim.__version__
'4.2.0'
English Word2Vec#
Load FOMC Corpus#
corpus_cfg = eKonf.compose(config_group='corpus')
corpus_cfg.name = 'fomc'
corpus_cfg.cache.uri = 'https://github.com/entelecheia/ekorpkit-book/raw/main/assets/data/fomc.zip'
corpus_cfg.data_dir = corpus_cfg.cache.path
corpus_cfg.automerge = True
fomc = eKonf.instantiate(corpus_cfg)
print(fomc)
Corpus : fomc
fomc_minutes = fomc.data[fomc.data.content_type == 'fomc_minutes']
fomc_minutes.head()
id | text | timestamp | content_type | date | speaker | title | |
---|---|---|---|---|---|---|---|
0 | 0 | A meeting of the Federal Open Market Committee... | 1993-02-03 | fomc_minutes | 1993-02-03 | Alan Greenspan | FOMC Meeting Minutes |
1 | 1 | A meeting of the Federal Open Market Committee... | 1993-03-23 | fomc_minutes | 1993-03-23 | Alan Greenspan | FOMC Meeting Minutes |
2 | 2 | A meeting of the Federal Open Market Committee... | 1993-05-18 | fomc_minutes | 1993-05-18 | Alan Greenspan | FOMC Meeting Minutes |
3 | 3 | A meeting of the Federal Open Market Committee... | 1993-07-07 | fomc_minutes | 1993-07-07 | Alan Greenspan | FOMC Meeting Minutes |
4 | 4 | A meeting of the Federal Open Market Committee... | 1993-08-17 | fomc_minutes | 1993-08-17 | Alan Greenspan | FOMC Meeting Minutes |
tk_cfg = eKonf.compose(config_group='preprocessor/tokenizer=nltk')
tk_cfg.nltk.lemmatize = True
tk_cfg.nltk.stem = False
cfg = eKonf.compose(config_group="pipeline")
cfg._pipeline_ = ["tokenize", "extract_tokens", "explode_splits","reset_index", "save_dataframe"]
cfg.tokenize.preprocessor.tokenizer = tk_cfg
cfg.extract_tokens.preprocessor.tokenizer = tk_cfg
cfg.extract_tokens.nouns_only = True
cfg.explode_splits.id_key = "id"
cfg.explode_splits.split_key = "sent_id"
cfg.explode_splits.separator = "\n"
cfg.reset_index.drop_index = True
cfg.save_dataframe.output_dir = '../data/fomc'
cfg.save_dataframe.output_file = 'fomc_minutes.parquet'
df = eKonf.instantiate(cfg, data=fomc_minutes)
df
id | text | timestamp | content_type | date | speaker | title | sent_id | |
---|---|---|---|---|---|---|---|---|
0 | 0 | meeting Federal Open Market Committee office B... | 1993-02-03 | fomc_minutes | 1993-02-03 | Alan Greenspan | FOMC Meeting Minutes | 0 |
1 | 0 | 1993-02-03 | fomc_minutes | 1993-02-03 | Alan Greenspan | FOMC Meeting Minutes | 1 | |
2 | 0 | PRESENT | 1993-02-03 | fomc_minutes | 1993-02-03 | Alan Greenspan | FOMC Meeting Minutes | 2 |
3 | 0 | 1993-02-03 | fomc_minutes | 1993-02-03 | Alan Greenspan | FOMC Meeting Minutes | 3 | |
4 | 0 | Mr. Greenspan Chairman Mr. Corrigan Vice Chair... | 1993-02-03 | fomc_minutes | 1993-02-03 | Alan Greenspan | FOMC Meeting Minutes | 4 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
43699 | 229 | discussion policy normalization consideration ... | 2021-12-15 | fomc_minutes | 2021-12-15 | Jerome Powell | FOMC Meeting Minutes | 308 |
43700 | 229 | 2021-12-15 | fomc_minutes | 2021-12-15 | Jerome Powell | FOMC Meeting Minutes | 309 | |
43701 | 229 | Board Governors Federal Reserve System | 2021-12-15 | fomc_minutes | 2021-12-15 | Jerome Powell | FOMC Meeting Minutes | 310 |
43702 | 229 | 2021-12-15 | fomc_minutes | 2021-12-15 | Jerome Powell | FOMC Meeting Minutes | 311 | |
43703 | 229 | Street Constitution Avenue N.W. Washington DC | 2021-12-15 | fomc_minutes | 2021-12-15 | Jerome Powell | FOMC Meeting Minutes | 312 |
43704 rows × 8 columns
df = df[df.text.str.len() > 0]
print("Total number of sentences : {}".format(len(df)))
df.text.head(10)
Total number of sentences : 21892
0 meeting Federal Open Market Committee office B...
2 PRESENT
4 Mr. Greenspan Chairman Mr. Corrigan Vice Chair...
6 Messrs. Broaddus Jordan Forrestal Parry Altern...
8 Messrs. Hoenig Melzer Syron Presidents Federal...
10 Mr. Kohn Secretary Economist Mr. Bernard Deput...
12 Messrs. R. Davis Lang Lindsey Promisel Rosenbl...
14 Mr. McDonough Manager System Open Market Account
16 Ms. Greene Deputy Manager Foreign Operations
18 Ms. Lovett,2 Deputy Manager Domestic Operations
Name: text, dtype: object
sentences = []
for sentence in df.text:
tokens = sentence.lower().split()
if len(tokens) > 5:
sentences.append(sentence.lower().split())
from gensim.models import Word2Vec, KeyedVectors
model = Word2Vec(
sentences=sentences, vector_size=100, window=5, min_count=5, workers=4, sg=0
)
Word2Vec Parameters:
vector_size : int, optional
Dimensionality of the word vectors.
window : int, optional
Maximum distance between the current and predicted word within a sentence.
min_count : int, optional
Ignores all words with total frequency lower than this.
workers : int, optional
Use these many worker threads to train the model (=faster training with multicore machines).
sg : {0, 1}, optional
Training algorithm: 1 for skip-gram; otherwise CBOW.
model_result = model.wv.most_similar("fomc")
print(model_result)
[('meeting', 0.7261571884155273), ('call', 0.7087838053703308), ('conference', 0.706003725528717), ('minute', 0.7013736963272095), ('release', 0.6472852230072021), ('press', 0.635810136795044), ('videoconference', 0.6349100470542908), ('statement', 0.6306827068328857), ('announcement', 0.622832715511322), ('morning', 0.6162055730819702)]
model.wv.save_word2vec_format('../data/fomc/fomc_w2v.mdl')
loaded_model = KeyedVectors.load_word2vec_format("../data/fomc/fomc_w2v.mdl")
model_result = loaded_model.most_similar("fomc")
print(model_result)
[('meeting', 0.7261571884155273), ('call', 0.7087838053703308), ('conference', 0.706003725528717), ('minute', 0.7013736963272095), ('release', 0.6472852230072021), ('press', 0.635810136795044), ('videoconference', 0.6349100470542908), ('statement', 0.6306827068328857), ('announcement', 0.622832715511322), ('morning', 0.6162055730819702)]
Korean Word2Vec#
Load BOK Minutes Corpus#
corpus_cfg = eKonf.compose(config_group='corpus')
corpus_cfg.name = 'bok_minutes'
corpus_cfg.cache.uri = 'https://github.com/entelecheia/ekorpkit-book/raw/main/assets/data/bok_minutes.zip'
corpus_cfg.data_dir = corpus_cfg.cache.path
corpus_cfg.automerge = True
bok = eKonf.instantiate(corpus_cfg)
print(bok)
Corpus : bok_minutes
bok_minutes = bok.data.copy()
bok_minutes.head()
id | text | mdate | rdate | filename | |
---|---|---|---|---|---|
0 | 0 | Economic Situation\n일부 위원은 반도체시장의 재고조정 지속으로 반도... | 2005-03-10 10:00:00 | 2005-05-13 16:00:00 | BOK_20050310_20050513 |
1 | 1 | Economic Situation\n일부 위원은 소비회복의 시기와 폭을 가늠하기 위... | 2005-04-07 10:00:00 | 2005-05-24 16:00:00 | BOK_20050407_20050524 |
2 | 2 | Economic Situation\n일부 위원은 지난해 풍작에 따른 효과와 금년초 ... | 2005-05-12 10:00:00 | 2005-06-28 16:00:00 | BOK_20050512_20050628 |
3 | 3 | Economic Situation\n일부 위원은 최근 소비재판매액 증가세가 다소 둔... | 2005-06-09 10:00:00 | 2005-07-26 16:00:00 | BOK_20050609_20050726 |
4 | 4 | Economic Situation\n일부 위원은 최근 이란의 새 대통령 취임 이후 ... | 2005-07-07 10:00:00 | 2005-08-23 16:00:00 | BOK_20050707_20050823 |
tk_cfg = eKonf.compose(config_group='preprocessor/tokenizer=mecab_econ')
cfg = eKonf.compose(config_group="pipeline")
cfg._pipeline_ = ["tokenize", "extract_tokens", "explode_splits","reset_index", "save_dataframe"]
cfg.tokenize.preprocessor.tokenizer = tk_cfg
cfg.extract_tokens.preprocessor.tokenizer = tk_cfg
cfg.extract_tokens.nouns_only = True
cfg.explode_splits.id_key = "id"
cfg.explode_splits.split_key = "sent_id"
cfg.explode_splits.separator = "\n"
cfg.reset_index.drop_index = True
cfg.save_dataframe.output_dir = '../data/bok'
cfg.save_dataframe.output_file = 'bok_minutes.parquet'
df = eKonf.instantiate(cfg, data=bok_minutes)
df
id | text | mdate | rdate | filename | sent_id | |
---|---|---|---|---|---|---|
0 | 0 | Economic Situation | 2005-03-10 10:00:00 | 2005-05-13 16:00:00 | BOK_20050310_20050513 | 0 |
1 | 0 | 일부 위원 반도체시장 재고조정 지속 반도체 가격 하락 불구 중 반도체 제조 장비 투... | 2005-03-10 10:00:00 | 2005-05-13 16:00:00 | BOK_20050310_20050513 | 1 |
2 | 0 | 관련 부서 반도체 경기 인식 것 반도체 가격 폭 하락 데 기인 것 가격 하락 반면 ... | 2005-03-10 10:00:00 | 2005-05-13 16:00:00 | BOK_20050310_20050513 | 2 |
3 | 0 | 위원 분기 중 경제성장률 당초 전망 수 보고 내용 관련 경우 GDP 마이너스 갭 축... | 2005-03-10 10:00:00 | 2005-05-13 16:00:00 | BOK_20050310_20050513 | 3 |
4 | 0 | 관련 부서 분기 중 경제성장률 경기회복 시기 경우 GDP 갭 축소 수요 측면 물가 ... | 2005-03-10 10:00:00 | 2005-05-13 16:00:00 | BOK_20050310_20050513 | 4 |
... | ... | ... | ... | ... | ... | ... |
33852 | 162 | 앞 코로나 충격 회복 해외 완화적 통화정책 조정 것 예상 | 2021-11-25 10:00:00 | 2021-12-14 16:00:00 | BOK_20211125_20211214 | 337 |
33853 | 162 | 글로벌 공급망 재편 기후변화 디지털 경제 전환 등 가속 화 가운데 미 중 갈등 중국... | 2021-11-25 10:00:00 | 2021-12-14 16:00:00 | BOK_20211125_20211214 | 338 |
33854 | 162 | 향후 경제 회복세 물가 흐름 금융시장 상황 경제 주체 들 수용 등 점검 금리 중립적... | 2021-11-25 10:00:00 | 2021-12-14 16:00:00 | BOK_20211125_20211214 | 339 |
33855 | 162 | 2021-11-25 10:00:00 | 2021-12-14 16:00:00 | BOK_20211125_20211214 | 340 | |
33856 | 162 | Government s View | 2021-11-25 10:00:00 | 2021-12-14 16:00:00 | BOK_20211125_20211214 | 341 |
33857 rows × 6 columns
df = df[df.text.str.len() > 0]
print("Total number of sentences : {}".format(len(df)))
df.text.head(10)
Total number of sentences : 33027
0 Economic Situation
1 일부 위원 반도체시장 재고조정 지속 반도체 가격 하락 불구 중 반도체 제조 장비 투...
2 관련 부서 반도체 경기 인식 것 반도체 가격 폭 하락 데 기인 것 가격 하락 반면 ...
3 위원 분기 중 경제성장률 당초 전망 수 보고 내용 관련 경우 GDP 마이너스 갭 축...
4 관련 부서 분기 중 경제성장률 경기회복 시기 경우 GDP 갭 축소 수요 측면 물가 ...
5 위원 분기 중 국제유가 현재 브렌트유 기준 두바이유 기준 지속 소비자물가 중반 것 ...
6 관련 부서 유가 현재 정도 상승 소비자물가 중반 상승 것 예상 이상기후 농수산물 가...
7 일부 위원 관련 부서 작성 주요 경제지표 설비투자 작년 전년동기대비 증가세 이후 감...
8 관련 부서 설비투자 작년 분기 증가세 전환 동안 대 증가세 유지 분기 감소세 수준면...
9 위원 GDP 갭 관련 분기 분기 경제성장률 상승 정도 시차 GDP 갭 효과 것 성장...
Name: text, dtype: object
sentences = []
for sentence in df.text:
tokens = sentence.lower().split()
if len(tokens) > 5:
sentences.append(sentence.lower().split())
from gensim.models import Word2Vec, KeyedVectors
model = Word2Vec(
sentences=sentences, vector_size=100, window=5, min_count=5, workers=4, sg=0
)
model_result = model.wv.most_similar("금통위")
print(model_result)
[('회의', 0.8942065238952637), ('금융통화위원회', 0.8351814150810242), ('통방', 0.8271216750144958), ('fomc', 0.8267607092857361), ('개최', 0.7971529960632324), ('지난번', 0.791086733341217), ('한국은행', 0.7783183455467224), ('결문', 0.7717291116714478), ('지난달', 0.7497071623802185), ('금번', 0.7485520243644714)]
model.wv.save_word2vec_format('../data/fomc/bok_w2v.mdl')
loaded_model = KeyedVectors.load_word2vec_format("../data/fomc/bok_w2v.mdl")
model_result = loaded_model.most_similar("금통위")
print(model_result)
[('회의', 0.8942065238952637), ('금융통화위원회', 0.8351814150810242), ('통방', 0.8271216750144958), ('fomc', 0.8267607092857361), ('개최', 0.7971529960632324), ('지난번', 0.791086733341217), ('한국은행', 0.7783183455467224), ('결문', 0.7717291116714478), ('지난달', 0.7497071623802185), ('금번', 0.7485520243644714)]
model_result = loaded_model.most_similar("금리")
print(model_result)
[('장기금리', 0.7175424695014954), ('단기금리', 0.7011380791664124), ('정책금리', 0.6988612413406372), ('수신금리', 0.6762762665748596), ('수익률곡선', 0.6748917102813721), ('가산금리', 0.6711479425430298), ('시장금리', 0.644707977771759), ('대출금리', 0.6405514478683472), ('지급준비율', 0.6337494254112244), ('금리수준', 0.6313076019287109)]