投稿

7月, 2019の投稿を表示しています

Python の爆速 "in set" に julia で挑む

@kitadakyou さんの Pythonで"in list"から"in set"に変えただけで爆速になった件とその理由 というブログのコードを julia の Array で挑んだらどうなるかを試してみました。 まず、自分の python3 で、"in set" 実行した時の時間です。 >>> for _ in range(10): # 今回は実験のため、10回実行 ... result = 0 ... start_time = time.time() ... for _ in range(100000): ... num = randint(1, 10000000) # 改めて1 ~ 10000000 の間の数値をランダムに 100000 個選び、集合中にあれば result を + 1 する ... if num in a: # 要素が集合中に存在するかチェック ... result += 1 ... # print(result) ... print("elapsed_time:{time} sec".format(time=time.time() - start_time)) ... elapsed_time:0.17500686645507812 sec elapsed_time:0.17588305473327637 sec elapsed_time:0.17502999305725098 sec elapsed_time:0.1756739616394043 sec elapsed_time:0.17586398124694824 sec elapsed_time:0.17543387413024902 sec elapsed_time:0.1754751205444336 sec elapsed_time:0.17451786994934082 sec elapsed_time:0.1747879981994629 sec 上記がベンチマークです。 では、julia に移植、といっても set() はないので、Array()...

julia で、PyCall 経由の MeCab と gensim を使って word2vec をしてみる (おまけの LDA)

自然言語処理は、for ループを使うことが多いので、julia に実は向いている処理だと考えます。 python で、 三四郎全部を15分でという@makaishi2さんのブログ があります。良くまとまっていますので、python 使いの方は、このブログよりも@makishi2 さんのブログを読む方が良いと思います。よほどの処理でなければ、python で、良いでしょう。理由は結局のところは、gensim に頼るので、python でも julia でも大きな違いにはならないでしょう。ただし、MeCab が律速段階になっている人には、julia は良いと考えます。 今回は、PyCall 経由の MeCab と gensim を使って word2vec の解析をする方法をまとめてみます。例は、実際にコピー&ペーストなどで、形や内容を確かめて頂けるように、青空文庫から、夏目漱石の「坊ちゃん」の冒頭のみを使います。 julia Version 1.1.0 (2019-01-21) と PyCall v1.91.2 と、Python は Python 3.7.3 (default, Mar 29 2019, 21:57:59) とgensim 3.7.3 が動いているのが前提です。 概略は下記のとおり 文章を読み込む 改行を取り除く split() で、1文1行の Array にする MeCab を使って名詞と形容詞を取りだす関数を定義する 先程の、Array に、ブロードキャストで、名詞と形容詞を取り出して、Array 内に Array で格納する gensim.models.word2vec.Word2Vec() でモデルを作る およそ以上です。 文章を読み込む テキストファイルなどからの入力もありましょうが、今回はコピ&ペーストします。 ここは長くてゴメンナさい。この位の量が無いと、word2vec が心配なので、大目に見て下さい。pre タグで読めるように「。」の後に改行を挿入しています。 using PyCall, StatsBase array_text ="親譲《おやゆず》りの無鉄砲《むてっぽう》で小供の時から損ばかりしている。 小学校に居る時分...