AliNLP トークナイザープラグイン(別名:analysis-aliws)は、Alibaba Cloud Elasticsearch の組み込みプラグインです。このプラグインを Elasticsearch クラスターにインストールすると、クラスター内にアナライザおよびトークナイザーが統合され、ドキュメントの解析および取得が可能になります。また、カスタム辞書ファイルのアップロードもサポートしており、アップロード後にクラスターは再起動せずにローリング更新を実行して辞書ファイルを適用します。
analysis-aliws プラグインは、クラスターに以下の 2 つのコンポーネントを追加します:
アナライザ:
aliws— 結果から機能語、機能句、記号を除外しますトークナイザー:
aliws_tokenizer
インストール後は、aliws アナライザを使用してドキュメントのインデックス作成および検索を実行するほか、語彙を拡張するためのカスタム辞書ファイルをアップロードしたり、aliws_tokenizer を基盤としてカスタムアナライザを構築したりできます。
検索結果が予期しない場合、問題の診断には、アナライザおよびトークナイザーを直接テストすることを推奨します。詳細については、「アナライザのテスト」および「トークナイザーのテスト」をご参照ください。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
analysis-aliws プラグインがインストール済みの Elasticsearch クラスター。このプラグインはデフォルトでインストールされていません。インストール手順については、「組み込みプラグインのインストールおよび削除」をご参照ください。
メモリが最低 8 GiB のデータノード。クラスターがこの要件を満たさない場合は、まずクラスターの構成をスペックアップしてください。詳細については、「クラスター構成のスペックアップ」をご参照ください。
制限事項
analysis-aliws プラグインは、以下の環境ではサポートされていません。
Elasticsearch V5.X クラスター
Elasticsearch V8.X クラスター
Elasticsearch Kernel-enhanced Edition クラスター
操作を進める前に、Elasticsearch コンソールでご使用のクラスターがこのプラグインをサポートしているかを確認してください。
aliws アナライザによるドキュメント検索
このセクションでは、aliws アナライザを用いたインデックスの作成、ドキュメントのインデックス登録、および検索の実行手順について説明します。
以下の手順は、Elasticsearch V6.7.0 クラスターを例として示しています。他のバージョンでは手順が異なる場合があります。実際の操作は、ご利用のコンソール画面に従って行ってください。
お使いの Elasticsearch クラスターの Kibana コンソールにログインします。詳細については、「Kibana コンソールへのログイン」をご参照ください。
左側のナビゲーションウィンドウで、Dev Tools をクリックします。
Console タブで、ご使用のクラスターバージョンに対応したコマンドを実行してインデックスを作成します。V7.0 より前のバージョンを実行中のクラスターの場合:
PUT /index { "mappings": { "fulltext": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } } }V7.0 以降のバージョンを実行中のクラスターの場合:
PUT /index { "mappings": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } }いずれのコマンドも、
indexという名前のインデックスを作成し、contentフィールド(タイプ:text)にaliwsアナライザを割り当てます。V7.0 より前のバージョンではインデックスタイプがfulltext、V7.0 以降では_docとなります。正常な応答は以下のようになります。{ "acknowledged": true, "shards_acknowledged": true, "index": "index" }インデックスにドキュメントを追加します。
重要以下のコマンドは、V7.0 より前のバージョンを実行中のクラスターにのみ適用されます。V7.0 以降のバージョンでは、
fulltextを_docに置き換えてください。POST /index/fulltext/1 { "content": "I like go to school." }このコマンドにより、ID
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 }ドキュメントを検索します。
重要以下のコマンドは、V7.0 より前のバージョンを実行中のクラスターにのみ適用されます。V7.0 以降のバージョンでは、
fulltextを_docに置き換えてください。GET /index/fulltext/_search { "query": { "match": { "content": "school" } } }このコマンドは、
fulltextタイプ内のすべてのドキュメントに対してaliwsアナライザを実行し、contentフィールドにトークンschoolを含むドキュメントを返します。機能語(例:to)は解析対象から除外されます。正常な応答は以下のようになります。{ "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 プラグインは、aliws_ext_dict.txt という名前のカスタム辞書ファイルを 1 つサポートしています。このファイルをアップロードすると、クラスター内のすべてのノードが自動的に読み込み、再起動せずにローリング更新を実行します(所要時間は約 10 分です)。
インストール直後は辞書ファイルが提供されません。カスタム語彙が必要な場合は、必ずアップロードしてください。
辞書ファイルの要件
アップロード前に、辞書ファイルが以下の要件を満たしていることを確認してください。
| 要件 | 詳細 |
|---|---|
| ファイル名 | aliws_ext_dict.txt |
| エンコーディング | UTF-8 |
| フォーマット | 1 行に 1 単語、各行は \n(UNIX/Linux 改行)で終了。先頭および末尾に空白文字を含めないでください。 |
| Windows ファイル | アップロード前に、dos2unix ツールを使用してファイルを変換してください。 |
辞書ファイルのアップロード
Alibaba Cloud Elasticsearch コンソール にログインします。
左側のナビゲーションウィンドウで、Elasticsearch クラスター をクリックします。
上部のナビゲーションバーで、クラスターのリソースグループおよびリージョンを選択します。Elasticsearch クラスター ページで、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、構成と管理 > プラグイン を選択します。
組み込みプラグイン タブで、analysis-aliws プラグインを見つけ、操作 列の 辞書の構成 をクリックします。
辞書の構成 パネルの左下隅にある 構成 をクリックします。
以下のいずれかの方法で辞書ファイルをアップロードします。
TXT ファイル:TXT ファイルのアップロード をクリックし、ローカルマシンからファイルを選択します。
OSS ファイルの追加:バケット名 および ファイル名 を入力し、追加 をクリックします。Object Storage Service (OSS) バケットは、Elasticsearch クラスターと同じリージョンに配置されている必要があります。OSS ファイルの内容が後で変更された場合、コンソールから再度辞書ファイルをアップロードする必要があります(OSS 側の変更は自動で反映されません)。
保存 をクリックします。クラスターは辞書ファイルを適用するためにローリング更新を実行します(所要時間は約 10 分)。このプロセス中、クラスターは再起動しません。
アップロード済みのファイルをダウンロードするには、ファイル名の横にある
アイコンをクリックします。
同時に有効な辞書ファイルは 1 つだけです。既存のファイルを置き換えるには、aliws_ext_dict.txt の横にある xアナライザのテスト
以下のコマンドを実行して、aliws アナライザによるテキストのトークン化結果を確認します。
GET _analyze
{
"text": "I like go to school.",
"analyzer": "aliws"
}aliws アナライザは、機能語および記号を除外します。入力 "I like go to school." に対する期待される出力は以下のとおりです。
{
"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
}
]
}機能語 to およびピリオド . は出力から除外されます。
トークナイザーのテスト
以下のコマンドを実行して、aliws_tokenizer によるテキストのトークン化結果を確認します。
GET _analyze
{
"text": "I like go to school.",
"tokenizer": "aliws_tokenizer"
}aliws アナライザとは異なり、aliws_tokenizer は機能語、空白、句読点を含むすべてのトークンを保持します。入力 "I like go to school." に対する期待される出力は以下のとおりです。
{
"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
}
]
}カスタムアナライザの構築
aliws_tokenizer は、トークン化後に以下のフィルターを適用します。
| フィルター | 効果 | デフォルト動作 |
|---|---|---|
stemmer | 単語を語幹に還元 | 有効 |
lowercase | すべてのトークンを小文字に変換 | 有効 |
porter_stem | Porter ステミングアルゴリズムを適用 | 有効 |
stop | ストップワードを除去 | 有効 |
カスタムアナライザを構築するには、aliws_tokenizer をベースのトークナイザーとして指定し、要件に応じてフィルターを構成します。stopwords フィールドを使用して、カスタムストップワードを定義できます。
以下の例では、カスタム stop フィルターを備えた my_custom_analyzer という名前のカスタムアナライザを作成しています。
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"
]
}
}
}
}
}フィルタリングを完全にスキップするには、アナライザ構成から filter ブロックを削除してください。カスタムアナライザが期待通りに動作することを確認するには、以下のコマンドを実行します。
GET my-index-000001/_analyze
{
"analyzer": "my_custom_analyzer",
"text": ["I like go to school."]
}aliws_tokenizer は、analysis-ik プラグインと同様の方法で同義語拡張の構成もサポートしています。詳細については、「同義語の使用」をご参照ください。
よくある質問
analysis-aliws プラグインの構成方法は? 辞書ファイルのフォーマットは?
アップロード手順については、「カスタム辞書の構成」、フォーマットについては、「辞書ファイルの要件」をご参照ください。
プラグイン構成に関するその他の質問については、「analysis-aliws のよくある質問」をご参照ください。
Elasticsearch の同義語、IK トークン、AliNLP トークンの違いは何ですか?
詳細については、「Elasticsearch の同義語 vs. IK トークン vs. AliNLP トークン」をご参照ください。
OSS 辞書が更新された場合、クラスターは変更を自動で反映しますか?
いいえ。OSS 辞書の内容が変更された場合は、コンソールから再度ファイルをアップロードする必要があります。「カスタム辞書の構成」をご参照ください。
ローリング更新および OSS ベースの辞書に関する詳細については、「この FAQ エントリ」をご参照ください。
トークン化後に、iphone(→ Iphon)や Chinese(→ chines)などの単語の末尾の e が欠落します。これを修正するにはどうすればよいですか?
aliws_tokenizer はトークン化後に語幹還元(ステミング)を実行します。そのため、各単語の末尾の文字 e が削除されます。ステミングを無効にするには、フィルターを一切適用しない aliws_tokenizer を使用するカスタムアナライザを作成します。
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"]
}出力には、切り捨てのない iphone が返されるはずです。
参考資料
プラグインの概要 — Alibaba Cloud Elasticsearch で利用可能なすべてのプラグイン
InstallSystemPlugin — 組み込みプラグインをインストールする API オペレーション
UpdateAliwsDict — analysis-aliws 辞書ファイルを更新する API オペレーション
ListPlugins — クラスターにインストール済みのプラグインを一覧表示する API オペレーション