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

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

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

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

3回答

3176閲覧

python 自然言語処理について

---stax---

総合スコア148

Python 3.x

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2018/05/24 00:48

表題の件でアドバイスを頂きたいです。

テキストデータを読み込み、形態素解析を行い、word2vecでベクトル化させるという部分をpythonでコードを書き、学習しています。
次のステップとして、主軸となるワードに対して一緒に用いられる頻度が高い単語の抽出が出来たらと考えています。

上記の内容が'共起'ということを指しているのかなと思い調べてみたのですが、あてはまる内容を見つけられず、プログラミングもサンプルを見ながらでしか書き進めることが出来ないレベルなのでどういったモジュールを使うのか、どのように共起している単語の抽出を実装していけばよいか分からず悩んでいます。
調べ方が悪いのだと思いますが、そもそも自分がやろうとしている共起している単語の抽出はpythonを用いて実装することは可能でしょうか?
またどのように学習していけばよいかアドバイスを頂きたいです。
機械学習、自然言語処理ついて勉強し始めたばかりで知識もないので的外れな内容かもしれませんがよろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

gensimの中にmost_similarという関数があるので、試してみてはいかがでしょうか。これは所定の単語に近似したベクトルを有した単語を抽出するものなので、何らかの方法で得た主軸となる単語とオプションパラメーターを設定して呼び出せば、とりあえず結果は出ます。ただし、学習そのものがうまくいっていないと結果も使えないものが出力されるので、適宜、モデルのチューニングをしてください

投稿2018/05/24 01:31

R.Shigemori

総合スコア3376

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

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

---stax---

2018/05/24 01:53

回答ありがとうございます。 word2vec_model = word2vec.Word2Vec.load('C:/Users/Desktop/data.model') ttt = word2vec_model.wv.most_similar(positive=['不良'], topn=9) for item in ttt: print(item[0], item[1]) 冷却 0.6006556749343872 01 0.5672667026519775 4 0.47878962755203247 座 0.43691882491111755 PE 0.4153861999511719 02 0.40251225233078003 面 0.3871880769729614 固定 0.3771429657936096 測定 0.35740208625793457 上記のようには表示させることが出来ています。 この表示されているのは意味が類似している単語と認識しているのですが、この結果が共起語とイコールなのでしょうか? 理解しきれていない状態で申し訳ありません
R.Shigemori

2018/05/24 13:49

なるほど、共起(あるワードに対するその前後に出現するワードの確率)が欲しいのですね。 そうすると、most_similarではなく、predict_output_wordかと思います。詳細は、gensimのサイトにAPIリファレンスがあるのでこちらで確認するといいかと思います。 https://radimrehurek.com/gensim/index.html
---stax---

2018/05/25 01:27

回答ありがとうございます。 さっそく試してみました。 word2vec_model = word2vec.Word2Vec.load('C:/Users/Desktop/data.model') kkk = ['不良'] testmodel = word2vec_model.predict_output_word(kkk,topn=10) print(testmodel) [('03', 0.61715645), ('02', 0.38265774), ('3', 0.00016280386), ('-', 1.9871653e-05), ('排出', 1.6483687e-06), ('搬送', 1.0329422e-06), ('st', 1.6281716e-08), ('新人', 4.291772e-09), ('断', 3.795836e-09), ('連動', 3.4870768e-09)] model.predict_output_word(kkk,topn=10)の引数で渡すリストの作り方は、共起の主軸となる単語をリストに入れて引数としたのですがこの方法は理解が間違っていますか?
R.Shigemori

2018/05/25 09:08

predict_output_wordのアウトプットは引数のワードに対し、その前後に出現する確率の高いワードとその確率です。お示しいただいた結果からいうと、不良という単体のワードの場合、03というワードが61.7%の確率で出現することが読み取れます
guest

0

ベストアンサー

主軸となるワードって何ですか・・・

共起語の抽出自体は、形態素解析さえできていれば(なにをもって共起と考えるのかにもよりますが)簡単にできます。word2vecは不要です。練習だと思ってpure pythonで書いてみては。

投稿2018/05/24 01:14

hayataka2049

総合スコア30933

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

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

---stax---

2018/05/24 01:30

回答ありがとうございます。 分かりにくくて申し訳ありません主軸となるワードは、自分が検索したい単語を指しています 例えば主軸となるワードとして’シリンダ’と入力すれば同じ文に同時に出現する頻度の高い’動作不良’等が抽出できることを目標としています。 pure pythonについても触れたことがないので併せて調べてみます
hayataka2049

2018/05/24 01:36

ごめんなさい、pure pythonは「ただの(ライブラリとかに頼らない)pythonプログラム」という意味です・・・ 文中の共起を計算したいのですか? それともテキスト中? そのへんによって微妙に話が変わってきます
---stax---

2018/05/24 02:18

ありがとうございます。 文章中の共起は”ラーメンを食べにいって凄く美味しかった”というような文があったとすると(例が下手ですいません) ”ラーメン”に対して”美味しい”などが共起語と理解しています。 一方のテキスト中の共起とはどういうイメージでしょうか・・・? 自分の今の状況としましては何万行あるトラブルデータが一つのテキストファイルに記述されており、その内容に対して名詞で形態素解析するという段階まではできています。 その中から任意のワードを指定すると、任意のワードと一緒によくつかわれる単語を抽出したいです。 単語の群はテキストファイルを元に作っているのですが、共起していると認識させるのは文章で判断すると思うのでおそらく自分がやりたいのは文中の共起なのかな?と思っています・・・。 目的とする事があいまいで申し訳ありません。
hayataka2049

2018/05/24 02:25

テキスト中の共起とは、 「池袋に行った。駅前のラーメン屋に寄ったらすごく美味しかった。また行きたいな。」 を1文書として、「池袋・ラーメン」とか「池袋・行きたい」まで共起語とするだけで、概念的には文中の共起とさほど変わりません。 まあ、文中共起をやりたいということでしたら、自分で書くのも簡単ですし、実はこういう手があったり・・・ https://stackoverflow.com/questions/35562789/word-word-co-occurrence-matrix
---stax---

2018/05/24 02:49

ありがとうございます。 やりたいことはテキスト中の共起でもあるような気がしてきました・・・ 参考リンクもありがとうございます。 まずは何とか参考にしながら進めてみます。
---stax---

2018/05/24 13:31

何度も申し訳ございません。 頂いたリンクのコードを試してみたのですが正直全然理解できませんでした・・・ rom sklearn.feature_extraction.text import CountVectorizer docs = ['this this this book', 'this cat good', 'cat good shit'] count_model = CountVectorizer(ngram_range=(1,1)) # default unigram model X = count_model.fit_transform(docs) Xc = (X.T * X) # this is co-occurrence matrix in sparse csr format Xc.setdiag(0) # sometimes you want to fill same word cooccurence to 0 print(Xc.todense()) # print out matrix in dense format count_model.vocabulary_ 結果 [[0 0 0 0 3] [0 0 2 1 1] [0 2 0 1 1] [0 1 1 0 0] [3 1 1 0 0]] {'book': 0, 'cat': 1, 'good': 2, 'shit': 3, 'this': 4} 上記の内容がBag-of-Wordsを指しているのかと思い、知識もなかったのでまずは概要を調べています。 単語の出現頻度を表しているというのは何となく理解できるのですが、どのように活用するのかイメージが沸かず悩んでいます。 Bag-of-Wordsで表した物を、自分が目的としている共起している単語の抽出につなげるにはどのような知識が必要でしょうか? おそらくほとんど答えに近いアドバイスを頂いていると思うのですが質問を重ねてしまい申し訳ありませんがよろしくお願いいたします。
hayataka2049

2018/05/24 13:53

ドキュメントとその回答の英語をよく読んでくださいな。Xが何を表しているのかと、 (X.T * X)の式が何を表しているのか、ぜんぶドキュメントとその回答に書いてあります。あとは自分で小さいプログラムを動かしてみたり、手計算したりすれば理解できるはずです。 ちなみに活用するには引きたい単語に該当する行か列を取ります。
guest

0

テキストから単語を取り出すには、テキストの形態素解析を行い、特定の種類の形態素(例えば、名詞と形容詞)を抽出します。(英語などはスペース文字で単語が分かれているので単語に切り分けるのが容易ですが、日本語はスペースを入れませんから形態素解析するのが普通です)

'共起'は対象範囲が定まれば機械的に判断できます。1つのテキストブロック(文、段落、章、頁)から抽出された単語群を'共起語集合'とすれば良いわけですから。(文、段落、章、頁の区切りは判りますよね)

共起関係、共起語集合、などの単語でWeb検索して見つかった、情報処理学会や言語処理学会の論文に目を通してみると思います。

投稿2018/05/24 01:14

coco_bauer

総合スコア6915

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

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

---stax---

2018/05/24 01:33

回答ありがとうございます。 形態素解析自体はjanomeを使用して実装出来ました。 なにか特別なモジュール等を使用するのかと考えていましたが、教えて頂いたキーワードでもっと概要についても調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問