Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Presentation Slides for Azure Search Workshop
Azure Search 言語処理関連機能
アナライザー、検索クエリー、辞書、& ランキング, etc.
Date: 2018/06/19

Moved from slideshare

Yoichi Kawasaki

June 19, 2018
Tweet

More Decks by Yoichi Kawasaki

Other Decks in Technology

Transcript

  1. Id: 375 Question: “What is..?” Answer: “This is …” Category:

    “Azure” Keywords: “kw1”,”kw2”, URL: “https://...” ドキュメント フィールド テキスト トークン インデックス
  2. QueryParser Search Engine Analyzer IndexWriter インデックス Simple lucene Analyzed terms

    Query terms Query tree Query text Documents terms Analyzed terms Retrieve Ingest Analyzer ドキュメント 検索処理 • クエリーを元に トークン引き当て • ランキング処理 クエリ文を解析し内部 クエリ―形式に変換 テキスト解析を行いトークンの 展開、変換、削除などを行う 転置インデックス インデックス生成処理
  3. 文字列分割方式 • N-gram • 形態素解析 再現率/適合率向上のための手法例 • 語幹変化/見出し語変化 • 正規化

    • ストップワード除去 • アンチフレージング • 同義語展開 • スペルチェック • クエリサジェスト • ファセット/ナビゲーション • クラスタリングエンティティ抽出
  4. 再現率/ 適合率向上のための主要技術 語幹変化(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
  5. 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” “東京都” “ルパン” “上映” “時間”
  6. N-gram 形態素解析 トークナイズの速度 早い 遅い インデックスのサイズ 大きい 小さい 精度 (precision)

    低い 高い ヒットする量 (recall) 多い 少ない 検索スピード 遅い 速い 運用コスト 低い 辞書不要 高い 辞書の用意、メンテナンスが必要
  7. # ドキュメント 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」で検索 テキスト解析 インデクシング
  8. { "name":"description", "type":"Edm.String", "searchable": true, "filterable":false, "sortable":false, "facetable":false, "retrievable":true "analyzer":"ja.microsoft"

    } どうトークンを作 成するかを決める 転置インデックス 作成(トークン化) ドキュメン ト保存 インデックス
  9. インデックススキーマ定義で設定すること 管理ポータルもしくは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
  10. 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設定 スコアリング プロファイル設定
  11. • 文字列のトークン化 • 語幹変化/見出し語変化 • 正規化 • ストップワード除去 • アンチフレージング

    検索結果の再現率/適合率 向上のため手法 主要なテキスト解析処理 → 方式: 形態素解析, N-Gram
  12. 文字フィルタ ( Char Filters ) トークナイズ処理の前、文字レベルの加工処理 1アナライザ に0個以上の 文字フィルタを定義可能 トークナイザ

    ( Tokenizer ) 文字列をトークン(単語)に分かち書き方法を定義 1アナライザ に1つのトークナイザを設定可能 トークンフィルタ ( Token Filters ) トークナイズ処理後、トークンに対して加工処理を提供 1アナライザ に0個以上の トークンフィルタを定義可能
  13. 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月対応状況
  14. 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":(任意)[フィルタ(複数)] }
  15. ja.lucene • kuromoji を使用 • default(search)テキスト分割モードで 設定 ja.microsoft • マイクロソフト日本語NLP

    • 詳細処理非公開 吾輩はここで始めて人間というものを見た。 吾輩はここで始めて人間というものを見た。 掌の上で少し落ちついて書生の顔を見たの がいわゆる人間というものの見始みはじめ であろう。 掌の上で少し落ちついて書生の顔を見たの がいわゆる人間というものの見始みはじめ であろう。 人間 人間 見た 見 見 人間 人間
  16. 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 fall fall
  17. "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 文字フィルタ トークナイザ トークンフィルタ
  18. 日本語用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”
  19. 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/
  20. 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
  21. /indexes/myindex/doc s?$filter=geo.intersects (loc,geography'POLYGON(( -122.03157 47.57858, -122.13157 47.67858, -122.03157 47.57858))') &search=キーワード

    検索 (アナライザ+ ランキング) 絞り込み 特定ポリゴン内に存在するドキュメント検索
  22. simple full クエリーパーサーを選択 Simple クエリ (simple) • 規定のクエリで表現性は低い • AND,

    OR, NOT 検索 • ワイルドカード検索 • フレーズ検索 • グループ化 (full) • Apache Luceneクエリが利用可 • 表現性の高いクエリ言語 • フィールドスコープ • あいまい検索(fuzzy) • 近似検索(proximity) • Termブースティング • 正規表現 • ワイルドカード検索 • フレーズ検索
  23. 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)
  24. フィールドスコープ「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
  25. ブースティング「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*
  26. &queryType=full & searchMode=all title:Azureサポート +EA search= title:Azureサポート AND EA title:(Azure

    AND サポート) AND EA Luceneクエリパーサー指定 queryTypeでクエリパーサー選択 simple(規定) | full 検索語から演算子(title:や+など) を 切り出しサブクエリに分解 クエリ中の単語やフレーズに対し てアナライザーのテキスト解析 searchModeでBooleanクエリ規定 演算子決定 all→AND (規定)| any→OR
  27. • レーベンシュタイン距離(編集距離) 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
  28. クエリ処理 Microsoft 「Microsoft」で検索 インデックス Synonym Maps Microsoft OR MSFT OR

    MS OR マイクロソフト … Microsoft, MSFT, MS, マイクロソフト … 「Microsoft」でクエリを投げ 「マイクロソフト」,「MSFT」, 「MS」が含まれた文書もヒット
  29. { "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" ] }
  30. スコアリング関数設定 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)
  31. プロファイル名 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フィールドにのみ有効
  32. 属性 説明 magnitude 数値フィールドの値に基づく。星評価、クリック数など freshness DateTimeOffsetフィールドの値に基づく distance 地理的情報に基づく 線形 (Linear)

    一定の減少量で。既定の補間 定数 (Constant) 一定の値 二次式 (Quadratic) 最初は遅いペースで低下し、範囲の終わり近づく につれて低下するペースが速く Log10 (Logarithmic ) 最初は速いペースで低下し、範囲の終わり近づく につれて低下するペースが遅く https://msdn.microsoft.com/library/azure/dn798928.aspx/
  33. 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で決定 スコアリング関数 規ス定コアリング
  34. 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を参照ください
  35. 登場人物 役割 設定箇所 変更コスト アナライザー テキストのトークン化 インデックススキーマ 大 (小: 新規フィールド追

    加でアナライザ設定) クエリ トークンの絞り込み、マッ チングの挙動と結果評価の 制御 クエリパラメータ 小 ランキング 関連度(スコア)の計算 スコアリングプロファイル クエリパラメータ 小 同義語辞書 辞書ベースのキーワードの 展開(クエリ側でのみ) 同義語辞書 インデックススキーマ 小 (大: 既存フィールドへ の新規定義追加が必要な 場合)
  36. 最適なフィールド属性の定義 • 必要最低限の機能有効化。特に不要な言語解析処理 (searchable)は避ける 最適なアナライザーの選定 • テキスト解析の基本処理なので選択は慎重に • 基本的に日本語はja.luceneかja.microsoftの2択 スコアリング-

    フィールドウェイト調 整 • searchableフィールドにフィールドウェイト設定 クエリパラメータ選定 • searchMode、queryType、$filter、search 短時間で そこそこの結果 にするために まずできること
  37. スペルミス・タイプミス対策 • あいまい検索(fuzzy)や近似検索( Proximity) ランキングのパーソナライズ • ユーザの位置/関心内容に応じてランキングを変える – 距離/Tagブースト 自前でテキスト解析処理を施す

    • Azure Search未サポート処理をAzure Search外の処理でカ バーするアプローチ • 例)事前にキーワード文字列の正規化やノイズ除去 アナライザーのカスタマイズ(△) • カスタムアナライザでアナライザーの振る舞いをカスタ マイズ。ただし現時点(2018年6月)では日本語モジュー ルが不十分なので日本語検索ではあまり効果が期待でき ない。 さらに 精度・利便性 を上げるために できること 同義語、類義語対応 • 再現率を上げたいフィールドに対して同義語辞書 (Public Preview)機能の有効化。辞書更新は逐次
  38. テキスト解析 インデクシング 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 転置 インデックス
  39. 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
  40. 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
  41. 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
  42. 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 フレーズクエリ:ダブルクォートで囲む
  43. 語幹変化(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 • 行われ → 行う
  44. 正規化の例 • U.S.A → USA • Co-education → coeducation •

    半角カタカナ→全角カタカナ • カタカナ→ひらがな • Alphabētikós Katálogos → Alphabetikos Katalogos #Non Spacing mark • Αλφαβητικός Κατάλογος → Alphabētikós Katálogos #latin • 簡化字 → 简化字
  45. 同義語展開の例 • 二酸化炭素 → 二酸化炭素, co2, 炭酸ガス • マイクロソフト →

    マイクロソフト、MS、日本MS、日本マイクロソフ ト、Microsoft Japan, Microsoft • ヴァーチャル → ヴァーチャル、バーチャル • ダイヤモンド → ダイヤモンド、ダイアモンド