Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc

1.905 visualizaciones

Publicado el

Presentation Slides for Azure Search Workshop

Azure Search 言語処理関連機能
アナライザー、検索クエリー、辞書、& ランキング, etc.

Publicado en: Tecnología
  • Sé el primero en comentar

Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc

  1. 1. Azure Search 言語処理関連機能 アナライザー、検索クエリー、辞書、& ランキング, etc. Presentation Slides for Azure Search Workshop
  2. 2. これはAzure Searchの言語処理関連機能である アナライザー、検索クエリー、辞書、ランキング にフォーカスした資料になります。 Azure Searchの機能全般に関してはこちらを 参照ください • Azure Searchとは?(Azure Docs) • Azure サービスを活用して作るフルマネージドな全文検索 アプリケーション
  3. 3. Id: 375 Question: “What is..?” Answer: “This is …” Category: “Azure” Keywords: “kw1”,”kw2”, URL: “https://...” ドキュメント フィールド テキストトークン インデックス
  4. 4. 全文検索における再現率と適合率の考え方 再現率(Recall) 適合率 (Precision) 検索ヒット数↑ 検索ノイズ ↑ 検索精度↑ 検索漏れ↑ 再現率、適合率の最適なブレイクポイント
  5. 5. QueryParser Search Engine Analyzer IndexWriter インデックスSimple lucene Analyzed terms Query terms Query tree Query text Documents terms Analyzed terms Retrieve Ingest Analyzer ドキュメント 検索処理 • クエリーを元に トークン引き当て • ランキング処理 クエリ文を解析し内部 クエリ―形式に変換 テキスト解析を行いトークンの 展開、変換、削除などを行う 転置インデックス インデックス生成処理
  6. 6. 文字列分割方式 • N-gram • 形態素解析 再現率/適合率向上のための手法例 • 語幹変化/見出し語変化 • 正規化 • ストップワード除去 • アンチフレージング • 同義語展開 • スペルチェック • クエリサジェスト • ファセット/ナビゲーション • クラスタリングエンティティ抽出
  7. 7. 再現率/ 適合率向上のための主要技術 語幹変化(stemming) • car, cars, car’s, cars’ → car • 行われ、行った → 行 • tumbles, tumbling → tumbl 正規化 • 半角カタカナ→全角カタカナ • カタカナ→ひらがな • Αλφαβητικός → Alphabētikós • 簡化字 → 简化字 ストップワード除去 • 日本語:は、です、ます、など削除 • 英語:a、the、andなど削除 同義語展開 • 二酸化炭素 → 二酸化炭素, co2, 炭酸ガス • マイクロソフト → マイクロソフト、MS、日本MS、 日本マイクロソフト、Microsoft Japan, Microsoft • ヴァーチャル → ヴァーチャル、バーチャル アンチフレージング削除 Who is Miles Davis?“→Miles Davis? 見出し語変化 (lemmatization) • am, are, is → (to) be • 行われ、行った → 行う • tumbles, tumbling → tumble
  8. 8. N-gram 全体を文脈や単語の境界とは関係な くN文字ずつ機械的に分割。辞書を必 要としない。 形態素解析 文脈の解析、単語分解を行いトーク ンを抽出。解析のために辞書を必要 とする。 2Gram 英語例 2Gram 日本語例 When in Rome 東京都 ルパン上映時間 “Wh” “he” “en” “n “ “ i” “in” “n “ “ R” “Ro” “om” “me” “東京” “京都” “都 ” “ ル” “ルパ” “パン” “ン上” “上映” “映時” “時間” 形態素解析 英語例 形態素解析 日本語例 When in Rome 東京都 ルパン上映時間 “When” “in” “Rome” “東京都” “ルパン” “上映” “時間”
  9. 9. N-gram 形態素解析 トークナイズの速度 早い 遅い インデックスのサイズ 大きい 小さい 精度 (precision) 低い 高い ヒットする量 (recall) 多い 少ない 検索スピード 遅い 速い 運用コスト 低い 辞書不要 高い 辞書の用意、メンテナンスが必要
  10. 10. # ドキュメント 1 Microsoft’s new cloud search service is … 2 A cloud based search application on Azure 3 Application programming for Microsoft Azure … … トークン トークンが含まれるド キュメント# Microsoft 1, 3 search 1, 2 service 1 cloud 1, 2 Azure 2, 3 application 2, 3 programming 3 … … 「Azure」で検索 テキスト解析 インデクシング
  11. 11. テキスト解析の基盤は Lucene Core 処理単位はアナライザー
  12. 12. { "name":"description", "type":"Edm.String", "searchable": true, "filterable":false, "sortable":false, "facetable":false, "retrievable":true "analyzer":"ja.microsoft" } どうトークンを作 成するかを決める 転置インデックス 作成(トークン化) ドキュメン ト保存 インデックス
  13. 13. インデックススキーマ定義で設定すること 管理ポータルもしくはAPI経由でインデックスのスキーマ定義を行う スキーマで定義するのは大きく次の3つ • 検索フィールド • 主キー • データ型: String, Collection(string list), Int32/64, Double, DateTime, Boolean, Geography-point • 属性: Retrievable, Filterable, Sortable, Facetable, Searchable • アナライザー(言語アナライザー) • サジェスタ • サジェッション候補用フィールド定義 • スコアリングプロファイル • カスタムのスコア付け動作の定義。ランキングに影響 https://docs.microsoft.com/en-us/rest/api/searchservice/Create-Index
  14. 14. https://docs.microsoft.com/en-us/azure/search/search-howto-complex-data-types Collection型
  15. 15. スキーマ変更に関する注意点 スキーマの更新は限定的にサポート 〇 ✖ • 新しいフィールドの追加 • 新しいフィールドが追加されると既存ドキュメントの追 加フィールドの値はNULL扱い • 既存フィールドの種類変更、削除
  16. 16. POST /indexes?api-version=2016-09-01 Host: qnademo.search.windows.net api-key: 91FAB1CDBD75CF1D39491043BF3491AC Content-Type: application/json { "name": "qna", "fields": [ { "name":"id", "type":"Edm.String", "key":true, "retrievable":true, "searchable":false, "filterable":false, "sortable":false, "facetable":false }, { "name":"question", "type":"Edm.String", "retrievable":true, "searchable":true, "filterable":false, "sortable":false, "facetable":false,"analyzer":"ja.lucene"}, { "name":"answer", "type":"Edm.String", "retrievable":true, "searchable":true, "filterable":false, "sortable":false, "facetable":false,"analyzer":"ja.lucene"}, { "name":"category", "type":"Edm.String", "retrievable":true, "searchable":false, "filterable":true, "sortable":true, "facetable":true } ], "suggesters": [ { "name":"questionsg", "searchMode":"analyzingInfixMatching", "sourceFields":["question"] } ], "scoringProfiles": [ { "name": "weightedFields", "text": { "weights": { "question": 9, "answer": 1 } } } ], "corsOptions": { "allowedOrigins": ["*"], "maxAgeInSeconds": 300 } } 基本設定 フィールド属性 アナライザー サジェスタ設定 CORS設定 スコアリング プロファイル設定
  17. 17. 基本設定 フィールド属性 アナライザー 設定 サジェスタ設定
  18. 18. 基本設定 フィールド属性 アナライザー サジェスタ設定 スコアリング プロファイル設定 CORS設定
  19. 19. • インデクシング処理時とクエリ処理時実行されるテキスト解析処理 • フィールド単位で設定可能 • カスタムアナライザーで独自アナライザの定義が可能 <b>Azure Search</b> allows you to easily add a robust search experience インデックス処理 クエリ処理
  20. 20. • 文字列のトークン化 • 語幹変化/見出し語変化 • 正規化 • ストップワード除去 • アンチフレージング 検索結果の再現率/適合率 向上のため手法 主要なテキスト解析処理 → 方式: 形態素解析, N-Gram
  21. 21. 文字フィルタ ( Char Filters ) トークナイズ処理の前、文字レベルの加工処理 1アナライザ に0個以上の 文字フィルタを定義可能 トークナイザ ( Tokenizer ) 文字列をトークン(単語)に分かち書き方法を定義 1アナライザ に1つのトークナイザを設定可能 トークンフィルタ ( Token Filters ) トークナイズ処理後、トークンに対して加工処理を提供 1アナライザ に0個以上の トークンフィルタを定義可能
  22. 22. a s 文字列をトークンに分かち書き トークンを小文字化 ストップワードを削除 HtmlStripCharFilter 文字列からHTMLタグを削除
  23. 23. a s 文字列をトークンに分かち書き トークンを小文字化 ストップワードを削除
  24. 24. Azure Search Built-in モジュール一覧 https://docs.microsoft.com/en-us/rest/api/searchservice/custom-analyzers-in-azure- search#property-reference Analyzer • <lang>.microsoft (50言語) • <lang>.lucene (35言語) • keyword • pattern • simple • standard • standardasciifolding.lucen e • stop • whitespace CharFilter • html_strip • mapping • pattern_replace Tokenizer • classic • edgeNGram • keyword_v2 • letter • lowercase • microsoft_language_tokenizer (43言語) • microsoft_language_stemming _tokenizer (*) • nGram • path_hierarchy_v2 • pattern • stnadard_v2 • uax_url_email • whitespace TokenFilter arabic_normalization apostrophe asciifolding cjk_bigram cjk_width classic common_grams dictionary_decompounder edgeNGram_v2 elision keep keyword_marker keyword_repeat kstem length limit lowercase nGram_v2 pattern_capture pattern_replace phonetic porter_stem reverse shingle snowball stemmer (*) stemmer_override stopwords (*) synonym trim truncate unique uppercase word_delimiter (*) - 複数言語対応。ただし日本語み対応 2017年5月対応状況
  25. 25. 重要性の低いトーク ン(ごみ)がヒット している 日本語文章に適した トークン分割がされ ていない StandardAnalzyer(標準 アナライザー)フィールド の日本語検索結果
  26. 26. マイクロソフト自然言語処理(NLP)技術 ja.microsoft Lucene Core ja.lucene kuromoji 言語別アナライザー一覧 日本語の場合ja.luceneかja.microsoftの2択と考えてよい
  27. 27. doc https://<アカウント名>.search.windows.net/indexes/<インデックス名>/analyze { "text": "テキスト", "analyzer":"アナライザ名" } { "tokens": [ { "token" : "トークン1", "startOffset": 0, "endOffset": 4, "position": 0 }, { "token": "トークン2", "startOffset": 5, "endOffset": 7, "position": 1 }, .... ]} { "text": "テキスト", "tokenizer": "トークナイザ名", “tokenFilters”:(任意)[フィルタ(複数)], "charFilters":(任意)[フィルタ(複数)] }
  28. 28. https://github.com/yokawasa/azure-search-ta
  29. 29. テキスト「 経済新聞をかいにいく」の解析 https://www.atilika.com/ja/products/kuromoji.html http://atilika.org/kuromoji/
  30. 30. ja.lucene • kuromoji を使用 • default(search)テキスト分割モードで 設定 ja.microsoft • マイクロソフト日本語NLP • 詳細処理非公開 吾輩はここで始めて人間というものを見た。 吾輩はここで始めて人間というものを見た。 掌の上で少し落ちついて書生の顔を見たの がいわゆる人間というものの見始みはじめ であろう。 掌の上で少し落ちついて書生の顔を見たの がいわゆる人間というものの見始みはじめ であろう。 人間 人間 見た 見 見 人間 人間
  31. 31. en.lucene • StandardAnalzyerの拡張 • 語幹変化 (Porter Stemming) • ストップワード削除 en.microsoft • マイクロソフト英語NLP • 語幹変化ではなく見出し語変化 (lemmatization) • 詳細処理非公開 after such a fall as this, I shall think nothing of tumbling down stairs!, Why, I wouldn't say anything about it, even if I fell off the top of the house!' after such a fall as this, I shall think nothing of tumbling down stairs!, Why, I wouldn't say anything about it, even if I fell off the top of the house! or she fell very slowly, for she had plenty of time as she went down to look about her and to wonder what was going to happen next or she fell very slowly, for she had plenty of time as she went down to look about her and to wonder what was going to happen next she she she fell fell fallfall
  32. 32. "analyzers":(optional)[ { "name":"analyzer_name_1", "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer", "charFilters":[ "char_filter_name_1", "char_filter_name_2" ], "tokenizer":"tokenizer_name", "tokenFilters":[ "token_filter_name_1", "token_filter_name_2" ] }, { "name":"analyzer_name_2", "@odata.type":"#analyzer_type", ... } ], "charFilters":(optional)[ { "name":"char_filter_name", "@odata.type":"#char_filter_type", "option1":"value1", "option2":"value2", ... } ], "tokenizers":(optional)[ { "name":"tokenizer_name", "@odata.type":"#tokenizer_type", "option1":"value1", "option2":"value2", ... } ], "tokenFilters":(optional)[ { "name":"token_filter_name", "@odata.type":"#token_filter_type", "option1":"value1", "option2":"value2", ... } ] Analysis in Azure Search https://msdn.microsoft.com/en- us/library/azure/mt605304.aspx 文字フィルタ トークナイザ トークンフィルタ
  33. 33. 日本語用N-gramアナライザ やりたいこと • 入力された文字列に対して • HTMLタグを除去したい • 文字列の分割 • 3グラムで分割したい • 分割後のトークンに対して • 全角・半角文字を統一させたい • 大文字を小文字に変換させたい • 同義語展開をさせたい "analyzers":[ { "name":"my_ngram_ja", "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer", "charFilters": ["html_strip"], "tokenizer":"my_tokenizer", "tokenFilters":[ "cjk_width", "lowercase“, “my_synonym_filter” ] } ], "tokenizers":[ { "name":"my_tokenizer", "@odata.type":"#Microsoft.Azure.Search.NGramTokenizer", "minGram":1, "maxGram":3 } ], "tokenFilters":[ { "name":"my_synonym_filter", "@odata.type":"#Microsoft.Azure.Search.SynonymTokenFilter", "synonyms": [ "吾輩,わがはい,私,自分", "猫,ねこ,ネコ,CAT" ], “ignoreCase”: true, “expand”: true } ], 同義語設定内容 • “吾輩、わがはい、私、自分” • “猫、ねこ、ネコ、CAT”
  34. 34. 文字列分かち書き (3グラム) HTML_Strip HTMLタグを削除 (吾輩|わがはい|私|自分) (猫|ねこ|ネコ|CAT) “吾輩”と”猫”を同義語展開 (猫|ねこ|ネコ|CAT) “ネコ” を同義語展開 半角カタカナ全角化 文字列分かち書き (3グラム)
  35. 35. クエリ―について
  36. 36. Synonyms Support for efficiently indexing text blobs Service Statistics API cognitive search Create Skillset predefined skills custom skills Create Indexer Azure Search Service REST api-version 2017-11-11-Preview https://docs.microsoft.com/en-us/rest/api/searchservice/
  37. 37. https://docs.microsoft.com/en-us/rest/api/searchservice/search-documents 8KB 要URL encode 約16MB URLencode不要
  38. 38. https://<アカウント名>.search.windows.net/indexes/<インデックス名>/docs &search=“xxx” &searchMode=all &queryType=full ?api-version =2017-11-11 &$count=true &$top=5 &$skip=10 &$select=title,speaker &$orderby=level desc &facet=tag &highlight=title • 絞り込み用 • アナライザとランキング処理共に無し • oData式構文サブセット • and, or, not, eq, lt, any, all search • searchクエリ文字列 • クエリ文字列にアナライザー処理 • ランキング処理 searchMode • Booleanクエリ評価方法を決定(all|any) queryType • クエリパーサーを選択(simple|full) &$filter = xxx
  39. 39. /indexes/myindex/doc s?$filter=geo.intersects (loc,geography'POLYGON(( -122.03157 47.57858, -122.13157 47.67858, -122.03157 47.57858))') &search=キーワード 検索 (アナライザ+ ランキング) 絞り込み 特定ポリゴン内に存在するドキュメント検索
  40. 40. search= A B の例 (1) search=A B&searchMode=any (2) search=A B&searchMode=all ⇒ search=A OR B ⇒ search=A AND B any all
  41. 41. simple full クエリーパーサーを選択 Simple クエリ (simple) • 規定のクエリで表現性は低い • AND, OR, NOT 検索 • ワイルドカード検索 • フレーズ検索 • グループ化 (full) • Apache Luceneクエリが利用可 • 表現性の高いクエリ言語 • フィールドスコープ • あいまい検索(fuzzy) • 近似検索(proximity) • Termブースティング • 正規表現 • ワイルドカード検索 • フレーズ検索
  42. 42. NOTE: searchModeとの組み合わせ (1) search=A-B&searchMode=any ⇒ search=A or (NOT B) (2) search=A-B&searchMode=all ⇒ A and (NOT B) AND検索「+」A+B : AかつB query: Azure+Search OR検索「|」 A|B: A, B or Both query: Azure|Search NOT検索「-」A-B: A or (NOT B) query: Azure-Search A NOT B ワイルドカード検索「*」大小文字区別なし query: Azu* フレーズ検索「“”」”A B”: A B順にあるものだけ query: “Azure-Search” グルーピング「()」A+(B|C): A+B or A+C query: Azure+(AD|Search)
  43. 43. フィールドスコープ「field:term」検索対象フィールドの指定 query: session:Azure AND Search query: session:“Azure Search" AND “Azure AD" あいまい検索「term~」または「term~N」(N=0~2, default 2): N回入れ替えれば 一致するもの全て query: Azure~1 近似検索「”A B”~N 」: AとBの間がN語以内のもの query:“Azure Search”~3 Azure search 3 words
  44. 44. ブースティング「term^N」または「phrase^N」(N:ブースト値 default=1): ^で指定 した単語またはフレーズをN値分ブーストさせてより適合性の高いものにする(ランキン グをN値分上げる) query: apache lucene^2 query: “Azure Search"^3 "SharePoint Search" 正規表現検索「/正規表現/」正規表現構文詳細はLucene RegExpクラスドキュメントを 参照ください query: /[hm]otel/ ワイルドカード検索「*」複数文字、「?」単一文字ワイルドカード。中間、後方一致のみ。 前方一致は未サポート query: te?t query: test*
  45. 45. &queryType=full & searchMode=alltitle:Azureサポート +EAsearch= title:Azureサポート AND EA title:(Azure AND サポート) AND EA Luceneクエリパーサー指定 queryTypeでクエリパーサー選択 simple(規定) | full 検索語から演算子(title:や+など) を 切り出しサブクエリに分解 クエリ中の単語やフレーズに対し てアナライザーのテキスト解析 searchModeでBooleanクエリ規定 演算子決定 all→AND (規定)| any→OR
  46. 46. • レーベンシュタイン距離(編集距離) AzuuuとAzureの例 レーベンシュタイン距離=2 • Azuuu → Azuru (“u”と”r”の入れ替え) • Azuru → Azure (“u”と”e”の入れ替え) 2回入れ替えて同じになるのでAzuuu~2で Azureがマッチします /indexes/myindex/docs/suggest?... &search=Azuru&suggesterName=mysuggt& fuzzy=true 2. 検索サジェストのfuzzyモード1. Luceneクエリのfuzzy search機能 /indexes/myindex/docs?… &search=Azuru~1 &querytype=full
  47. 47. (レーベンシュタイン距離など
  48. 48. 同義語辞書
  49. 49. クエリ処理 Microsoft 「Microsoft」で検索 インデックス Synonym Maps Microsoft OR MSFT OR MS OR マイクロソフト … Microsoft, MSFT, MS, マイクロソフト … 「Microsoft」でクエリを投げ 「マイクロソフト」,「MSFT」, 「MS」が含まれた文書もヒット
  50. 50. フォーマット詳細:Lucene SolrSynonymParser APIリファレンス i-pod, i pod => ipod i-pod, i pod, ipod foo => foo, bar foo => baz foo => foo, bar, baz
  51. 51. { "name": "mysynonymmap", "format":"solr", "synonyms": " MS, MSFT, Microsoft Washington, Wash., WA => WA pet => cat, dog, puppy, pet" }' { "name":”myfieldname", "type":"Edm.String", "searchable":true, "analyzer":"en.lucene", "synonymMaps":[ "mysynonymmap" ] }
  52. 52. https://feedback.azure.com/forums/263029-azure-search/suggestions/8410635-support-custom-dictionary
  53. 53. ドキュメントの 関連性の数値化 (スコアリング) ランクスコア 順に 結果表示 検索開始 ソート 条件あり orderby=pricesearch=suface
  54. 54. TF-IDFベース のスコア スコアリン グプロファ イルによる 加点スコア Σ ランク スコア
  55. 55. Term Frequency Inverse Document Frequency 単語の出現頻度 単語の特徴度(レア度) https://ja.wikipedia.org/wiki/Tf- idf
  56. 56. スコアリング関数設定 filterableなフィールドに対して関 数によるブースト設定が可能 "scoringProfiles": [ { "name": “genreProfile", "text": { "weights": { "albumTitle": 1.5, "genre": 5 } “functions": [ … ] }, { "name": “lastupdateProfile, "functions": [ { "type": "freshness", "fieldName": "lastUpdated", "boost": 2, "interpolation": "quadratic", "freshness": { "boostingDuration": "P365D" } } ] } ], 関数の種類 ブースト基準 freshness 鮮度 magnitude 数値、その範囲 distance 距離 tag タグ グラフ補間 (interpolation)
  57. 57. プロファイル名search=キーワード&scoringPorfile= フィールドウェイト設定 freshness (鮮度) 度合いによるブースト "scoringProfiles": [ { "name": "プロファイル名", "text": (optional) { "weights": { "field_name1": 相対的ウェイト値, ... } }, "functions": (optional) [ { "type": "関数タイプ", "boost": ブースト値, "fieldName": "対象フィールド名", "interpolation": "数値補間方法", } ], “functionAggregation”: ”関数合計算出方法" }], 関数合計値算出方法:sum(規定)|average | minimum | maximum | firstMatching magnitute (数値、範囲) 度合いによるブースト distance (距離) 度合いによるブースト tag で指定した値が含まれるかどうかでブースト 関数 プロファイル名 searchableフィールドにのみ有効 filterableフィールドにのみ有効
  58. 58. 属性 説明 magnitude 数値フィールドの値に基づく。星評価、クリック数など freshness DateTimeOffsetフィールドの値に基づく distance 地理的情報に基づく 線形 (Linear) 一定の減少量で。既定の補間 定数 (Constant) 一定の値 二次式 (Quadratic) 最初は遅いペースで低下し、範囲の終わり近づく につれて低下するペースが速く Log10 (Logarithmic ) 最初は速いペースで低下し、範囲の終わり近づく につれて低下するペースが遅く https://msdn.microsoft.com/library/azure/dn798928.aspx/
  59. 59. Title=“Azure Search Deep Dive” Description = Many applications use search as the primary interaction …Microsoft … LastUpdate= 2016-04-28 Rating = 5 /indexes/myindex/docs? search= Azure%20Search & scoringProfile=myScoreProfile ドキュメント Σ TF-IDFベース のスコア算出 TAG ブースト Distance ブースト freshness ブースト Magnitude ブースト スコア値算出 +0.3 0 +0.2 +0.2 +0.5 functionAggregation= sum (default) | average | minimum | maximum | firstMatching プロファイル関数によるブースト値の 集約方法はfunctionAggregationで決定 スコアリング関 規ス定コアリン グ
  60. 60. スコアリングプロファイル① • フィールドウェイト設定 スコアリングプロファイル② • 鮮度(freshness)でのブースト設定 • 数値やその範囲(magnitude)による ブースト設定
  61. 61. Azure 検索 クラウド ドキュメントA (score: 0.312) Tags: ドキュメントB (score: 0.291) Tags: Azure ドキュメントC (score: 0.164) Tags: サーチ ドキュメントA (score: 0.312) Tags: ドキュメントC (score: 0.164) Tags: ユーザXが関心のあるキーワード ユーザーXさん ドキュメントB (score: 0.91) Tags: Azure スコアブースト 検索ヒットしたドキュメント 最終的な結果並び順 「〇✖△」で検索 Tagブースト用プロファイル(※) と関心のあるTagを指定 Xさんにとって興味のある結果が上位にきた! ※ Tagブーストの一連の設定例についてはAPPENDIXを参照ください
  62. 62. ©︎ Copyright Microsoft Corporation. All rights reserved Thank you
  63. 63. サンプルアプリケーション  Q&Aナレジッジベース全文検索アプリ  インデックス作成、インデクサ作成、検索クエリ、同義語辞書など 一通りのAPI処理サンプルがアップされています  サンプルソースコード https://github.com/yokawasa/azure-search-qna-demo
  64. 64. 登場人物 役割 設定箇所 変更コスト アナライザー テキストのトークン化 インデックススキーマ 大 (小: 新規フィールド追 加でアナライザ設定) クエリ トークンの絞り込み、マッ チングの挙動と結果評価の 制御 クエリパラメータ 小 ランキング 関連度(スコア)の計算 スコアリングプロファイル クエリパラメータ 小 同義語辞書 辞書ベースのキーワードの 展開(クエリ側でのみ) 同義語辞書 インデックススキーマ 小 (大: 既存フィールドへ の新規定義追加が必要な 場合)
  65. 65. 最適なフィールド属性の定義 • 必要最低限の機能有効化。特に不要な言語解析処理 (searchable)は避ける 最適なアナライザーの選定 • テキスト解析の基本処理なので選択は慎重に • 基本的に日本語はja.luceneかja.microsoftの2択 スコアリング- フィールドウェイト調 整 • searchableフィールドにフィールドウェイト設定 クエリパラメータ選定 • searchMode、queryType、$filter、search 短時間で そこそこの結果 にするために まずできること
  66. 66. スペルミス・タイプミス対策 • あいまい検索(fuzzy)や近似検索( Proximity) ランキングのパーソナライズ • ユーザの位置/関心内容に応じてランキングを変える – 距離/Tagブースト 自前でテキスト解析処理を施す • Azure Search未サポート処理をAzure Search外の処理でカ バーするアプローチ • 例)事前にキーワード文字列の正規化やノイズ除去 アナライザーのカスタマイズ(△) • カスタムアナライザでアナライザーの振る舞いをカスタ マイズ。ただし現時点(2018年6月)では日本語モジュー ルが不十分なので日本語検索ではあまり効果が期待でき ない。 さらに 精度・利便性 を上げるために できること 同義語、類義語対応 • 再現率を上げたいフィールドに対して同義語辞書 (Public Preview)機能の有効化。辞書更新は逐次
  67. 67. https://channel9.msdn.com/Events/de- code/2017/DI08 https://www.slideshare.net/decode2017/di08-azure- search
  68. 68. テキスト解析 インデクシング Doc# ドキュメント内容 1 Microsoft is introducing SQL Server 2 Windows Server on Azure 3 Microsoft is introducing Azure 4 Application programming on Microsoft Azure Terms Doc# microsoft 1, 3, 4 introducing 1, 3 sql 1 server 1, 2 Windows 2 azure 2, 3, 4 application 4 programming 4 転置 インデックス
  69. 69. Query: Microsoft Terms Doc# microsoft 1, 3, 4 introducing 1, 3 sql 1 server 1, 2 Windows 2 azure 2, 3, 4 application 4 programming 4 Doc# ドキュメント内容 1 Microsoft is introducing SQL Server 2 Windows Server on Azure 3 Microsoft is introducing Azure 4 Application programming on Microsoft Azure
  70. 70. Doc# ドキュメント内容 1 Microsoft is introducing SQL Server 2 Windows Server on Azure 3 Microsoft is introducing Azure 4 Application programming on Microsoft Azure Terms Doc# microsoft 1, 3, 4 introducing 1, 3 sql 1 server 1, 2 Windows 2 azure 2, 3, 4 application 4 programming 4 3 1 Azure Microsoft 4 Query: Microsoft AND Azure 2
  71. 71. Doc# ドキュメント内容 4 Application programming on Microsoft Azure Terms Doc# application 4:0 Programming 4:12 microsoft 4:27 azure 4:37 インデクシング ドキュメント中の各トークン のoffset値 (0)application (12)programming (27)Microsoft (37)Azure
  72. 72. Doc# ドキュメント内容 1 Microsoft is introducing SQL Server 2 Windows Server on Azure 3 Microsoft is introducing Azure 4 Application programming on Microsoft Azure Terms Doc# microsoft 1:0 3:0 4:27 introducing 1:14 3:13 sql 1:26 server 1:30 2:8 Windows 2:0 azure 2:18 3:25 4:37 application 4:0 programming 4:12 Query: “Microsoft Azure” キーワード1のオフセットとキー ワード1とスペース(1)の長さの合 計がキーワード2のオフセット等 しくなるフレーズが含まれるド キュメントを探す Doc#4の場合 k1len:キーワード1長(“Microsoft”) =9 k1off: キーワード1のオフセット = 27 k2off: キーワード2(“Azure”)のオフセッ ト =37 ⇒ k1off + (k1len +1) = k2off フレーズクエリ:ダブルクォートで囲む
  73. 73. 語幹変化(Stemming) 見出し語変化(Lemmatization) 語尾を切り離し語幹(Stem)に統一 単語を見出し語(lemma)化するプロセ ス、語尾変化や語尾派生に対応 • engineering, engineers, engineered → engineer • car, cars, car’s, cars’ → car • compressing, compressed → compress • コンピューター → コンピュータ • コーナー → コーナ • am, are, is → (to) be • gone, going, goes, went → go • 行われ → 行う
  74. 74. 正規化の例 • U.S.A → USA • Co-education → coeducation • 半角カタカナ→全角カタカナ • カタカナ→ひらがな • Alphabētikós Katálogos → Alphabetikos Katalogos #Non Spacing mark • Αλφαβητικός Κατάλογος → Alphabētikós Katálogos #latin • 簡化字 → 简化字
  75. 75. ストップワード除去例 Instructions are applicable to these Adventure Works Cycles models ↓ Instructions applicable Adventure Works Cycles models
  76. 76. アンチフレージング例 Who is Miles Davis?" ↓ Miles Davis?
  77. 77. 同義語展開の例 • 二酸化炭素 → 二酸化炭素, co2, 炭酸ガス • マイクロソフト → マイクロソフト、MS、日本MS、日本マイクロソフ ト、Microsoft Japan, Microsoft • ヴァーチャル → ヴァーチャル、バーチャル • ダイヤモンド → ダイヤモンド、ダイアモンド

×