AliNLP 形態素解析プラグイン(別名 analysis-aliws)は、Alibaba Cloud Elasticsearch のビルトインプラグインです。このプラグインを Elasticsearch クラスターにインストールすると、アナライザとトークナイザーがクラスターに統合され、ドキュメントの分析および取得を実現します。また、このプラグインにはカスタム辞書ファイルをアップロードできます。アップロード後、システムはご利用の Elasticsearch クラスターに対してローリングアップデートを実行し、辞書ファイルを適用します。
概要
analysis-aliws プラグインをインストールすると、以下のアナライザおよびトークナイザーがデフォルトでご利用の Elasticsearch クラスターに統合されます。これらのアナライザおよびトークナイザーを使用してドキュメントを検索できます。また、プラグインにカスタム辞書ファイルをアップロードすることも可能です。
-
アナライザ:
aliwsアナライザは、機能語、フレーズ、および記号を保持します。また、すべての大文字英字を小文字に変換します。 -
トークナイザー:aliws_tokenizer
-
詳細については、「aliws アナライザを使用したドキュメント検索」および「辞書の設定」をご参照ください。
-
analysis-aliws プラグインを使用しても期待どおりの結果が得られない場合は、「アナライザのテスト」および「トークナイザーのテスト」の手順に従ってトラブルシューティングを行ってください。
-
トークナイザーをカスタマイズできます。詳細については、「トークナイザーのカスタマイズ」をご参照ください。
前提条件
analysis-aliws プラグインがインストールされている必要があります。このプラグインはデフォルトではインストールされていません。プラグインのインストール方法の詳細については、「ビルトインプラグインのインストールおよびアンインストール」をご参照ください。
analysis-aliws プラグインのインストールまたはアンインストールは、クラスターのローリングリスタートをトリガーします。ノードは 1 つずつ再起動され、再起動中はクラスターステータスが green から yellow に変化します。このプロセス中もクラスターは利用可能ですが、残りの正常なノードへの負荷が増加し、パフォーマンスに影響が出る可能性があります。オフピーク時間帯にこの操作を実行することを推奨します。
制限事項
-
ご利用の Elasticsearch クラスターのデータノードのメモリサイズは 8 GiB 以上である必要があります。クラスターのデータノードのメモリサイズが要件を満たしていない場合は、クラスターの構成をスペックアップしてください。詳細については、「クラスター構成のスペックアップ」をご参照ください。
-
Elasticsearch V5.X クラスター、Elasticsearch V8.X クラスター、および Elasticsearch Kernel-enhanced Edition クラスターは analysis-aliws プラグインをサポートしていません。ご利用のクラスターがプラグインをサポートしているかどうかは、Elasticsearch コンソールで確認できます。
aliws アナライザを使用したドキュメント検索
ご利用の Elasticsearch クラスターの Kibana コンソールにログインします。
手順については、「Kibana コンソールへのログイン」をご参照ください。
説明ここでの例は Elasticsearch V6.7.0 を使用しています。他のバージョンでは操作が若干異なる場合があります。
左側のナビゲーションメニューで、 を選択します。
-
Console で、次のいずれかのコマンドを実行してインデックスを作成します。
-
Elasticsearch クラスター V7.0 より前のバージョン用コマンド
PUT /index { "mappings": { "fulltext": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } } } -
Elasticsearch クラスター V7.0 以降用コマンド
PUT /index { "mappings": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } }
この例では、index という名前のインデックスを作成します。V7.0 より前のバージョンでは、インデックスのタイプは fulltext です。V7.0 以降では、インデックスのタイプは _doc です。インデックスには content プロパティが含まれます。プロパティのタイプは text です。また、aliws アナライザがインデックスに追加されています。
コマンドが正常に実行された場合、次の結果が返されます。
{ "acknowledged": true, "shards_acknowledged": true, "index": "index" } -
-
次のコマンドを実行してドキュメントを追加します。
重要次のコマンドは、Elasticsearch クラスター V7.0 より前のバージョンでのみ使用できます。Elasticsearch クラスター V7.0 以降では、fulltext を _doc に変更する必要があります。
POST /index/fulltext/1 { "content": "I like go to school." }上記のコマンドにより、1 という名前のドキュメントが追加され、ドキュメント内の content フィールドの値が I like go to school. に設定されます。
コマンドが正常に実行された場合、次の結果が返されます。
{ "_index": "index", "_type": "fulltext", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 2, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 } -
次のコマンドを実行してドキュメントを検索します。
重要次のコマンドは、Elasticsearch クラスター V7.0 より前のバージョンでのみ使用できます。Elasticsearch クラスター V7.0 以降では、fulltext を _doc に変更する必要があります。
GET /index/fulltext/_search { "query": { "match": { "content": "school" } } }上記のコマンドは、aliws アナライザを使用して fulltext タイプのすべてのドキュメントを分析し、content フィールドに school を含むドキュメントを返します。
コマンドが正常に実行された場合、次の結果が返されます。
{ "took": 5, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 0.2876821, "hits": [ { "_index": "index", "_type": "fulltext", "_id": "2", "_score": 0.2876821, "_source": { "content": "I like go to school." } } ] } }
analysis-aliws プラグインを使用しても期待どおりの結果が得られない場合は、「アナライザのテスト」および「トークナイザーのテスト」の手順に従ってトラブルシューティングを行ってください。
辞書の設定
analysis-aliws プラグインでは、aliws_ext_dict.txt という名前のカスタム辞書ファイルをアップロードできます。カスタム辞書ファイルをアップロードすると、ご利用の Elasticsearch クラスターのすべてのノードが自動的にそのファイルをロードします。この場合、システムはクラスターを再起動しません。
-
analysis-aliws プラグインをインストールした直後は、辞書ファイルは提供されません。カスタム辞書ファイルを手動でアップロードする必要があります。
-
カスタム辞書ファイルをアップロードする前に、辞書ファイルが次の要件を満たしていることを確認してください。
-
ファイル名:aliws_ext_dict.txt
-
エンコード形式:UTF-8
-
内容:各行には先頭および末尾に空白文字を含まない単一の単語を記述する必要があります。改行コードは UNIX または Linux 形式(改行文字
\n)を使用してください。Windows 環境で作成したファイルをアップロードする場合は、Linux マシン上で dos2unix などのツールを使用して変換する必要があります。
-
Alibaba Cloud Elasticsearch コンソール にログインします。
左側のナビゲーションメニューで、Elasticsearch クラスター を選択します。
対象のクラスターに移動します。
上部のナビゲーションバーで、クラスターが属するリソースグループおよびクラスターが配置されているリージョンを選択します。
Elasticsearch クラスター ページで、対象のクラスターを見つけ、その ID をクリックします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
ビルトインプラグインリスト タブで、analysis-aliws プラグインを見つけ、Actions 列の 辞書設定 をクリックします。
-
辞書設定 パネルの下部で、設定 をクリックします。
-
辞書ファイルのアップロード方法を選択し、次の手順に従って辞書ファイルをアップロードします。
-
TXT ファイル:TXT ファイルのアップロード をクリックし、ローカルマシンから辞書ファイルを選択します。
-
OSS ファイルの追加:バケット名とオブジェクト名を入力し、追加 をクリックします。
指定するバケットが Elasticsearch クラスターと同じリージョンに配置されていることを確認してください。Object Storage Service (OSS) に保存されている辞書の内容が変更された場合は、再度辞書ファイルをアップロードする必要があります。
説明analysis-aliws では辞書ファイルを 1 つのみアップロードできます。辞書ファイルを更新したい場合は、辞書ファイル名 aliws_ext_dict.txt の横にある x をクリックして辞書ファイルを削除し、新しい辞書ファイルをアップロードしてください。
-
-
Save をクリックします。
システムはクラスターを再起動せず、アップロードされた辞書ファイルを有効にするためにローリングアップデートを実行します。アップデートには約 10 分かかります。
説明アップロード済みの辞書ファイルをダウンロードする場合は、対応するファイルの横にある
アイコンをクリックします。
アナライザのテスト
次のコマンドを実行して aliws アナライザをテストします。
GET _analyze
{
"text": "I like go to school.",
"analyzer": "aliws"
}
コマンドが正常に実行された場合、次の結果が返されます。
{
"tokens" : [
{
"token" : "i",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"position" : 0
},
{
"token" : "like",
"start_offset" : 2,
"end_offset" : 6,
"type" : "word",
"position" : 2
},
{
"token" : "go",
"start_offset" : 7,
"end_offset" : 9,
"type" : "word",
"position" : 4
},
{
"token" : "school",
"start_offset" : 13,
"end_offset" : 19,
"type" : "word",
"position" : 8
}
]
}
トークナイザーのテスト
次のコマンドを実行して aliws_tokenizer トークナイザーをテストします。
GET _analyze
{
"text": "I like go to school.",
"tokenizer": "aliws_tokenizer"
}
コマンドが正常に実行された場合、次の結果が返されます。
{
"tokens" : [
{
"token" : "I",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"position" : 0
},
{
"token" : " ",
"start_offset" : 1,
"end_offset" : 2,
"type" : "word",
"position" : 1
},
{
"token" : "like",
"start_offset" : 2,
"end_offset" : 6,
"type" : "word",
"position" : 2
},
{
"token" : " ",
"start_offset" : 6,
"end_offset" : 7,
"type" : "word",
"position" : 3
},
{
"token" : "go",
"start_offset" : 7,
"end_offset" : 9,
"type" : "word",
"position" : 4
},
{
"token" : " ",
"start_offset" : 9,
"end_offset" : 10,
"type" : "word",
"position" : 5
},
{
"token" : "to",
"start_offset" : 10,
"end_offset" : 12,
"type" : "word",
"position" : 6
},
{
"token" : " ",
"start_offset" : 12,
"end_offset" : 13,
"type" : "word",
"position" : 7
},
{
"token" : "school",
"start_offset" : 13,
"end_offset" : 19,
"type" : "word",
"position" : 8
},
{
"token" : ".",
"start_offset" : 19,
"end_offset" : 20,
"type" : "word",
"position" : 9
}
]
}
トークナイザーのカスタマイズ
-
analysis-aliws プラグインによる形態素解析後に、stemmer、lowercase、porter_stem、stop などのフィルターがデータに対して関連操作を実行します。これらのフィルターをカスタムトークナイザーで使用したい場合は、analysis-aliws プラグインのトークナイザー aliws_tokenizer をカスタムトークナイザーに追加し、ビジネス要件に基づいてフィルター構成を追加できます。次のコードはその例です。stopwords フィールドを使用してストップワードを設定できます。
PUT my-index-000001 { "settings": { "analysis": { "filter": { "my_stop": { "type": "stop", "stopwords": [ " ", ",", ".", " ", "a", "of" ] } }, "analyzer": { "my_custom_analyzer": { "type": "custom", "tokenizer": "aliws_tokenizer", "filter": [ "lowercase", "porter_stem", "my_stop" ] } } } } }説明特定のフィルターが不要な場合は、そのフィルター構成を削除できます。
-
aliws_tokenizer では、類義語を使用してカスタムトークナイザーを設定できます。設定方法は analysis-ik プラグインの場合と同じです。詳細については、「類義語の使用」をご参照ください。
よくある質問
-
aliws アナライザは、形態素解析中に単語の末尾文字を削除することがあります。例えば、
iPhoneおよびChineseをトークン化すると、末尾のeが削除され、Iphonおよびchinesが返されます。-
原因:デフォルトの
aliwsアナライザは、形態素解析後にステミングフィルターを適用し、単語の末尾のeなどの文字を削除します。 -
解決策: 次のコマンドを実行します。このコマンドでは、my_custom_analyzer フィールドが分析構成部分で指定され、フィルター構成部分は削除されています。
PUT my-index1 { "settings": { "number_of_shards": 1, "analysis": { "analyzer": { "my_custom_analyzer": { "type": "custom", "tokenizer": "aliws_tokenizer" } } } } } -
検証:次のコマンドを実行して、形態素解析結果が期待どおりであるか確認します。
GET my-index1/_analyze { "analyzer": "my_custom_analyzer", "text": ["iphone"] }
-
参照
-
Alibaba Cloud Elasticsearch で提供されるプラグインの詳細については、「プラグインの概要」をご参照ください。
-
API オペレーションを呼び出してビルトインプラグインをインストールする方法については、「InstallSystemPlugin」をご参照ください。
-
API オペレーションを呼び出して analysis-aliws プラグインの辞書ファイルを更新する方法については、「UpdateAliwsDict」をご参照ください。
-
API オペレーションを呼び出して Elasticsearch クラスターにインストールされているプラグインを取得する方法については、「ListPlugins」をご参照ください。