import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
matplotlib.rc('font', family=['IPAexGothic'])
%matplotlib inline
import sembei as sb
with open('/path/to/jawiki-latest-pages-articles_text_10M.txt',
mode='r', encoding='utf-8', errors='ignore') as f:
corpus_str = ''.join(line.replace('\n', ' ') for line in f.readlines())
len(corpus_str)
3952451
corpus_str[100000:100100]
'別については、平安時代末期にはすでにいずれもの音となり発音上の区別が無くなっていたことにより、相当な表記の揺れがあり、格助詞の「を」を除き前例による基準を見出すことができなかった。そこで『下官集』では'
%%time
n_extract_tuple = [(1, 3000), (2, 100000), (3, 100000), (4, 100000), (5, 100000),
(6, 70000), (7, 10000), (8, 10000)]
vocabulary_all = sb.utils.ngram.extract_topn_ngram_lossycounting(
corpus_str, width_ngram=len(n_extract_tuple), n_extract_tuple=n_extract_tuple,
epsilon=1e-7, support_threshold=1e-7, n_processes=20)
size_vocabulary_all = len(vocabulary_all)
min count : ('耀', 5) 0 # of 1-gram : 4295 Coverage : 0.9993060002514895 min count : ('。奇', 2) 0 # of 2-gram : 208807 Coverage : 0.9672782787186989 min count : ('り、厳', 5) 0 # of 3-gram : 930381 Coverage : 0.6883371862168564 min count : ('評だった', 5) 0 # of 4-gram : 1738573 Coverage : 0.47033549562031257 min count : ('気温が30', 4) 0 # of 5-gram : 2355014 Coverage : 0.33733119019059316 min count : ('。 ; ラン', 4) 0 # of 6-gram : 2793533 Coverage : 0.22495332642960025 min count : ('。 * 11月2', 10) 0 # of 8-gram : 3304594 Coverage : 0.0692668928722962 min count : ('受賞歴 == ', 13) 0 # of 7-gram : 3095326 Coverage : 0.08868623545238132 CPU times: user 242 ms, sys: 135 ms, total: 377 ms Wall time: 5.62 s
sembei = sb.embed.Sembei(corpus_str, vocabulary=vocabulary_all, dim=200,
n_iter_rsvd=6, wide_window=False)
2017-03-05 22:37:03.763815 Parameters : size_vocabulary : 493000 dim : 200 size_window : 1 wide_window : False n_iter_rsvd : 6 max_n_ngram : 8 inc : 1
%%time
sembei.construct_cooccurrence_matrix(n_cores=4, n_chunk=40, n_chunk_pool=10)
# of nonzero : 44028048 size : 493000x986000 density : 0.009057442737884131 CPU times: user 14 s, sys: 4.55 s, total: 18.5 s Wall time: 37.4 s
%%time
sembei.compute()
CPU times: user 7min 19s, sys: 32.2 s, total: 7min 51s Wall time: 3min 11s
vectors = sembei.get_vectors(gamma=1e-6)
vectors.sample(n=10)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
バチョ | 0.077998 | -0.037611 | -0.020097 | -0.066258 | 0.010417 | -0.140067 | -0.106383 | 0.088268 | -0.054278 | -0.086803 | ... | 0.020286 | -0.104530 | 0.010540 | -0.021246 | 0.008079 | 0.038633 | -0.044461 | 0.046050 | -0.068043 | -0.162837 |
語) | 0.056905 | -0.000030 | 0.062438 | -0.011356 | 0.052454 | -0.033687 | 0.019676 | -0.020970 | 0.055687 | -0.087037 | ... | 0.127746 | -0.132135 | 0.087781 | -0.057754 | 0.124884 | 0.074581 | 0.011535 | -0.043010 | -0.049325 | 0.105588 |
0-02 | 0.037308 | 0.145455 | -0.045877 | 0.030019 | -0.032574 | 0.047172 | 0.013472 | 0.036119 | 0.029550 | 0.032121 | ... | 0.080449 | 0.019541 | 0.141052 | -0.087551 | 0.016398 | -0.012597 | 0.074907 | 0.028787 | 0.077165 | -0.015193 |
lu-r | 0.014693 | 0.018605 | 0.031527 | -0.042050 | 0.134051 | 0.138170 | -0.100017 | 0.001874 | 0.014674 | 0.020066 | ... | -0.053971 | 0.064431 | -0.076410 | -0.051773 | 0.129474 | 0.167587 | -0.199108 | -0.071694 | -0.073959 | -0.077074 |
* × | 0.103788 | 0.006394 | 0.128155 | -0.055478 | -0.057030 | -0.013949 | -0.009306 | 0.048166 | -0.165246 | 0.062002 | ... | 0.031081 | 0.026098 | 0.059643 | -0.044120 | 0.010884 | 0.020322 | 0.037533 | 0.014124 | -0.088021 | -0.008631 |
放送(A | 0.033215 | 0.004244 | 0.020444 | -0.012796 | 0.030776 | 0.006534 | -0.063223 | -0.009870 | -0.015151 | -0.019767 | ... | -0.001466 | -0.028490 | 0.042410 | -0.029716 | -0.039965 | 0.058726 | -0.016588 | 0.000103 | 0.004351 | 0.068114 |
南條 | 0.092183 | 0.025092 | -0.040878 | -0.210191 | -0.075419 | 0.045938 | -0.019855 | 0.007060 | -0.114902 | 0.094371 | ... | -0.053765 | 0.010106 | 0.100130 | 0.042323 | 0.100870 | -0.067852 | 0.063837 | -0.159801 | 0.059474 | -0.039502 |
、ソクラテス | 0.098753 | -0.069497 | -0.128208 | -0.042553 | -0.016165 | 0.023803 | 0.017016 | -0.036826 | -0.002750 | 0.006691 | ... | 0.066177 | 0.111697 | 0.058886 | -0.041210 | 0.048598 | 0.025722 | 0.046111 | 0.028791 | -0.068115 | 0.025351 |
*1983年 | 0.074382 | 0.064198 | 0.026473 | -0.097615 | 0.036517 | -0.008862 | 0.090672 | -0.014979 | -0.077349 | 0.021358 | ... | -0.129474 | 0.024275 | 0.068709 | -0.052284 | 0.059597 | 0.026180 | 0.068189 | -0.032604 | 0.016550 | 0.003851 |
現状 | 0.127993 | -0.071221 | -0.120712 | -0.151789 | 0.030281 | 0.012364 | 0.144940 | -0.043020 | 0.138425 | 0.050534 | ... | -0.089055 | -0.077025 | 0.059590 | 0.060203 | -0.063410 | 0.031642 | -0.124048 | 0.054329 | 0.080577 | -0.162585 |
10 rows × 200 columns
query_list = '鉄腕アトム 生成 確率 プログラム 倒す 数学 江戸時代 中国'.split(' ')
sb.utils.show.get_topn_df(sembei, query_list)
プログラム | 中国 | 倒す | 数学 | 江戸時代 | 生成 | 確率 | 鉄腕アトム | |
---|---|---|---|---|---|---|---|---|
0 | プロセス | ドイツ | 施す | 言語学 | 戦国時代 | 実行 | 規範 | 火の鳥 |
1 | アプリケーション | 朝鮮 | 離す | 哲学 | 1950年代 | 否定 | 慣習 | 新宝島 |
2 | システム | スペイン | 示す | 科学 | 1960年代 | 拡張 | 形状 | 陽だまりの樹 |
3 | プロセッサ | イタリア | 計る | 政治学 | 19世紀 | 理解 | 階層構造 | ひぃ |
4 | ハードウェア | フランス | 押す | 物理学 | 鎌倉時代 | 観察 | 感情 | フクちゃん |
5 | ソフトウェア | ヨーロッパ | 向上させる | 医学 | 17世紀 | フェアに説明 | 儀式 | バンパイヤ |
6 | データ | アメリカ | 踏む | 地理学 | 2000年代 | 定式化 | 個性 | ウイングマン |
7 | 端末 | 広東 | 貼る | 生物学 | 平安時代 | 決定 | 感覚 | リボンの騎士 |
8 | プログ | 琉球 | 検証する | 宗教 | 室町時代 | 阻止 | 文字列 | ふたりの誓い |
9 | コンテンツ | 欧 | 拡張する | 心理学 | 1970年代 | 優先 | 語尾 | 饗宴 |