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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

4327閲覧

word2vecで特定の分野に特化させて類義語を見つけたい

pippip

総合スコア30

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/09 14:39

編集2018/09/10 02:55

#困ったこと
Pythonでword2vecを使い、類義語を見つけたくてこのサイトを見てやってみました。
講義の類義語は表示することができたのですが、他の単語ではできませんでした。
例えば「ねぎ」と打ち込み、「長ネギ」や「青ネギ」が出ると思ったのですがエラーが出ました。
これは使っているモデルというものが悪いのでしょうか。

#知りたいこと
「長ネギ」や「青ネギ」の類義語を調べ、その中で意味が近いものに大元である「ねぎ」が来るようにしたいです。わかりやすく言うと「漫画」や「小説」は「本」に分類されるように「長ネギ」も「ねぎ」に分類されるといった、大元の類似度が高くなるようにword2vecでしたいです。
しかし、野菜に関連したモデルの作り方がわかりません。どう作るのでしょうか。

追記
コードは以下の通りです。

python

1from gensim.models import word2vec 2 3model = word2vec.Word2Vec.load("./wiki.model") 4results = model.wv.most_similar(positive=['ねぎ']) 5for result in results: 6 print(result)

エラーは以下の通りです。

C:\Users\yuzuk\PycharmProjects\word2vec\venv\lib\site-packages\gensim\utils.py:1209: UserWarning: detected Windows; aliasing chunkize to chunkize_serial warnings.warn("detected Windows; aliasing chunkize to chunkize_serial") Traceback (most recent call last): File "C:/Users/yuzuk/PycharmProjects/word2vec/word2vec.py", line 4, in <module> results = model.wv.most_similar(positive=['ねぎ']) File "C:\Users\yuzuk\PycharmProjects\word2vec\venv\lib\site-packages\gensim\models\keyedvectors.py", line 530, in most_similar mean.append(weight * self.word_vec(word, use_norm=True)) File "C:\Users\yuzuk\PycharmProjects\word2vec\venv\lib\site-packages\gensim\models\keyedvectors.py", line 451, in word_vec raise KeyError("word '%s' not in vocabulary" % word) KeyError: "word 'ねぎ' not in vocabulary"

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

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

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

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

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

hayataka2049

2018/09/09 14:43 編集

「エラーが出ました」とはどういう状況ですか? 実際のコードとエラーメッセージがないとなんとも。あと、「知りたいこと」に挙げられているような階層状にたどっていくようなタスクはword2vecをそのまま使っただけでは無理です
guest

回答2

0

ベストアンサー

wikipediaのデータには「ねぎ」が含まれていないのかな。「ネギ」ならさすがにいけると思います。

自分で学習させるのはしんどいので、語彙が大きめの学習済みのモデルを探してきて使うのが無難と思いますが……


  • 「漫画」や「小説」は「本」
  • 「長ネギ」や「青ネギ」は「ネギ」

という結果を得たければ、基本的にはシソーラスやWordNetなどが適しています。ただ、シソーラスなどの語彙量と構造に依存する話なので(そしてどちらも満足できる水準ではないことが多いので)、厳しいですね。

割とアドホックな手法として、word2vec等分散表現を用いてシソーラスを拡張するような研究もありますが、研究レベルの話なのでツールとして気楽に使える訳ではありません。目的に合った論文を探してきて自分で実装できる実力があれば良いのですけど。

投稿2018/09/10 03:13

hayataka2049

総合スコア30933

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

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

0

とりあえず、word2vecのmost_similarで引数の単語が見当たらない場合の対応を記載します。
word2vecは学習に用いた単語群の範囲でモデルを構築します。そのため、学習時に使用されない単語で検索するとエラーが返ってきます。よってエラー回避には希望する単語を含んだデータで再学習するのが最も確実ではないでしょうか。つまり、質問に記載される例でいうと、「ねぎ」という単語を含んだデータで学習すれば、類義語が返ってくるようになります。ただし、そのためには野菜に関する文章がそれなりの数だけ必要です。あまりに少ないとエラーにはならないものの、リストアップされないことが起こり得るのでデータを作成する段階でいろいろ工夫したほうがいいかと思います

投稿2018/09/09 22:36

R.Shigemori

総合スコア3376

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問