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

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

新規登録して質問してみよう
ただいま回答率
85.50%
機械学習

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

Python

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

Q&A

3回答

2513閲覧

文章の重要度

bk_

総合スコア10

機械学習

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

Python

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

0グッド

1クリップ

投稿2016/10/23 04:09

#文章の重要度
はじめまして。
ユーザーから文章を受け取るとします。
この文章は

今日はいい天気ですね。 地震が心配ですね。

のような改行を挟んだ文章であるとします。
これらを改行で区切りそれらを一つの文章とすると、
「今日はいい天気ですね。」、「地震が心配ですね」
の2つの文になります。
これら1つ1つから全体からの重要度を計測したいのですが、
何か参考になる論文、ブログ、手法などご存知無いでしょうか?

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

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

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

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

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

ikedas

2016/10/23 07:10

ご自分ではこれまで、どこでどんな情報源を調べ、どんなことが分かったのでしょうか。それを書いてください。
guest

回答3

0

似たようなことを研究で行っているので、そこで使っている手法をご紹介します。
おそらく、質問者様のやりたいことは、共起語とtfを使えば出来ると思います。
流れで説明しますが、面倒でしたら共起語とtfのお話だけお付き合いください。

共起語

文章に登場する「単語の個数」から、文章の意味を推測します。
よく、「形態素解析(けいたいそかいせき)」という手法が用いられます。
形態素解析とは、文章を意味のある後群(名詞、動詞、形容詞…等)に分解します。

(例)
「今日未明、震度5の地震が発生しました。この地震の影響での津波の心配はいりません。」
この文章を形態素解析し、名詞、動詞辺りを抜き出し、その数をカウントします。ます。

今日 1回 未明 1回 震度 1回 5 1回 地震 2回 発生 1回 影響 1回 津波 1回 心配 1回

短い文章ですが、単語の登場回数からこの文章がなんとなく「地震」についての文章だとわかりますね?
LLmanさんのご回答がこれです。

tf-idf

では、今度は共起語の登場回数から、単語の重要度を数値化してみます。
tf-idfと呼ばれる方法がメジャーです。

tf:term frequency
idf:inverse Ddocument frequency
と呼ばれるもので、要は、

tf = 単語の登場頻度 idf = 文章ごとのその単語のレア度

のようなものです。

そしてそれぞれ、

tf = 目的の単語数 / その文章中の全単語数 idf = log(全文章(ドキュメント)数 / 目的の単語が出てくる文章(ドキュメント)の数) + 1

で、よく計算します。
※時と場合によって、多少計算式は変わりますが気にしないでください。

先程の文章、「今日未明、震度5の地震が発生しました。この地震の影響での津波の心配はいりません。」の例で、
単語「地震」のtf値は、tf = 「地震」の登場回数 / 全単語数なので

tf = 2/10 = 1/5 = 0.2

と、なります。
また、「津波」のtf値は、

tf = 1/10 = 0.1

となりますね。

まあ、短い文章なので値は小さいですが、このように単語のtf値が大きいほど、その文章はその
tf値が大きな単語のことをメインに取り扱いたい、と言う考え方です。

おそらく、今回のご質問に関してはこのtfが有効ではないかと。


話は変わって、idfについて。
こいつは、ドキュメントがたくさんあるときに、その単語のレア度について…つまり、
文章全体で登場回数が少ない単語は、よりその文書を特徴付けるものということですね。

いくつもの文書で使われている単語はあまり重要じゃない!

文章Aに「地震」という単語が5回
文章Bに「地震」という単語が0回
文章Cに「地震」という単語が100回

だとすると、
例えば、「地震」のidfは、
log(3/2)+1となります。

登場回数関係ない!!
要は、登場するかしないかをみます。


tfとidfが出せたら、それらをかけ合わせます。

tf-idf = tf * idf

この値が大きいと、その文章は、その単語にとういて述べていると思われるのです。

例:「地震」についてのtf-idf
tf-idf = 0.2 * ( log(3/2)+1 )


こんな感じですね。

使えるツール

Mecab!
手前味噌ではありますが、
http://qiita.com/nnahito/items/545126933f844804d3b9
何かをどうぞ。

文章を形態素解析してくれます。

投稿2016/10/25 11:16

nnahito

総合スコア2004

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

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

0

重要度を計測したい

それにはいろいろな手法がありますが、
自然言語処理を学べば、普通に分かっていきます。
ここでは基本的な考え方だけ言いましょう。


検索の延長線上でシンプルに考えてみます。
まず、「天気」とか「地震」とか、単語を辞書(配列など)に登録しておきます。

その単語ごとに、あらかじめスコアを付けておきます。
たとえば、「天気」より「地震」の方が出現頻度が少ないので、スコアが高いとか。

そして検索を繰り返し、文ごとにスコアを合計して、最終的な重要度を出します。

もちろん、これは原始的なやり方で、本格的な自然言語処理の手法は、もっと洗練されてます。
Amazonで「自然言語処理」で検索するだけで書籍が見つかるので、参考にしてください。

投稿2016/10/23 07:45

LLman

総合スコア5592

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

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

0

IF-IDFと呼ばれる自然言語で有名な指標があります.

投稿2020/03/20 10:50

dark-eater-kei

総合スコア1248

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問