16 Oracle Textを使用したセンチメント分析の実行
センチメント分析により、検索トピックの肯定的また脾摘的なセンチメントを特定できます。
この章のトピックは、次のとおりです:
16.1 センチメント分析の概要
センチメント分析では、トレーニングされたセンチメント分類子を使用してドキュメントまたはドキュメント内のトピックに関するセンチメント情報を提供します。
この項では、次の項目について説明します。
16.1.1 センチメント分析について
Oracle Textでは、センチメント・メタデータを識別するようトレーニングされたセンチメント分類子を使用してトピックまたはドキュメントのセンチメント分析を実行できます。
データ量の拡大に伴い、組織は単に検索問合せに応答したヒットを得るだけでなく、データに関するより多くの知見を得る必要があります。知見は、特定の基本的なタイプの問合せ(天候の問合せや最近のイベントに関する問合せなど)に回答する、ユーザー指定のトピックに関する意見を提供するなどの形式になることがあります。キーワード検索では、検索語を含む結果のリストが示されます。ただし、検索語に関連するセンチメントまたは意見を識別するには、結果を参照して必要なセンチメント情報を手動で見つけ出す必要があります。センチメント分析では、1ステップのプロセスでドキュメント・セット内のセンチメント情報を識別できます。
センチメント分析は、指定されたトピックに関連するセンチメント・メタデータまたはドキュメントのセットからエンティティを識別、抽出するプロセスです。トレーニングされたセンチメント分類子がセンチメントを識別します。検索結果に加えて、センチメント分析を使用して問合せを実行すると、センチメント・メタデータも識別および表示されます。センチメント分析では、"製品レビューは肯定的かどうか"や"顧客は満足しているかどうか"などの質問に対する回答が提供されます。たとえば、特定の製品に関する複数のレビューで構成されるドキュメント・セットから、製品の良し悪しを示す全体的なセンチメントを判断できます。
16.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
を使用しないでください。
16.1.3 センチメント分析の実行について
センチメント分析を実行するには、センチメント情報の識別に使用する必要があるセンチメント分類子を含むセンチメント問合せを実行します。分類子はデフォルトまたはユーザー定義のセンチメント分類子にすることができます。
センチメント分析は、検索操作の一部としてのみ実行できます。Oracle Textでは、指定されたキーワードが検索されて、結果セットが生成されます。次に、結果セットでセンチメント分析が実行されて、各結果のセンチメントが特定されます。問合せでセンチメント分類子を明示的に指定しない場合、デフォルトの分類子が使用されます。
ドキュメント全体に対して単一センチメントを識別するか、ドキュメント内の各トピックに対して個別のセンチメントを識別できます。最もよくあるのは、1つのドキュメントに複数のトピックが含まれ、各トピックに対する作成者のセンチメントが異なる場合です。このような場合、ドキュメント・レベルのセンチメント・スコアは、ドキュメント内の各トピックに関連付けられているセンチメントを識別できないため有用でない可能性があります。トピック・レベルでセンチメント・スコアを識別すると、必要な回答が得られます。たとえば、カメラのレビューを含むドキュメントのセットを検索すると、ドキュメント・レベルのセンチメントによってカメラがよい製品かどうかわかります。カメラの写真品質に関する一般的な意見が必要であるとします。トピックの1つに"写真品質"を使用してトピック・レベルのセンチメント分析を実行すると、必要な情報が提供されます。
ノート:
センチメント分析の関連トピックを指定しない場合、Oracle Textはドキュメント全体に対して全体的なセンチメントを返します。
16.2 センチメント分類子プリファレンスの作成
CTX_DDL.CREATE_PREFERENCE
プロシージャを使用してセンチメント分類子プリファレンスを作成し、CTX_DDL.SET_ATTRIBUTE
プロシージャを使用してその属性を定義します。ユーザー定義のセンチメント分類子プリファレンスに関連付けられている分類子のタイプはSENTIMENT_CLASSIFIER
です。
センチメント分類子プリファレンスを作成するには:
- センチメント分類子プリファレンスを定義するには、
CTX_DDL.CREATE_PREFERENCE
プロシージャを使用します。分類子はSENTIMENT_CLASSIFIER.
型であることが必要です - センチメント分類子プリファレンスの属性を定義するには、
CTX_DDL.SET_ATTRIBUTE
プロシージャを使用します。属性によって、センチメント分類子のトレーニングに使用するパラメータを定義します。
例16-1 センチメント分類子プリファレンスの作成
次の例では、clsfier_camera
という名前のセンチメント分類子プリファレンスを作成しています。このプリファレンスは、SLRカメラのレビューが含まれているドキュメントのセットを分類するために使用します。
-
タイプ
SENTIMENT_CLASSIFIER
のセンチメント分類子プリファレンスをclsfier_camera
という名前で定義します。exec ctx_ddl.create_preference('clsfier_camera','SENTIMENT_CLASSIFIER');
-
clsfier_camera
センチメント分類子プリファレンスの属性を定義します。抽出する特徴の最大数は1000に設定します。分類子が実行される反復回数は600に設定します。exec ctx_ddl.set_attribute('clsfier_camera','MAX_FEATURES','1000'); exec ctx_ddl.set_attribute('clsfier_camera','NUM_ITERATIONS','600');
明示的に定義されていない属性の場合、デフォルト値が使用されます。
16.3 センチメント分類子のトレーニング
センチメント分類子をトレーニングすると、検索キーワードに関して肯定的または否定的なセンチメントを提供するために使用される分類ルールが生成されます。
次の例では、カメラのユーザー・レビューに関するセンチメント分析を実行できるセンチメント分類子をトレーニングします。
16.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
パッケージでセンチメント分析を実行するには、次のいずれかの方法を使用します。
例16-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.
例16-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.
例16-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.
例16-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
に関する説明
16.5 RSIを使用したセンチメント分析の実行
XML問合せの結果セット・インタフェース(RSI)により、デフォルトのセンチメント分類子またはユーザー定義のセンチメント分類子を使用してドキュメントのセットに対してセンチメント分析を実行できます。センチメント分析を実行する必要のあるドキュメントはドキュメント表内に格納されます。
入力RSIのsentiment
要素は、結果セット記述子(RSD)で指定された他の操作に加えて問合せ時にセンチメント分析を実行する必要があることを示すために使用します。sentiment
要素のclassifier
属性の値を指定すると、指定したセンチメント分類子がセンチメントの分析の実行に使用されます。classifier
属性を省略すると、Oracle Textではデフォルトのセンチメント分類子を使用してセンチメント分析が実行されます。sentiment
要素には、センチメント分析中にセンチメントを生成する必要があるトピックまたは概念を指定する、item
と呼ばれる子要素が含まれます。
各ドキュメントの単一のセンチメント・スコアまたはドキュメント内のトピックごとに個別のセンチメント・スコアを生成できます。item
要素のagg
属性を使用して、各ドキュメントの単一の集計センチメント・スコアを生成します。
センチメント分類を実行するには、キーワード問合せまたはABOUT
演算子を使用します。ABOUT
演算子を使用する場合、結果セットにはシソーラスを使用して識別されたキーワードのシノニムが含まれます。
RSIを使用してセンチメント分析を実行するには:
例16-6 センチメント分析を実行するためのRSDの入力
次の例では、センチメント分析を実行し、'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>
関連項目: