12 Oracle Textを使用したセンチメント分析の実行
センチメント分析により、検索トピックに関連する肯定的また脾摘的なセンチメントを特定できます。
この章のトピックは、次のとおりです:
12.1 センチメント分析の概要
センチメント分析では、トレーニングされたセンチメント分類子を使用してドキュメントまたはドキュメント内のトピックに関するセンチメント情報を提供します。
この項では、次の項目について説明します。
12.1.1 センチメント分析について
Oracle Textでは、センチメント・メタデータを識別するようトレーニングされたセンチメント分類子を使用してトピックまたはドキュメントのセンチメント分析を実行できます。
データ量の拡大に伴い、組織は単に検索問合せに応答した"ヒット"を得るだけなく、データに関するより深い洞察を得ることができれば便利です。洞察は特定の種類の問合せ(天候の問合せや最近のイベントに関する問合せなど)に回答する、またはユーザー指定のトピックに関する意見を提供する形で表すことができます。キーワード検索では、検索語を含む結果のリストが示されます。ただし、検索語に関連するセンチメントまたは意見を識別するには、すべての結果を参照して必要なセンチメント情報を手動で見つけ出し、さらに詳細なデータ分析を実行する必要があります。センチメント分析では、1ステップのプロセスでドキュメント・セット内のセンチメント情報を識別できます。
センチメント分析は、指定されたトピックに関連するセンチメント・メタデータまたはドキュメントのセットからエンティティを識別、抽出するプロセスです。センチメントは、トレーニングされたセンチメント分類子を使用して識別されます。検索結果に加えて、センチメント分析を使用して問合せを実行すると、センチメント・メタデータも識別および表示されます。センチメント分析では、"製品レビューは肯定的かどうか"や"顧客は満足しているかどうか"などの質問に対する回答が提供されます。たとえば、特定の製品に関する複数のレビューで構成されるドキュメント・セットから、製品の良し悪しを示す全体的なセンチメントを判断できます。
12.1.2 センチメント分類子について
センチメント分類子は、トピックまたはドキュメントに関連するセンチメント・メタデータを抽出するために使用される一種のドキュメント分類子です。
センチメント分類子を使用してセンチメント分析を実行するには、最初にセンチメント分類子プリファレンスをセンチメント分類子と関連付けた後に、センチメント分類子をトレーニングします。
ユーザー定義のセンチメント分類子は、SENTIMENT_CLASSIFIER
型のセンチメント分類子プリファレンスに関連付けることができます。センチメント分類子プリファレンスでは、センチメント分類子をトレーニングするために使用されるパラメータを指定します。これらのパラメータは、センチメント分類子プリファレンスの属性として定義されます。センチメント分類子プリファレンスを作成するか、デフォルトのCTXSYS.DEFAULT_SENTIMENT_CLASSIFIER
を使用できます。ユーザー定義のセンチメント分類子プリファレンスを作成するには、CTX_DDL.CREATE_PREFERENCE
プロシージャを使用してセンチメント分類子プリファレンスを定義し、CTX_DDL.SET_ATTRIBUTE
プロシージャを使用してそのパラメータを定義します。
センチメント分類子をトレーニングするには、関連付けられているセンチメント分類子プリファレンス、ドキュメントのトレーニング・セットおよびセントメント・カテゴリを提供する必要があります。分類子プリファレンスを指定しない場合、Oracle Textではトレーニング・パラメータのデフォルト値が使用されます。センチメント分類子は、サンプル・ドキュメントと指定されたプリファレンスのセットを使用してトレーニングされます。各サンプル・ドキュメントは特定のカテゴリに割り当てられます。Oracle Textでは、このセンチメント分類子を使用してセンチメント分析を実行する方法を定義する一連の分類ルールを推定します。CTX_CLS.SA_TRAIN
プロシージャを使用して、センチメント分類子をトレーニングします。
通常、財務、製品レビュー、音楽など、ドキュメントのカテゴリごとに個別のセンチメント分類子を定義およびトレーニングします。独自のセンチメント分類子を作成しない場合、または分類子をトレーニングする適切なトレーニング・データが使用できない場合は、Oracle Textで提供されるデフォルトのセンチメント分類子データを使用できます。デフォルトのセンチメント分類子は管理されません。
注意:
デフォルトのセンチメント分類子はAUTO_LEXER
でのみ機能します。ユーザー定義のセンチメント分類子を使用するときは、AUTO_LEXER
を使用しないでください。
12.1.3 Oracle Textを使用したセンチメント分析の実行について
センチメント分析を実行するには、センチメント情報の識別に使用する必要があるセンチメント分類子を含むセンチメント問合せを実行します。分類子はデフォルトのセンチメント分類子またはユーザー定義のセンチメント分類子にすることができます。
センチメント分析は、検索操作の一部としてのみ実行できます。Oracle Textでは、指定されたキーワードが検索されて、結果セットが生成されます。次に、結果セットでセンチメント分析が実行されて、各結果のセンチメントが特定されます。問合せでセンチメント分類子を明示的に指定しない場合、デフォルトの分類子が使用されます。
ドキュメント全体に対して単一センチメントを識別するか、ドキュメント内の各トピックに対して個別のセンチメントを識別できます。最もよくあるのは、1つのドキュメントに複数のトピックが含まれ、各トピックに対する作成者のセンチメントが異なる場合です。このような場合、ドキュメント・レベルのセンチメント・スコアは、ドキュメント内の各トピックに関連付けられているセンチメントを識別できないため有用でない可能性があります。トピック・レベルでセンチメント・スコアを識別すると、必要な回答が得られます。たとえば、カメラのレビューを含むドキュメントのセットを検索すると、ドキュメント・レベルのセンチメントによってカメラがよい製品かどうかわかります。特定のカメラの写真品質に関する一般的な意見が必要であるとします。トピックの1つに"写真品質"を使用してトピック・レベルのセンチメント分析を実行すると、必要な情報が提供されます。
注意:
センチメント分析の関連トピックを指定しない場合、Oracle Textはドキュメント全体に対して全体的なセンチメントを返します。
12.2 センチメント分類子プリファレンスの作成
CTX_DDL.CREATE_PREFERENCE
プロシージャを使用してセンチメント分類子プリファレンスを作成し、CTX_DDL.SET_ATTRIBUTE
プロシージャを使用してその属性を定義します。ユーザー定義のセンチメント分類子プリファレンスに関連付けられている分類子のタイプはSENTIMENT_CLASSIFIER
です。
センチメント分類子プリファレンスを作成するには:
CTX_DDL.CREATE_PREFERENCE
プロシージャを使用してセンチメント分類子プリファレンスを定義します。分類子はSENTIMENT_CLASSIFIER
型であることが必要です。CTX_DDL.SET_ATTRIBUTE
プロシージャを使用してセンチメント分類子プリファレンスの属性を定義します。属性によって、センチメント分類子のトレーニングに使用するパラメータを定義します。
例12-1 センチメント分類子プリファレンスの作成
次の例では、clsfier_camera
という名前のセンチメント分類子プリファレンスを作成します。このプリファレンスは、SLRカメラのレビューを含むドキュメントのセットを分類するために使用されます。
-
SENTIMENT_CLASSIFIER
型のセンチメント分類子プリファレンスを定義します。次のコマンドでは、
clsfier_camera
という名前のセンチメント分類子プリファレンスを定義します。exec ctx_ddl.create_preference('clsfier_camera','SENTIMENT_CLASSIFIER');
-
センチメント分類子プリファレンス
clsfier_camera
の属性を定義します。次のコマンドでは、
clsfier_camera
という名前のセンチメント分類子プリファレンスの属性を定義します。抽出される機能の最大数は1000に設定され、分類子が実行される反復数は600に設定されます。exec ctx_ddl.set_attribute('clsfier_camera','MAX_FEATURES','1000'); exec ctx_ddl.set_attribute('clsfier_camera','NUM_ITERATIONS','600');
明示的に定義されていない属性の場合、デフォルト値が使用されます。
12.3 センチメント分類子のトレーニング
センチメント分類子をトレーニングすると、検索キーワードに関して肯定的または否定的なセンチメントを提供するために使用される分類ルールが生成されます。
次の例では、カメラのユーザー・レビューに関するセンチメント分析を実行できるセンチメント分類子をトレーニングします。
12.4 CTX_DOCパッケージを使用したセンチメント分析の実行
CTX_DOC
パッケージのプロシージャを使用してドキュメント・セット内の単一のドキュメントでセンチメント分析を実行します。ドキュメントごとに、ドキュメント全体で1つのセンチメント・スコアを決定するか、ドキュメント内のトピックごとに個別のセンチメント・スコアを決定できます。
センチメント分析を実行する前に、ドキュメント・セットでコンテキスト索引を作成する必要があります。次のコマンドでは、camera_reviews
表に含まれているドキュメント・セットでコンテキスト索引camera_revidx
が作成されます。
create index camera_revidx on camera_reviews(review_text)
indextype is ctxsys.context
parameters ('lexer mylexer stoplist ctxsys.default_stoplist');
CTX_DOC
パッケージでセンチメント分析を実行するには、次のいずれかの方法を使用します。
例12-2 ドキュメントの単一センチメント・スコアの取得
次の例では、センチメント分類子clsfier_camera
を使用してドキュメント全体に対する単一の集計センチメント・スコアを提供します。センチメント分類子が作成およびトレーニングされています。ドキュメント・セットを含む表には、camera_revidx
という名前のコンテキスト索引があります。センチメント分析を実行する必要のあるドキュメント表内のドキュメントのdoc_id
は49です。センチメント・スコアが生成されているトピックは「Nikon」です。
select ctx_doc.sentiment_aggregate('camera_revidx','49','Nikon','clsfier_camera') from dual;
CTX_DOC.SENTIMENT_AGGREGATE('CAMERA_REVIDX','49','NIKON','CLSFIER_CAMERA')
--------------------------------------------------------------------------
74
1 row selected.
例12-3 デフォルトの分類子を使用した単一のセンチメント・スコアの取得
次の例では、ドキュメントのセンチメント分類子を使用してドキュメント全体の集計センチメント・スコアを提供します。ドキュメント・セットを含む表には、camera_revidx
という名前のコンテキスト索引があります。センチメント分析を実行する必要のあるドキュメント表内のドキュメントのdoc_id
は1です。
select ctx_doc.sentiment_aggregate('camera_revidx','1') from dual;
CTX_DOC.SENTIMENT_AGGREGATE('CAMERA_REVIDX','1')
--------------------------------------------
2
1 row selected.
例12-4 ドキュメント内の各トピックのセンチメント・スコアの取得
次の例では、センチメント分類子clsfier_camera
を使用してドキュメント内の各セグメントのセンチメント・スコアを生成します。センチメント分類子が作成およびトレーニングされています。ドキュメント・セットを含む表には、camera_revidx
という名前のコンテキスト索引があります。センチメント分析を実行する必要のあるドキュメント表内のドキュメントのdoc_id
は49です。センチメント・スコアが生成されているトピックは「Nikon」です。分析結果が移入される結果表restab
は、スニペット(CLOB
)列とスコア(NUMBER
)列を使用して作成されています。
exec ctx_doc.sentiment('camera_revidx','49','Nikon','restab','clsfier_camera', starttag=>'<<', endtag=>'>>');
SQL> select * from restab;
SNIPPET
--------------------------------------------------------------------------------
SCORE
----------
It took <<Nikon>> a while to produce a superb compact 85mm lens, but this time they finally got it right.
65
Without a doubt, this is a fine portrait lens for photographing head-and-shoulder portraits (The only lens which is optically better is
<<Nikon>>'s legendary 10
5mm f2.5 Nikkor lens, and its close optical twin, the 105mm f2.8 Micro Nikkor.
75
Since the 105mm f2.5 Nikkor lens doesn't have an autofocus version, then this might be the perfect moderate telephoto lens for owners of
<<Nikon>> autofocus
SLR cameras.
84
3 rows selected.
例12-5 ドキュメント内のトピックのセンチメント・スコアの取得
次の例では、センチメント分類子tdrbrtsent03_cl
を使用してドキュメント内の各セグメントのセンチメント・スコアを生成します。センチメント分類子が作成およびトレーニングされています。ドキュメント・セットを含む表には、tdrbrtsent03_idx
という名前のコンテキスト索引があります。センチメント分析を実行する必要のあるドキュメント表内のドキュメントのdoc_id
は1です。センチメント・スコアが生成されているトピックは'movie'です。分析結果が移入される結果表tdrbrtsent03_rtab
は、スニペット列とスコア列を使用して作成されています。
SQL> exec ctx_doc.sentiment('tdrbrtsent03_idx','1','movie','tdrbrtsent03_rtab','tdrbrtsent03_cl');
PL/SQL procedure successfully completed.
SQL> select * from tdrbrtsent03_rtab;
SNIPPET
--------------------------------------------------------------------------------
SCORE
----------
the <b>movie</b> is a bit overlong , but nicholson is such good fun that the running time passes by pretty quickly
-62
1 row selected.
関連項目:
-
『Oracle Textリファレンス』の
CTX_DOC.SENTIMENT_AGGREGATE
に関する説明 -
『Oracle Textリファレンス』の
CTX_DOC.SENTIMENT
に関する説明
12.5 結果セット・インタフェースを使用したセンチメント分析の実行
XML問合せの結果セット・インタフェース(RSI)により、デフォルトのセンチメント分類子またはユーザー定義のセンチメント分類子を使用してドキュメントのセットに対してセンチメント分析を実行できます。センチメント分析を実行する必要のあるドキュメントはドキュメント表内に格納されます。
入力RSIのsentiment
要素は、結果セット記述子で指定された他の操作に加えて問合せ時にセンチメント分析を実行する必要があることを示すために使用します。sentiment
要素のclassifier
属性の値を指定すると、指定したセンチメント分類子がセンチメントの分析の実行に使用されます。classifier
属性を省略すると、Oracle Textではデフォルトのセンチメント分類子を使用してセンチメント分析が実行されます。sentiment
要素には、センチメント分析中にセンチメントを生成する必要があるトピックまたは概念を指定する、item
と呼ばれる子要素が含まれます。
各ドキュメントの単一のセンチメント・スコアまたはドキュメント内のトピックごとに個別のセンチメント・スコアを生成できます。要素item
のagg
属性を使用して、各ドキュメントの単一の集計センチメント・スコアを生成します。
センチメント分類は、キーワード問合せまたはABOUT
演算子を使用して実行できます。ABOUT
演算子を使用する場合、結果セットにはシソーラスを使用して識別されたキーワードのシノニムが含まれます。
RSIを使用してセンチメント分析を実行するには:
例12-6 センチメント分析を実行するための結果セット記述子の入力
次の例では、センチメント分析を実行し、トピック'lens'のセンチメントを生成します。駆動問合せは'camera'のキーワード問合せです。sentiment
要素は、センチメント分析をセンチメント分類子clsfier_camera
を使用して実行する必要があることを指定します。この分類子は、以前CTX_CLS.SA_TRAIN_MODEL
プロシージャを使用して作成およびトレーニングされたものです。camera_revidx
はドキュメント・セット表のコンテキスト索引です。
センチメント・スコアの範囲は-100~100です。正のスコアは肯定的なセンチメントを示し、負のスコアは否定的なセンチメントを示します。スコアの絶対値は、肯定的/否定的なセンチメントの大きさを示します。
センチメント分析を実行して、ドキュメント内の各トピックのセンチメント・スコアを取得するには:
-
検索操作の結果を格納する結果セット表
rs
を作成します。SQL> var rs clob; SQL> exec dbms_lob.createtemporary(:rs, TRUE, DBMS_LOB.SESSION);
-
検索問合せの一部としてセンチメント分析を実行します。
検索されているキーワードは'camera'です。センチメント分析が実行されるトピックは'lens'です。
begin ctx_query.result_set('camera_revidx','camera',' <ctx_result_set_descriptor> <hitlist start_hit_num="1" end_hit_num="10" order="score desc"> <sentiment classifier="clsfier_camera"> <item topic="lens" /> <item topic="picture quality" agg="true" /> </sentiment> </hitlist> </ctx_result_set_descriptor>',:rs); end; /
-
結果表に格納されている結果を表示します。
XML結果セットを他のアプリケーションで使用して、さらに処理できます。出力の一部は簡略化のため削除されています。セグメントのセンチメント・スコアを表すドキュメント内の各セグメントのスコアがあります。
SQL> select xmltype(:rs) from dual; XMLTYPE(:RS) -------------------------------------------------------------------------------- <ctx_result_set> <hitlist> <hit> <sentiment> <item topic="lens"> <segment> <segment_text>The first time it was sent in was because the <b>lens </b> door failed to turn on the camera and it was almost to come off of its track . Eight months later, the flash quit working in all modes AND the door was failing AGAIN!</segment_text> <segment_score>-81</segment_score> </segment> </item> <item topic="picture quality"> <score> -75 </score> </item> </sentiment> </hit> <hit> <sentiment> <item topic="lens"> <segment> <segment_text>I was actually quite impressed with it. Powerful zoom , sharp <b>lens</b>, decent picture quality. I also played with some other Panasonic models in various stores just to get a better feel for them, as well as spent a few hours on </segment_text> <segment_score> 67 </segment_score> </segment> </item> <item topic="picture quality"> <score>-1</score> </item> </sentiment> </hit> . . . . . . </hitlist> </ctx_result_set>
関連項目: