質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

283閲覧

Gensim、Word2Vecを用いたシステム開発について

Taka_Yamag

総合スコア29

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/04/02 07:36

文章を単語ごとに区切り、その単語のそれぞれをWord2Vecを用いてベクトル化し、その単語のベクトルを足し合わせて割り、文書のベクトルを作成するといったようなシステムを現在考えております。ですが、開発にあたって以下の問題が現在発生しております。

以下のような配列ならば、学習済みのモデルに全ての言語が存在しているので、配列を作成することができるのですが、
print(tokensSituation[1])
['単身', '生活', '認知症', 'サービス', '拒否']

以下のような配列ならば、配列を作成することができません。
print(tokensSituation[3])
['本人', 'の', 'サービス', '利用', 'の', '受け入れ', '拒否', 'が', 'ある']

その配列を作成するにあたって以下のような、プログラムを用いています。
#配列(文章が入っている)をさらに配列化
for i in range(len(lis)):
tokensSituation[i]=tokensSituation[i].split(None)

文書ベクトルの取り出し

vectorSituation = []
#上手くいかないときは空ベクトルを入れる
for i in range(len(tokensSituation)):
try:
vectorSituation.append(model.wv[tokensSituation[i]])
except:
vectorSituation.append("")

成功した場合は以下のようになります。
print(vectorSituation[2])
[[ 0.214311 0.0763293 -0.15200703 -0.5290254 0.41505465 -0.14374866
-0.1341153 1.6714561 -0.32641277 -0.29895762 -0.24816583 -0.20321406
0.10796727 -0.55094725 0.27393502 0.01861681 0.12763897 -1.0396957
-0.07557113 0.02218909 -0.25819677 0.4510418 0.5632597 -0.52726966
-0.32833436 0.7289277 0.2308788 -0.70520157 -0.68929267 0.8254075
0.5232958 0.5211772 -0.73326635 0.9513962 0.47992742 0.51736903
-0.4802426 -0.2987823 -0.02941655 -0.3191735 0.36027023 -0.6644283
-0.3570222 -0.5372858 0.47830492 0.7038007 0.5130014 0.29020625
-0.02263755 0.633224 -0.05110889 -0.53327924 0.5052781 0.16690992
-0.5415479 0.06546304 0.01086431 -0.28765035 0.77242476 -0.3894536
-0.38116375 0.40702268 -1.3164475 -0.880887 -1.0531039 0.7047993
-0.515486 -0.6339134 -0.33423704 -0.81290007 0.35958564 0.94572353
-0.6440719 -1.1558281 -0.85172623 0.4126607 -0.5693497 -0.6200748
0.02033455 0.26306844 -0.3101573 -0.06374624 -0.40636164 -0.22165595
0.33404803 0.44969422 -0.84844774 -0.61118644 0.09472755 -0.17939241
0.17646971 1.0453675 -0.15476878 -0.5892942 -0.9322525 -0.16863802
0.17203142 -0.11771914 0.2524703 -0.13034603 0.5048813 0.79845566
-0.15936193 0.9839085 -0.59136915 0.5448013 0.30567595 0.3828392
-0.54085344 -0.8093304 1.2623922 -0.09587381 0.7555552 -0.4865914
-0.06827059 -0.05245666 -0.5349524 0.63968694 1.0497452 0.17983952
-0.01247313 0.6856805 -0.30855924 -0.20797628 -0.35864815 -0.06781255
0.2487806 0.38646418 0.15219611 0.21061708 1.0515122 -0.9730945
0.32896173 -0.84513026 0.4629758 -0.17268579 0.36211574 -0.68151677
-0.15703839 -1.0888574 -0.38603562 -0.52598035 0.4266147 -0.41019326
-0.55824864 0.30351368 -0.5989914 -0.02958382 0.83062357 0.4875426
0.04386955 -0.231299 -0.7354047 0.00927639 0.67622095 -0.41364112
-0.13425621 0.33664456 0.05408203 -1.4569676 0.01477764 -0.07543167
-0.8294748 -0.15443498 -0.4174124 -0.19840425 -0.70056593 0.7346665
-0.3391793 -0.15621033 0.4633026 -0.48280966 0.04982495 0.51888126
0.6029025 0.8520094 -0.9558713 -0.09466203 0.20855515 2.0263505
0.41342095 1.1731846 -0.5133959 0.7334054 -1.3457522 0.2444181
0.73714256 0.96892965 -0.6001914 -0.4871037 -0.53259593 -0.35659862
-0.21584105 0.7219355 0.55300343 0.50555307 -0.24949794 0.5068422
-0.774185 0.3395956 ]]
しかし、失敗した場合は空です。
どうすれば、modelにない単語だけ避けて、modelにある単語はベクトルを取得することができるでしょうか。
そのプログラムについてご教授ください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

gensimはモデルに登録されている単語一覧を取り出すことができるので、ベクトル化したい配列とこの単語一覧を照合して単語一覧にないものを除去するコードを追加するといいと思います。

ただ、質問からはモデルがgensimで構築されているかわからないので、保証はできません

投稿2019/04/03 10:56

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/04/03 11:02 編集

うろ覚え気味ですが、gensimならmodel.wvは辞書ライクなのでinでいけたはずです。
guest

0

ベストアンサー

前提として、前処理でできるだけなんとかしましょう(ストップワード除去等)。NLPでは前処理は大切です。また、語彙の豊富な分散表現辞書をもってきましょう。

コードですが、

python

1vectorSituation.append("")

は空文字列なんか入れても駄目なのでは。単にpassしておけば意図通り動きませんかね。

正常ならnumpy配列が入るはずなので、shapeをそろえた要素すべてが0のnumpy配列でもいいですが、それなら入れるだけ無駄です。

投稿2019/04/02 13:18

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問