SlideShare a Scribd company logo
1 of 90
Azure Search 言語処理関連機能
アナライザー、検索クエリー、辞書、& ランキング, etc.
Presentation Slides for Azure Search Workshop
これはAzure Searchの言語処理関連機能である
アナライザー、検索クエリー、辞書、ランキング
にフォーカスした資料になります。
Azure Searchの機能全般に関してはこちらを
参照ください
• Azure Searchとは?(Azure Docs)
• Azure サービスを活用して作るフルマネージドな全文検索
アプリケーション
Id: 375
Question: “What is..?”
Answer: “This is …”
Category: “Azure”
Keywords: “kw1”,”kw2”,
URL: “https://...”
ドキュメント
フィールド
テキストトークン
インデックス
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
全文検索における再現率と適合率の考え方
再現率(Recall)
適合率
(Precision)
検索ヒット数↑
検索ノイズ ↑
検索精度↑
検索漏れ↑
再現率、適合率の最適なブレイクポイント
QueryParser Search
Engine
Analyzer
IndexWriter
インデックスSimple lucene
Analyzed
terms
Query
terms
Query
tree
Query
text
Documents
terms
Analyzed
terms
Retrieve Ingest
Analyzer
ドキュメント
検索処理
• クエリーを元に
トークン引き当て
• ランキング処理
クエリ文を解析し内部
クエリ―形式に変換
テキスト解析を行いトークンの
展開、変換、削除などを行う
転置インデックス
インデックス生成処理
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
文字列分割方式
• N-gram
• 形態素解析
再現率/適合率向上のための手法例
• 語幹変化/見出し語変化
• 正規化
• ストップワード除去
• アンチフレージング
• 同義語展開
• スペルチェック
• クエリサジェスト
• ファセット/ナビゲーション
• クラスタリングエンティティ抽出
再現率/ 適合率向上のための主要技術
語幹変化(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
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”
“東京都”
“ルパン”
“上映”
“時間”
N-gram 形態素解析
トークナイズの速度 早い 遅い
インデックスのサイズ 大きい 小さい
精度 (precision) 低い 高い
ヒットする量 (recall) 多い 少ない
検索スピード 遅い 速い
運用コスト 低い
辞書不要
高い
辞書の用意、メンテナンスが必要
# ドキュメント
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」で検索
テキスト解析
インデクシング
テキスト解析の基盤は
Lucene Core
処理単位はアナライザー
{
"name":"description",
"type":"Edm.String",
"searchable": true,
"filterable":false,
"sortable":false,
"facetable":false,
"retrievable":true
"analyzer":"ja.microsoft"
}
どうトークンを作
成するかを決める
転置インデックス
作成(トークン化)
ドキュメン
ト保存
インデックス
インデックススキーマ定義で設定すること
管理ポータルもしくは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
https://docs.microsoft.com/en-us/azure/search/search-howto-complex-data-types
Collection型
スキーマ変更に関する注意点
スキーマの更新は限定的にサポート
〇
✖
• 新しいフィールドの追加
• 新しいフィールドが追加されると既存ドキュメントの追
加フィールドの値はNULL扱い
• 既存フィールドの種類変更、削除
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設定
スコアリング
プロファイル設定
基本設定
フィールド属性
アナライザー
設定
サジェスタ設定
基本設定
フィールド属性
アナライザー
サジェスタ設定
スコアリング
プロファイル設定
CORS設定
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
• インデクシング処理時とクエリ処理時実行されるテキスト解析処理
• フィールド単位で設定可能
• カスタムアナライザーで独自アナライザの定義が可能
<b>Azure Search</b> allows
you to easily add a robust
search experience
インデックス処理 クエリ処理
• 文字列のトークン化
• 語幹変化/見出し語変化
• 正規化
• ストップワード除去
• アンチフレージング
検索結果の再現率/適合率
向上のため手法
主要なテキスト解析処理
→ 方式: 形態素解析, N-Gram
文字フィルタ ( Char Filters )
トークナイズ処理の前、文字レベルの加工処理
1アナライザ に0個以上の 文字フィルタを定義可能
トークナイザ ( Tokenizer )
文字列をトークン(単語)に分かち書き方法を定義
1アナライザ に1つのトークナイザを設定可能
トークンフィルタ ( Token
Filters )
トークナイズ処理後、トークンに対して加工処理を提供
1アナライザ に0個以上の トークンフィルタを定義可能
a s
文字列をトークンに分かち書き
トークンを小文字化
ストップワードを削除
HtmlStripCharFilter
文字列からHTMLタグを削除
a s
文字列をトークンに分かち書き
トークンを小文字化
ストップワードを削除
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月対応状況
重要性の低いトーク
ン(ごみ)がヒット
している
日本語文章に適した
トークン分割がされ
ていない
StandardAnalzyer(標準
アナライザー)フィールド
の日本語検索結果
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
マイクロソフト自然言語処理(NLP)技術
ja.microsoft
Lucene Core
ja.lucene kuromoji
言語別アナライザー一覧
日本語の場合ja.luceneかja.microsoftの2択と考えてよい
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
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":(任意)[フィルタ(複数)]
}
https://github.com/yokawasa/azure-search-ta
テキスト「 経済新聞をかいにいく」の解析
https://www.atilika.com/ja/products/kuromoji.html
http://atilika.org/kuromoji/
ja.lucene
• kuromoji を使用
• default(search)テキスト分割モードで
設定
ja.microsoft
• マイクロソフト日本語NLP
• 詳細処理非公開
吾輩はここで始めて人間というものを見た。 吾輩はここで始めて人間というものを見た。
掌の上で少し落ちついて書生の顔を見たの
がいわゆる人間というものの見始みはじめ
であろう。
掌の上で少し落ちついて書生の顔を見たの
がいわゆる人間というものの見始みはじめ
であろう。
人間
人間 見た
見
見
人間
人間
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
"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
文字フィルタ
トークナイザ
トークンフィルタ
日本語用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”
文字列分かち書き
(3グラム)
HTML_Strip HTMLタグを削除
(吾輩|わがはい|私|自分)
(猫|ねこ|ネコ|CAT)
“吾輩”と”猫”を同義語展開
(猫|ねこ|ネコ|CAT)
“ネコ” を同義語展開
半角カタカナ全角化
文字列分かち書き
(3グラム)
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
クエリ―について
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/
https://docs.microsoft.com/en-us/rest/api/searchservice/search-documents
8KB
要URL encode
約16MB
URLencode不要
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
/indexes/myindex/doc
s?$filter=geo.intersects
(loc,geography'POLYGON((
-122.03157 47.57858,
-122.13157 47.67858,
-122.03157 47.57858))')
&search=キーワード
検索
(アナライザ+
ランキング)
絞り込み
特定ポリゴン内に存在するドキュメント検索
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
simple full
クエリーパーサーを選択
Simple クエリ (simple)
• 規定のクエリで表現性は低い
• AND, OR, NOT 検索
• ワイルドカード検索
• フレーズ検索
• グループ化
(full)
• Apache Luceneクエリが利用可
• 表現性の高いクエリ言語
• フィールドスコープ
• あいまい検索(fuzzy)
• 近似検索(proximity)
• Termブースティング
• 正規表現
• ワイルドカード検索
• フレーズ検索
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)
フィールドスコープ「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
ブースティング「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*
&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
• レーベンシュタイン距離(編集距離)
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
(レーベンシュタイン距離など
同義語辞書
クエリ処理
Microsoft
「Microsoft」で検索
インデックス
Synonym
Maps
Microsoft
OR MSFT
OR MS
OR マイクロソフト
…
Microsoft, MSFT, MS, マイクロソフト
…
「Microsoft」でクエリを投げ
「マイクロソフト」,「MSFT」,
「MS」が含まれた文書もヒット
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
フォーマット詳細:Lucene SolrSynonymParser APIリファレンス
i-pod, i pod => ipod
i-pod, i pod, ipod
foo => foo, bar
foo => baz
foo => foo, bar, baz
{
"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" ]
}
https://feedback.azure.com/forums/263029-azure-search/suggestions/8410635-support-custom-dictionary
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
ドキュメントの
関連性の数値化
(スコアリング)
ランクスコア
順に
結果表示
検索開始
ソート
条件あり
orderby=pricesearch=suface
TF-IDFベース
のスコア
スコアリン
グプロファ
イルによる
加点スコア
Σ
ランク
スコア
Term Frequency Inverse Document Frequency
単語の出現頻度 単語の特徴度(レア度)
https://ja.wikipedia.org/wiki/Tf-
idf
スコアリング関数設定
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)
プロファイル名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フィールドにのみ有効
属性 説明
magnitude 数値フィールドの値に基づく。星評価、クリック数など
freshness DateTimeOffsetフィールドの値に基づく
distance 地理的情報に基づく
線形 (Linear) 一定の減少量で。既定の補間
定数
(Constant)
一定の値
二次式
(Quadratic)
最初は遅いペースで低下し、範囲の終わり近づく
につれて低下するペースが速く
Log10
(Logarithmic )
最初は速いペースで低下し、範囲の終わり近づく
につれて低下するペースが遅く
https://msdn.microsoft.com/library/azure/dn798928.aspx/
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で決定
スコアリング関
規ス定コアリン
グ
スコアリングプロファイル①
• フィールドウェイト設定
スコアリングプロファイル②
• 鮮度(freshness)でのブースト設定
• 数値やその範囲(magnitude)による
ブースト設定
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を参照ください
©︎ Copyright Microsoft Corporation. All rights reserved
Thank you
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
サンプルアプリケーション
 Q&Aナレジッジベース全文検索アプリ
 インデックス作成、インデクサ作成、検索クエリ、同義語辞書など
一通りのAPI処理サンプルがアップされています
 サンプルソースコード
https://github.com/yokawasa/azure-search-qna-demo
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
登場人物 役割 設定箇所 変更コスト
アナライザー テキストのトークン化 インデックススキーマ 大
(小: 新規フィールド追
加でアナライザ設定)
クエリ トークンの絞り込み、マッ
チングの挙動と結果評価の
制御
クエリパラメータ 小
ランキング 関連度(スコア)の計算 スコアリングプロファイル
クエリパラメータ
小
同義語辞書 辞書ベースのキーワードの
展開(クエリ側でのみ)
同義語辞書
インデックススキーマ
小
(大: 既存フィールドへ
の新規定義追加が必要な
場合)
最適なフィールド属性の定義
• 必要最低限の機能有効化。特に不要な言語解析処理
(searchable)は避ける
最適なアナライザーの選定
• テキスト解析の基本処理なので選択は慎重に
• 基本的に日本語はja.luceneかja.microsoftの2択
スコアリング- フィールドウェイト調
整
• searchableフィールドにフィールドウェイト設定
クエリパラメータ選定
• searchMode、queryType、$filter、search
短時間で
そこそこの結果
にするために
まずできること
スペルミス・タイプミス対策
• あいまい検索(fuzzy)や近似検索( Proximity)
ランキングのパーソナライズ
• ユーザの位置/関心内容に応じてランキングを変える
– 距離/Tagブースト
自前でテキスト解析処理を施す
• Azure Search未サポート処理をAzure Search外の処理でカ
バーするアプローチ
• 例)事前にキーワード文字列の正規化やノイズ除去
アナライザーのカスタマイズ(△)
• カスタムアナライザでアナライザーの振る舞いをカスタ
マイズ。ただし現時点(2018年6月)では日本語モジュー
ルが不十分なので日本語検索ではあまり効果が期待でき
ない。
さらに
精度・利便性
を上げるために
できること
同義語、類義語対応
• 再現率を上げたいフィールドに対して同義語辞書
(Public Preview)機能の有効化。辞書更新は逐次
https://channel9.msdn.com/Events/de-
code/2017/DI08
https://www.slideshare.net/decode2017/di08-azure-
search
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
テキスト解析
インデクシング
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
転置
インデックス
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
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
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
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
フレーズクエリ:ダブルクォートで囲む
語幹変化(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
• 行われ → 行う
正規化の例
• U.S.A → USA
• Co-education → coeducation
• 半角カタカナ→全角カタカナ
• カタカナ→ひらがな
• Alphabētikós Katálogos → Alphabetikos Katalogos #Non Spacing mark
• Αλφαβητικός Κατάλογος → Alphabētikós Katálogos #latin
• 簡化字 → 简化字
ストップワード除去例
Instructions are applicable to these Adventure Works Cycles models
↓
Instructions applicable Adventure Works Cycles models
アンチフレージング例
Who is Miles Davis?"
↓
Miles Davis?
同義語展開の例
• 二酸化炭素 → 二酸化炭素, co2, 炭酸ガス
• マイクロソフト → マイクロソフト、MS、日本MS、日本マイクロソフ
ト、Microsoft Japan, Microsoft
• ヴァーチャル → ヴァーチャル、バーチャル
• ダイヤモンド → ダイヤモンド、ダイアモンド

More Related Content

What's hot

Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
15分でお届けする Elastic Stack on Azure 設計・構築ノウハウ
15分でお届けする Elastic Stack on Azure 設計・構築ノウハウ15分でお届けする Elastic Stack on Azure 設計・構築ノウハウ
15分でお届けする Elastic Stack on Azure 設計・構築ノウハウYoichi Kawasaki
 
Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法Takeshi Fukuhara
 
SQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリSQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリItabashi Masayuki
 
インフラ野郎AzureチームProX
インフラ野郎AzureチームProXインフラ野郎AzureチームProX
インフラ野郎AzureチームProXToru Makabe
 
リクルート流Elasticsearchの使い方
リクルート流Elasticsearchの使い方リクルート流Elasticsearchの使い方
リクルート流Elasticsearchの使い方Recruit Technologies
 
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)Yasuharu Nishi
 
CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 Shuji Watanabe
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。Matsushita Satoshi
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテストTakuto Wada
 
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話Hibino Hisashi
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころTakuto Wada
 
UTP(UML Testing Profile)概要紹介
UTP(UML Testing Profile)概要紹介UTP(UML Testing Profile)概要紹介
UTP(UML Testing Profile)概要紹介Noriyuki Mizuno
 
Elasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させるElasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させるnobu_k
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタSatoyuki Tsukano
 
アプリケーション開発者のためのAzure Databricks入門
アプリケーション開発者のためのAzure Databricks入門アプリケーション開発者のためのAzure Databricks入門
アプリケーション開発者のためのAzure Databricks入門Yoichi Kawasaki
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
App013 ここはあえて紙と
App013 ここはあえて紙とApp013 ここはあえて紙と
App013 ここはあえて紙とTech Summit 2016
 

What's hot (20)

Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
15分でお届けする Elastic Stack on Azure 設計・構築ノウハウ
15分でお届けする Elastic Stack on Azure 設計・構築ノウハウ15分でお届けする Elastic Stack on Azure 設計・構築ノウハウ
15分でお届けする Elastic Stack on Azure 設計・構築ノウハウ
 
Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法
 
SQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリSQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリ
 
インフラ野郎AzureチームProX
インフラ野郎AzureチームProXインフラ野郎AzureチームProX
インフラ野郎AzureチームProX
 
リクルート流Elasticsearchの使い方
リクルート流Elasticsearchの使い方リクルート流Elasticsearchの使い方
リクルート流Elasticsearchの使い方
 
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
 
CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
UTP(UML Testing Profile)概要紹介
UTP(UML Testing Profile)概要紹介UTP(UML Testing Profile)概要紹介
UTP(UML Testing Profile)概要紹介
 
Elasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させるElasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させる
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
 
アプリケーション開発者のためのAzure Databricks入門
アプリケーション開発者のためのAzure Databricks入門アプリケーション開発者のためのAzure Databricks入門
アプリケーション開発者のためのAzure Databricks入門
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
App013 ここはあえて紙と
App013 ここはあえて紙とApp013 ここはあえて紙と
App013 ここはあえて紙と
 

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

Kaggle参加報告: Quora Insincere Questions Classification
Kaggle参加報告: Quora Insincere Questions ClassificationKaggle参加報告: Quora Insincere Questions Classification
Kaggle参加報告: Quora Insincere Questions ClassificationKazuki Fujikawa
 
全文検索In着うた配信サービス
全文検索In着うた配信サービス全文検索In着うた配信サービス
全文検索In着うた配信サービスtechtalkdwango
 
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -Yoichi Kawasaki
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905Nobuaki Oshiro
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...Amazon Web Services Japan
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010Nobuaki Oshiro
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャazuma satoshi
 
スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類Yahoo!デベロッパーネットワーク
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~Naoki (Neo) SATO
 
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_searchKazuhiro Wada
 
オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張
オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張
オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張Takeshi Morita
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティスAkihiro Kuwano
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類Shuzo Kashihara
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)Shinichiro Isago
 

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

Kaggle参加報告: Quora Insincere Questions Classification
Kaggle参加報告: Quora Insincere Questions ClassificationKaggle参加報告: Quora Insincere Questions Classification
Kaggle参加報告: Quora Insincere Questions Classification
 
HCL Nomad と OCR
HCL Nomad と OCRHCL Nomad と OCR
HCL Nomad と OCR
 
全文検索In着うた配信サービス
全文検索In着うた配信サービス全文検索In着うた配信サービス
全文検索In着うた配信サービス
 
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
 
Apache Solr 入門
Apache Solr 入門Apache Solr 入門
Apache Solr 入門
 
Azure Functions Tips
Azure Functions TipsAzure Functions Tips
Azure Functions Tips
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャ
 
スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
 
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search
 
NLP2012
NLP2012NLP2012
NLP2012
 
オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張
オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張
オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
 
Apache Spark on Azure
Apache Spark on AzureApache Spark on Azure
Apache Spark on Azure
 
Proxy War
Proxy WarProxy War
Proxy War
 

More from Yoichi Kawasaki

今Serverlessが面白いわけ v19.09
今Serverlessが面白いわけ v19.09今Serverlessが面白いわけ v19.09
今Serverlessが面白いわけ v19.09Yoichi Kawasaki
 
今Serverlessが面白いわけ
今Serverlessが面白いわけ今Serverlessが面白いわけ
今Serverlessが面白いわけYoichi Kawasaki
 
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Age
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Ageクラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Age
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native AgeYoichi Kawasaki
 
Azure Functions 2.0 Deep Dive - デベロッパーのための最新開発ガイド
Azure Functions 2.0 Deep Dive - デベロッパーのための最新開発ガイドAzure Functions 2.0 Deep Dive - デベロッパーのための最新開発ガイド
Azure Functions 2.0 Deep Dive - デベロッパーのための最新開発ガイドYoichi Kawasaki
 
デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューション
デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューションデベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューション
デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューションYoichi Kawasaki
 
Service Mesh Status Quo 2018: 2019年に向けたService Meshの現状課題の整理と考察
Service Mesh Status Quo 2018:  2019年に向けたService Meshの現状課題の整理と考察Service Mesh Status Quo 2018:  2019年に向けたService Meshの現状課題の整理と考察
Service Mesh Status Quo 2018: 2019年に向けたService Meshの現状課題の整理と考察Yoichi Kawasaki
 
Azure Containers & Serverless Technology Options (After-Tech-Summit-2018 Edit...
Azure Containers & Serverless Technology Options (After-Tech-Summit-2018 Edit...Azure Containers & Serverless Technology Options (After-Tech-Summit-2018 Edit...
Azure Containers & Serverless Technology Options (After-Tech-Summit-2018 Edit...Yoichi Kawasaki
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門Yoichi Kawasaki
 
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望Yoichi Kawasaki
 
Kubernetes x PaaS – コンテナアプリケーションのNoOpsへの挑戦
Kubernetes x PaaS – コンテナアプリケーションのNoOpsへの挑戦Kubernetes x PaaS – コンテナアプリケーションのNoOpsへの挑戦
Kubernetes x PaaS – コンテナアプリケーションのNoOpsへの挑戦Yoichi Kawasaki
 
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -Yoichi Kawasaki
 
Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!
Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!
Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!Yoichi Kawasaki
 
Azure PaaSを活用したモダン E コマースソリューションの構築方法
Azure PaaSを活用したモダン E コマースソリューションの構築方法Azure PaaSを活用したモダン E コマースソリューションの構築方法
Azure PaaSを活用したモダン E コマースソリューションの構築方法Yoichi Kawasaki
 
PythonによるAzureサーバレスアプリケーション開発 / Serverless Application Development with Python
PythonによるAzureサーバレスアプリケーション開発 / Serverless Application Development with PythonPythonによるAzureサーバレスアプリケーション開発 / Serverless Application Development with Python
PythonによるAzureサーバレスアプリケーション開発 / Serverless Application Development with PythonYoichi Kawasaki
 
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう! Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう! Yoichi Kawasaki
 
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!Yoichi Kawasaki
 

More from Yoichi Kawasaki (16)

今Serverlessが面白いわけ v19.09
今Serverlessが面白いわけ v19.09今Serverlessが面白いわけ v19.09
今Serverlessが面白いわけ v19.09
 
今Serverlessが面白いわけ
今Serverlessが面白いわけ今Serverlessが面白いわけ
今Serverlessが面白いわけ
 
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Age
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Ageクラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Age
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Age
 
Azure Functions 2.0 Deep Dive - デベロッパーのための最新開発ガイド
Azure Functions 2.0 Deep Dive - デベロッパーのための最新開発ガイドAzure Functions 2.0 Deep Dive - デベロッパーのための最新開発ガイド
Azure Functions 2.0 Deep Dive - デベロッパーのための最新開発ガイド
 
デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューション
デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューションデベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューション
デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューション
 
Service Mesh Status Quo 2018: 2019年に向けたService Meshの現状課題の整理と考察
Service Mesh Status Quo 2018:  2019年に向けたService Meshの現状課題の整理と考察Service Mesh Status Quo 2018:  2019年に向けたService Meshの現状課題の整理と考察
Service Mesh Status Quo 2018: 2019年に向けたService Meshの現状課題の整理と考察
 
Azure Containers & Serverless Technology Options (After-Tech-Summit-2018 Edit...
Azure Containers & Serverless Technology Options (After-Tech-Summit-2018 Edit...Azure Containers & Serverless Technology Options (After-Tech-Summit-2018 Edit...
Azure Containers & Serverless Technology Options (After-Tech-Summit-2018 Edit...
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門
 
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望
 
Kubernetes x PaaS – コンテナアプリケーションのNoOpsへの挑戦
Kubernetes x PaaS – コンテナアプリケーションのNoOpsへの挑戦Kubernetes x PaaS – コンテナアプリケーションのNoOpsへの挑戦
Kubernetes x PaaS – コンテナアプリケーションのNoOpsへの挑戦
 
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -
 
Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!
Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!
Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!
 
Azure PaaSを活用したモダン E コマースソリューションの構築方法
Azure PaaSを活用したモダン E コマースソリューションの構築方法Azure PaaSを活用したモダン E コマースソリューションの構築方法
Azure PaaSを活用したモダン E コマースソリューションの構築方法
 
PythonによるAzureサーバレスアプリケーション開発 / Serverless Application Development with Python
PythonによるAzureサーバレスアプリケーション開発 / Serverless Application Development with PythonPythonによるAzureサーバレスアプリケーション開発 / Serverless Application Development with Python
PythonによるAzureサーバレスアプリケーション開発 / Serverless Application Development with Python
 
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう! Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
 
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
 

Recently uploaded

TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 

Recently uploaded (11)

TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 

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

Editor's Notes

  1. まずは検索周りの用語がちょっとだけ特殊なので用語の整理から始めたいと思います インデックスはデータの保存先 ドキュメントは保存されたデータ。RDBのRow/レコードにあたります。 フィールドは各ドキュメントの属性にあたり、RDBの各レコードのカラムになります。 トークンとは、テキストをテキスト解析により分割された単語のことをトークンと呼び、でこれを最小単位とします この後の私の説明ででてきますので頭にいれておいてください
  2. 検索精度を定量的に表す方法として情報検索の分野ではPrecisionRecallという尺度がある 再現率、適合率のトレードオフで最適なところを探すことが重要である
  3. それでは本題の説明に入っていきたいと思いますが、まずは全文検索の処理フローの全体像をみてみましょう。
  4. なぜ検索エンジンが検索キーワードに対して高速にドキュメントをヒットさせることができるのか? 秘密はこの転置インデックスのデータ構造にあります <転置インデックス説明> 見ていただいてお分かりの通りトークンのマッチングがされてからシークが発生していません。これが高速にマッチングさせる秘密になります
  5. Apache Luceneは? - オープンソースの検索エンジンライブラリ ASもLuceneベースとして作られている。 Apache Solr、ElasticSearch同様
  6. データベースのテーブルスキーマと同じです。当たり前なのですが重要なので強調させていただきます。 インデックススキーマのフィールド定義では検索するのか、フィルターができるのか。ソートできるのか、結果を取得できるのか、アナライザーは何を使うのか?を決めます。 → データサイズとパフォーマンスに影響する。 → ここでお伝えしたいメッセージは。Defaultほとんどがtrueです。使っていないにも関わらず無駄にインデックが生成されて、無駄な処理が走ります。なので無駄な定義は削って、必要最低限の設定にすることを徹底ください。
  7.  Analyzer は、インデックスするフィールドマッピング単位で設定可能で、インデックス時と検索時のクエリ文字列処理で使用されます。
  8. アナライザーでは様々なテキスト解析が行われますが、ここでは代表的なものを上げました 時間の都合で詳細は控えますが、ざっと説明すると 文字列トークン化: - 形態素解析: 自然言語しょり、文脈の解析、単語分解を行うトークンを抽出。解析のために辞書を必要 - N-Gram: 自然言語処理全く関係なくN文字ずつ機械的に分割。辞書を必要としない。 語幹変化・見出し語変化 + 正規化: いづれも表記の揺れへの対応: 「食べる」→「食べている、食べました」、半角カタカナ全角カタカナ、アナライザー、アナライザ伸ばしたりのばしなかったり ストップワード除去・アンチフレージング: ノイズ除去 語幹変化 / 見出し語変化: 食べている -> 食べ | 食べている -> 食べる 正規化: 単語を一定ルールで変化させ検索結果質を向上させるためのプロセス。表記の揺れへの対応    半角カタカナ→全角, 漢字の旧字体→新字体 ストップワード: 助詞や助動詞などの機能語。日本語ならば「は」「の」「です」「ます」など、英語ならば「a」「the」「and」など アンチフレージング: 語句の削除 Who is / What is  誰ですか? / 何ですか? (ストップワードのように単語ではない)
  9. 架空のアナライザ
  10. StandardAnalyzer: Europeanベースの言語解析に対して有効なアナライザ 日本語に対しては期待通りの解析がされない -> そのことをお見せするために次にデモをやります
  11. 1分35秒→ 1分 いろいろなアナライザーがあります。言語特化型もあれば言語関係のないアナライザーもございますが皆さんが日本語のアナライザを選択されるときはこちらの言語別なライザーになります。 言語特化型のアナライザーは大きく分けて2種類ございます。 どちらがベストフィットするかは必ず比較検証の上ご判断ください https://docs.microsoft.com/en-us/rest/api/searchservice/language-support 処理内容は言語ごとに異なるため適用の際はその精度・パフォーマンス共に十分検証してご判断いただくことを推奨します
  12. アナライザーはテキスト解析をする。判断基準はどう解析されてトークン化されるのか?ですよね? であればその内容は確認する必要があります。マッチングとはトークンとトークンのマッチングだからです。
  13. 続いてクエリ―のチューニングポイントについてみていきましょう。 アナライザーがテキストをテキスト解析でトークン化するのに対して、クエリ―文やクエリパラメータはトークンの引き当て方と結果の取集方法を決定します。
  14. それではそのクエリ―パラメータの整理をします。 検索クエリにはsearchと$filterの2種類がありそれぞれ用途、使い方が異なる Search は全文検索用でアナライザ、ランキング処理が走る 一方 $filterは絞り込みようのパラメータでアナライザ、ランキング処理は走りません。よって、searchに比べて$fitlerは軽いです。 searchModeとqueryTypeはsearch関連のパラメータでそれぞれ全文検索の結果の集め方やどのクエリパーサーを使うのかを指定します。後ほど説明していきます。
  15. 1分40秒→ 30秒にする Searchとfilterの評価順序について。 - 一緒に使用した場合、フィルターが最初にインデックス全体に適用され、フィルターで絞り込まれた結果に対してsearchによる検索処理が実行されます。 先ほどお伝えしたようにsearchの処理ではアナライザの処理とランキング処理が走るのでフィルタよりも重く、よってできるだけフィルタで絞り込んで、絞り切られた結果にsearchによる処理をかけるのが最も効率の良い検索方法になります。 パフォーマンスにかかわることですので評価順序は是非意識するようにクエリパラメータを組んでください
  16. 1分20秒→30秒に収める つづいてsearchMode、これは2つ以上のマッチング単位の結果の集め方を決めるパラメータです A <space> Bはトークン「A」と「B」に分割されて、それぞれでマッチング処理が行われます searchMode=anyの時はA OR Bでその結果を集める searchMode=allの時はA AND Bでその結果を集めます 再現率を高く、ヒット数をあげていきたいのか?やはり少なくても精度を求めていきたいのか?で選択ください。 AとBとありますが、これを「Azure」と「Search」で考えても良い 「Azure Search」はデフォルト「Azure」「Search」で分割されますが、「Auzre」「Search」でのマッチング結果をORなのかANDで集めるのかを選択する まさに再現率と適合率に影響の与える重要パラメータになります
  17. 1分20秒→30秒に収める 次にsearchType、これでクエリパーサーの選択をします。 パーサーによって使えるクエリ言語が違います。SimpleはSimpleクエリ, fullはapache luceneのluceneクエリ 規定はSimpleで、 Simpleはすべての検索可能なsearchable fieldに対してマッチング。表現性は高くはありません 一方fullの場合Apache LuceneのLuceneクエリ―パーサーを使用できる。Simpleと比べて表現性が高い 例えば, simpleと違い フィールドスコープ、あいまいにマッチングさせることができる マッチングの挙動を細かく制御していきたい場合は規定のSimpleではなくLuceneをお選びいただければと思います。 一応APPENDIXにもう少し細かく整理したスライドを用意していますので後で資料が公開されたら目を通しいただければ幸いです 実際にお使いになるときに細かく調べていただくと思いますので1つ1つ細かくは説明しませんが、 ここで頭に入れていただきたいのは、パーサーには2種類あってSimple とLucene選べる。 フレーズ検索= “トークンの順番”が同じものをヒットさせたい。「Azure Search」はデフォルト「Azure」「Search」で分割されて、それらがORで集約されますが。これを「Auzre」「Search」の順番に並んでいるものだけをヒットさせる あいまい検索(fuzzy)はトークンをあいまいにひっかける 近似検索(proximity)はトークン単位でのあいまい
  18. あいまい検索: N=0 は完全一致 近似検索: N=0は完全一致
  19. あいまい検索: N=0 は完全一致 近似検索: N=0は完全一致
  20. 検索条件が完全一致していなくても類似している対象を一定のルールのもとで抽出する検索。表記ゆれ吸収、スペルミス対策など検索漏れを少なくすることが主な目的 [補足] あいまい検索を利用した代表的な検索アプリケーション機能:自動補完、サジェスト、スペルチェック 文字列類似度計測アルゴリズムとして編集距離の他には文字がオーバーラップしている量を計測する方法がある。 代表的なものにJaccard係数(similarity coefficient)、Tanimoto係数、JARO-WINKLER距離
  21. 語幹変化・見出し語変化 + 正規化: いづれも表記の揺れへの対応: 「食べる」→「食べている、食べました」、半角カタカナ全角カタカナ、アナライザー、アナライザ伸ばしたりのばしなかったり
  22. SynonymMapへの追加Max16MB。これはMap更新APIのmax payloadが16MBであるため 現時点では1フィールドにつき1マップのみである(将来変更する可能性あり)
  23. 検索結果の並び順について頭の整理のためにこのスライドを用意した。 Search=* 「注意」 $filter=* は関連性の評価は行われない(フィルタはスコアリング処理を行わない)
  24. プロファイルを使う理由 = 関連性チューニング
  25. 全文探索やテキストマイニング使われる指標 IDF = document frequency(文書頻度)をinverse(逆数)にしたもの → いろいろな文書への出現が多ければIDFは低くなる
  26. Interpoloation = グラフ補間 https://ja.wikipedia.org/wiki/%E5%86%85%E6%8C%BF あるデータ列の区間の範囲内を埋める数値を求めること=> 範囲の始点から範囲の末尾の増加に基づくブーストスコアの傾斜を定義 例)フレッシュネス:新しいものほど高くブースト、古くなるほど下がる。その傾斜を決定する
  27. フィールドウェイトと4つの関数によるチューニング手法があるということ、これだけ頭に入れておいていただければと思います。 以上がランキングのチューニングポイントについてでした。
  28. ユーザごとのリクエストで任意のタグを指定して、ドキュメントにそのタグが含まれていればスコアをブーストさせるというもの。→ ユーザごとにランキングをパーソナライズする手法になります。 鍵になるのは2つ (1)各ドキュメントのキーフレイズの抽出→Tagフィールドへの格納 (2)個人別の関心のあるTagの選定。 これは過去の行動履歴を蓄積してそれに基づいて選定するということが考えられます。そうなってくるとBig data/機械学習との連携が見えてくるかと思います。 Tab boostフィールドはfilterableでなければならない https://azure.microsoft.com/en-us/blog/personalizing-search-results-announcing-tag-boosting-in-azure-search/
  29. それでは基礎編まとめとチューニングポイントを整理します。 Azure Searchで検索のチューニングをする際にはアナライザー、クエリ、ランキング、同義語辞書この4つがあることご理解いただけたかと思います。 それぞれ役割と、設定箇所が異なりますし、効果も異なります。 ここでは効果についてはあえて書いていません。理由はお使いになるドキュメントのデータ状況によってその効果が変わるからです。 注意点として、変更コストについて既存フィールドのアナライザの変更はできません。やる場合は新しいインデックスで実施ください。 - インデックススキーマは既存フィールドを変更(re-indexが発生するため)することはサポートされていない - スコアプロファイルはオンザフライで変更可能
  30. アナライザーのカスタマイズ: アナライザーの挙動をカスタマイズしてあげることも1つのオプションではあるためここに乗せておきましたがあえてグレーにしてます。 今回フォーカスが日本語検索でありますが、日本語に関してはカスタムアナライザーに必要な日本語モジュールが不十分なのでまだあまり使える状態ではない。そういう意味でグレーにしています。
  31. これまでの転置インデックスでは「キーワード1 ANDキーワード2」で検索すると? ⇒問題: 「キーワード1」と「キーワード2」の順番に並んでいるドキュメント以外にも 「キーワード1」と「キーワード2」を両方含むドキュメントが全てヒットしてしまう ⇒フレーズ検索のための対応方法として、ドキュメント中のトークン位置情報を転置インデックスに含める